SpringBoot启动器
参考: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter
Springboot的Stater的概念其实很像操作系统中的bootloader,在应用或者系统启动的时候需要把设备驱动、内存环境等都装配好。对于Springboot就是把依赖项和配置项进行装配啦。
启动器的特点就是你不需要每次都把依赖和配置相关代码拷贝到你的工程里,可以通过include所需starter来实现。
启动器的官方命名
SpringBoot的命名模板:
spring-boot-starter-*
对于第三方的starter应该不以spring-boot
作为前缀,或者可以在spring-boot
前面添加如:
thirdpartyproject-spring-boot-starter
SpringBoot提供的启动器
Spring Boot application starters
Name | Description |
---|---|
spring-boot-starter | Core starter, including auto-configuration support, logging and YAML 核心启动器,包括了自动配置和日志、和yaml |
spring-boot-starter-activemq | Starter for JMS messaging using Apache ActiveMQ |
spring-boot-starter-amqp | Starter for using Spring AMQP and Rabbit MQ |
spring-boot-starter-aop | Starter for aspect-oriented programming with Spring AOP and AspectJ |
spring-boot-starter-artemis | Starter for JMS(Java Message Service) messaging using Apache Artemis |
spring-boot-starter-batch | Starter for using Spring Batch |
spring-boot-starter-cache | Starter for using Spring Framework’s caching support |
spring-boot-starter-data-cassandra | Starter for using Cassandra distributed database and Spring Data Cassandra (Cassandra是一种分布式NoSQL数据库系统) |
spring-boot-starter-data-cassandra-reactive | Starter for using Cassandra distributed database and Spring Data Cassandra Reactive |
spring-boot-starter-data-couchbase | Starter for using Couchbase document-oriented database and Spring Data Couchbase |
spring-boot-starter-data-couchbase-reactive | Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive |
spring-boot-starter-data-elasticsearch | Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch |
spring-boot-starter-data-jdbc | Starter for using Spring Data JDBC |
spring-boot-starter-data-jpa | Starter for using Spring Data JPA with Hibernate |
spring-boot-starter-data-ldap | Starter for using Spring Data LDAP |
spring-boot-starter-data-mongodb | Starter for using MongoDB document-oriented database and Spring Data MongoDB |
spring-boot-starter-data-mongodb-reactive | Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive |
spring-boot-starter-data-neo4j | Starter for using Neo4j graph database and Spring Data Neo4j |
spring-boot-starter-data-r2dbc | Starter for using Spring Data R2DBC |
spring-boot-starter-data-redis | Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client |
spring-boot-starter-data-redis-reactive | Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client |
spring-boot-starter-data-rest | Starter for exposing Spring Data repositories over REST using Spring Data REST |
spring-boot-starter-data-solr | Starter for using the Apache Solr search platform with Spring Data Solr. Deprecated since 2.3.9 |
spring-boot-starter-freemarker | Starter for building MVC web applications using FreeMarker views |
spring-boot-starter-groovy-templates | Starter for building MVC web applications using Groovy Templates views |
spring-boot-starter-hateoas | Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS |
spring-boot-starter-integration | Starter for using Spring Integration |
spring-boot-starter-jdbc | Starter for using JDBC with the HikariCP connection pool |
spring-boot-starter-jersey | Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web |
spring-boot-starter-jooq | Starter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc |
spring-boot-starter-json | Starter for reading and writing json |
spring-boot-starter-jta-atomikos | Starter for JTA transactions using Atomikos |
spring-boot-starter-jta-bitronix | Starter for JTA transactions using Bitronix. Deprecated since 2.3.0 |
spring-boot-starter-mail | Starter for using Java Mail and Spring Framework’s email sending support |
spring-boot-starter-mustache | Starter for building web applications using Mustache views |
spring-boot-starter-oauth2-client | Starter for using Spring Security’s OAuth2/OpenID Connect client features |
spring-boot-starter-oauth2-resource-server | Starter for using Spring Security’s OAuth2 resource server features |
spring-boot-starter-quartz | Starter for using the Quartz scheduler |
spring-boot-starter-rsocket | Starter for building RSocket clients and servers |
spring-boot-starter-security | Starter for using Spring Security |
spring-boot-starter-test | Starter for testing Spring Boot applications with libraries including JUnit Jupiter, Hamcrest and Mockito |
spring-boot-starter-thymeleaf | Starter for building MVC web applications using Thymeleaf views |
spring-boot-starter-validation | Starter for using Java Bean Validation with Hibernate Validator |
spring-boot-starter-web | Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container(服务容器在这个启动器里被装配的) |
spring-boot-starter-web-services | Starter for using Spring Web Services |
spring-boot-starter-webflux | Starter for building WebFlux applications using Spring Framework’s Reactive Web support |
spring-boot-starter-websocket | Starter for building WebSocket applications using Spring Framework’s WebSocket support |
Spring Boot technical starters
Name | Description |
---|---|
spring-boot-starter-jetty | Starter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat |
spring-boot-starter-log4j2 | Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging |
spring-boot-starter-logging | Starter for logging using Logback. Default logging starter |
spring-boot-starter-reactor-netty | Starter for using Reactor Netty as the embedded reactive HTTP server. |
spring-boot-starter-tomcat | Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web |
spring-boot-starter-undertow | Starter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat |
自定义启动器包括内容
- 依赖环境的导入(pom.xml)
- 配置信息的导入 (application.yml、application.properties、@ConfigurationProperties等)
- 自动装配Bean和配置项等 (spring.factories、@Configuration)
创建自定义启动器
命名:
为了和Springboot提供的分开,你的启动器命名就不能以spring-boot
为开头。
比如你要创建一个acmestarter,可以把启动器命名为acme-spring-boot-stater
配置项
当你的启动器需要配置相关信息,可以使用一个独特的命名空间为它们坐区分。你可以把这个命名空间作为所有配置项的前缀。
使用注解@ConfigurationProperties来装配配置项信息,并为其添加javadoc
@ConfigurationProperties("acme")
public class AcmeProperties {
/**
* Whether to check the location of acme resources.
*/
private boolean checkLocation = true;
/**
* Timeout for establishing a connection to the acme server.
*/
private Duration loginTimeout = Duration.ofSeconds(3);
// getters & setters
}
最好能为你的配置项填上默认值,这样在导入你这个starter的时候就可以非必须地对其进行配置了。
自动装配类
上面的对配置项属性文件进行读取导入。现在需要一个装配类文件对这些配置项进行使用了,
其实也是对我们这个启动器需要用到的Bean装载的IOC容器里,还能用一些条件注解来
@COnfigutration
@EnableConfigurationProperties(AcmeProperties.class)
@ConditionalOnWebApplication
public class AcmeAutoConfiguration {
AcmeProperties acmeProperties
public AcmeAutoConfiguration(AcmeProperties acmeProperties){
this.acmeProperties = acmeProperties;
}
@Bean
@ConditionalOnMissingBean
public EmbeddedAcmeService embeddedAcmeService() { ... }
}
创建完我们的自动装配类,我们还需要在创建META-INF/spring.factories
,并在该文件告诉SpringBoot我们的自动装配类是啥。因为SpringBoot会检查你发布的jar包中是否存在该文件,需要在该文件的EnableAutoConfiguration
项下声明您的自动装配类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lmafia.AcmeAutoConfiguration1,\
com.lmafia.AcmeAutoConfiguration2
关于条件注解
条件 | 描述 |
---|---|
ConditionalOnBean | 当且仅当指定的bean classes and/or bean names在当前容器中,才创建标记上该注解的类的实例 |
ConditionalOnMissingBean | 当且仅当指定的bean classes and/or bean names不存在当前容器中,才创建标记上该注解的类的实例,有指定忽略ignored的参数存在,可以忽略Class、Type等 |
ConditionalOnClass | 当且仅当指定的bean classes and/or bean names在当前容器中,才创建标记上该注解的类的实例 |
ConditionalOnMissingClass | 当且仅当ClassPath存在指定的Class时,才创建标记上该注解的类的实例 |
ConditionalOnProperty | 是否存在指定配置 |
ConditionalOnJava | 指定JDK的版本 |
ConditionalOnExpression | 表达式⽤${…}=false等来表示 |
ConditionalOnJndi JNDI | 存在该项时创建 |
ConditionalOnResource | 在classpath下存在指定的resource时创建 |