SpringBoot框架-自定义start启动器

    技术2022-07-10  95

    一、前言

            SpringBoot就是为了解决Spring臃肿的配置衍生出来的骨架,采用约定大于配置的方式,去除大量配置,今天带大家手写start组件。感受springBoot可插拔、伸缩扩展的代码结构;

     

    二、开发步骤

    1、约定大于配置:

            首先创建一个maven项目: 

    代码结构:

    resources目录下创建META-INF目录:

    创建两个附件:

    1)additional-spring-configuration-metadata.json  自动提示功能

    { "properties": [ { "name": "jason.redisson.host", "type": "java.lang.String", "description": "redis的服务器地址", "defaultValue": "localhost" },{ "name": "jason.redisson.port", "type": "java.lang.Integer", "description": "redis服务器的端口", "defaultValue": 6379 } ] }

    大家参考下面properties表格进行配置上的理解。

    名称类型目的nameString属性的全名。名称采用小写的周期分隔形式(例如server.address)。此属性是强制性的。typeString属性的数据类型的完整签名(例如java.lang.String),但也是完整的泛型类型(例如java.util.Map<java.util.String,acme.MyEnum>)。您可以使用此属性来指导用户可以输入的值的类型。为了保持一致性,通过使用其包装对应项(例如,boolean变为java.lang.Boolean)来指定基元的类型。请注意,此类可能是一个复杂类型,它从Stringas绑定的值转换而来。如果类型未知,则可以省略。descriptionString可以向用户显示的组的简短描述。如果没有可用的描述,则可以省略。建议描述为简短段落,第一行提供简明摘要。描述中的最后一行应以句点(.)结尾。sourceTypeString贡献此属性的源的类名称。例如,如果属性来自带注释的类@ConfigurationProperties,则此属性将包含该类的完全限定名称。如果源类型未知,则可以省略。defaultValueObject默认值,如果未指定属性,则使用该值。如果属性的类型是数组,则它可以是值数组。如果默认值未知,则可以省略。

    deprecation每个properties元素的属性中包含的JSON对象可以包含以下属性:

    名称类型目的levelString弃用级别,可以是warning(默认)或error。当属性具有warning弃用级别时,它仍应绑定在环境中。但是,当它具有error弃用级别时,该属性不再受管理且不受约束。reasonString该属性被弃用的原因的简短描述。如果没有可用的原因,可以省略。建议描述为简短段落,第一行提供简明摘要。描述中的最后一行应以句点(.)结尾。replacementString替换此不推荐使用的属性的属性的全名。如果此属性没有替换,则可以省略。

    2)spring.factories

     文件内容:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.jason.RedissonAutoConfiguration

    2、撸代码:

       配置类:

    package com.jason; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; /** * @program: redission-starter * @description * @author: 大龄程序猿 * @create: 2020-06-29 22:28 **/ @ConfigurationProperties(prefix = "jason.redisson") public class RedissonProperties { private String host="localhost"; private int port=6379; private int timeout; private boolean ssl; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public boolean isSsl() { return ssl; } public void setSsl(boolean ssl) { this.ssl = ssl; } }

    Redission封装:spring-boot-configuration-processor  引用。

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jason</groupId> <artifactId>redission-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> <name>redission-starter</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.0.RELEASE</version> <optional>true</optional> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.13.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.3.1.RELEASE</version> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> </build> </project>

     验证:

     

    三、附录-Spring Boot应用启动器收集:

    1、spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。 2、spring-boot-starter-actuator 帮助监控和管理应用。 3、spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol)。 4、spring-boot-starter-aop 支持面向方面的编程即AOP,包括spring-aop和AspectJ。 5、spring-boot-starter-artemis 通过Apache Artemis支持JMS的API(Java Message Service API)。 6、spring-boot-starter-batch 支持Spring Batch,包括HSQLDB数据库。 7、spring-boot-starter-cache 支持Spring的Cache抽象。 8、spring-boot-starter-cloud-connectors 支持Spring Cloud Connectors,简化了在像Cloud Foundry或Heroku这样的云平台上连接服务。 9、spring-boot-starter-data-elasticsearch 支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。 10、spring-boot-starter-data-gemfire 支持GemFire分布式数据存储,包括spring-data-gemfire。 11、spring-boot-starter-data-jpa 支持JPA(Java Persistence API),包括spring-data-jpa、spring-orm、Hibernate。 12、spring-boot-starter-data-mongodb 支持MongoDB数据,包括spring-data-mongodb。 13、spring-boot-starter-data-rest 通过spring-data-rest-webmvc,支持通过REST暴露Spring Data数据仓库。 14、spring-boot-starter-data-solr 支持Apache Solr搜索平台,包括spring-data-solr。 15、spring-boot-starter-freemarker 支持FreeMarker模板引擎。 16、spring-boot-starter-groovy-templates 支持Groovy模板引擎。 17、spring-boot-starter-hateoas 通过spring-hateoas支持基于HATEOAS的RESTful Web服务。 18、spring-boot-starter-hornetq 通过HornetQ支持JMS。 19、spring-boot-starter-integration 支持通用的spring-integration模块。 20、spring-boot-starter-jdbc 支持JDBC数据库。 21、spring-boot-starter-jersey 支持Jersey RESTful Web服务框架。 22、spring-boot-starter-jta-atomikos 通过Atomikos支持JTA分布式事务处理。 23、spring-boot-starter-jta-bitronix 通过Bitronix支持JTA分布式事务处理。 24、spring-boot-starter-mail 支持javax.mail模块。 25、spring-boot-starter-mobile 支持spring-mobile。 26、spring-boot-starter-mustache 支持Mustache模板引擎。 27、spring-boot-starter-redis 支持Redis键值存储数据库,包括spring-redis。 28、spring-boot-starter-security 支持spring-security。 29、spring-boot-starter-social-facebook 支持spring-social-facebook 30、spring-boot-starter-social-linkedin 支持pring-social-linkedin 31、spring-boot-starter-social-twitter 支持pring-social-twitter 32、spring-boot-starter-test 支持常规的测试依赖,包括JUnit、Hamcrest、Mockito以及spring-test模块。 33、spring-boot-starter-thymeleaf 支持Thymeleaf模板引擎,包括与Spring的集成。 34、spring-boot-starter-velocity 支持Velocity模板引擎。 35、spring-boot-starter-web S支持全栈式Web开发,包括Tomcat和spring-webmvc。 36、spring-boot-starter-websocket 支持WebSocket开发。 37、spring-boot-starter-ws 支持Spring Web Services。 Spring Boot应用启动器面向生产环境的还有2种,具体如下: 1、spring-boot-starter-actuator 增加了面向产品上线相关的功能,比如测量和监控。 2、spring-boot-starter-remote-shell 增加了远程ssh shell的支持。 最后,Spring Boot应用启动器还有一些替换技术的启动器,具体如下: 1、spring-boot-starter-jetty 引入了Jetty HTTP引擎(用于替换Tomcat)。 2、spring-boot-starter-log4j 支持Log4J日志框架。 3、spring-boot-starter-logging 引入了Spring Boot默认的日志框架Logback。 4、spring-boot-starter-tomcat 引入了Spring Boot默认的HTTP引擎Tomcat。 5、spring-boot-starter-undertow 引入了Undertow HTTP引擎(用于替换Tomcat)。

     

    Processed: 0.014, SQL: 9