【SpringBoot】启动器(starter)并自定义启动器

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

NameDescription
spring-boot-starterCore starter, including auto-configuration support, logging and YAML 核心启动器,包括了自动配置和日志、和yaml
spring-boot-starter-activemqStarter for JMS messaging using Apache ActiveMQ
spring-boot-starter-amqpStarter for using Spring AMQP and Rabbit MQ
spring-boot-starter-aopStarter for aspect-oriented programming with Spring AOP and AspectJ
spring-boot-starter-artemisStarter for JMS(Java Message Service) messaging using Apache Artemis
spring-boot-starter-batchStarter for using Spring Batch
spring-boot-starter-cacheStarter for using Spring Framework’s caching support
spring-boot-starter-data-cassandraStarter for using Cassandra distributed database and Spring Data Cassandra (Cassandra是一种分布式NoSQL数据库系统)
spring-boot-starter-data-cassandra-reactiveStarter for using Cassandra distributed database and Spring Data Cassandra Reactive
spring-boot-starter-data-couchbaseStarter for using Couchbase document-oriented database and Spring Data Couchbase
spring-boot-starter-data-couchbase-reactiveStarter for using Couchbase document-oriented database and Spring Data Couchbase Reactive
spring-boot-starter-data-elasticsearchStarter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch
spring-boot-starter-data-jdbcStarter for using Spring Data JDBC
spring-boot-starter-data-jpaStarter for using Spring Data JPA with Hibernate
spring-boot-starter-data-ldapStarter for using Spring Data LDAP
spring-boot-starter-data-mongodbStarter for using MongoDB document-oriented database and Spring Data MongoDB
spring-boot-starter-data-mongodb-reactiveStarter for using MongoDB document-oriented database and Spring Data MongoDB Reactive
spring-boot-starter-data-neo4jStarter for using Neo4j graph database and Spring Data Neo4j
spring-boot-starter-data-r2dbcStarter for using Spring Data R2DBC
spring-boot-starter-data-redisStarter for using Redis key-value data store with Spring Data Redis and the Lettuce client
spring-boot-starter-data-redis-reactiveStarter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client
spring-boot-starter-data-restStarter for exposing Spring Data repositories over REST using Spring Data REST
spring-boot-starter-data-solrStarter for using the Apache Solr search platform with Spring Data Solr. Deprecated since 2.3.9
spring-boot-starter-freemarkerStarter for building MVC web applications using FreeMarker views
spring-boot-starter-groovy-templatesStarter for building MVC web applications using Groovy Templates views
spring-boot-starter-hateoasStarter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS
spring-boot-starter-integrationStarter for using Spring Integration
spring-boot-starter-jdbcStarter for using JDBC with the HikariCP connection pool
spring-boot-starter-jerseyStarter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web
spring-boot-starter-jooqStarter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc
spring-boot-starter-jsonStarter for reading and writing json
spring-boot-starter-jta-atomikosStarter for JTA transactions using Atomikos
spring-boot-starter-jta-bitronixStarter for JTA transactions using Bitronix. Deprecated since 2.3.0
spring-boot-starter-mailStarter for using Java Mail and Spring Framework’s email sending support
spring-boot-starter-mustacheStarter for building web applications using Mustache views
spring-boot-starter-oauth2-clientStarter for using Spring Security’s OAuth2/OpenID Connect client features
spring-boot-starter-oauth2-resource-serverStarter for using Spring Security’s OAuth2 resource server features
spring-boot-starter-quartzStarter for using the Quartz scheduler
spring-boot-starter-rsocketStarter for building RSocket clients and servers
spring-boot-starter-securityStarter for using Spring Security
spring-boot-starter-testStarter for testing Spring Boot applications with libraries including JUnit Jupiter, Hamcrest and Mockito
spring-boot-starter-thymeleafStarter for building MVC web applications using Thymeleaf views
spring-boot-starter-validationStarter for using Java Bean Validation with Hibernate Validator
spring-boot-starter-webStarter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container(服务容器在这个启动器里被装配的)
spring-boot-starter-web-servicesStarter for using Spring Web Services
spring-boot-starter-webfluxStarter for building WebFlux applications using Spring Framework’s Reactive Web support
spring-boot-starter-websocketStarter for building WebSocket applications using Spring Framework’s WebSocket support

Spring Boot technical starters

NameDescription
spring-boot-starter-jettyStarter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat
spring-boot-starter-log4j2Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging
spring-boot-starter-loggingStarter for logging using Logback. Default logging starter
spring-boot-starter-reactor-nettyStarter for using Reactor Netty as the embedded reactive HTTP server.
spring-boot-starter-tomcatStarter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web
spring-boot-starter-undertowStarter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat

自定义启动器包括内容

  1. 依赖环境的导入(pom.xml)
  2. 配置信息的导入 (application.yml、application.properties、@ConfigurationProperties等)
  3. 自动装配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时创建
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值