如何定义自己的spring starter

Xiao Qiang Lv4

为什么要开发 spring starter

  • 为了理解为什么我们需要开发spring starter这样的一个工具,主要原因还要从spring mvc开始说起。因为早期的MVC框架中,如果要引入其他的依赖,需要在项目的xml中配置很多。那如果依赖的的越多,或者项目的越复杂,那么加入的配置也会越多,最终导致我们xml文件也会非常的复杂。

  • 因为有了👆🏻的痛点之后,spring加入了auto-configuration的技术

    • 什么是auto-configuration?
      • 可以把classpath中的jar包自动的导入在JVM中
      • 需要被auto-configuration的依赖都会被列举在spring.property文件中
      • 使用注解AutoConfiguration或者 SpringBootApplication在项目中加上,就可以使用auto-configuration的特性
      • 在pom文件中加入
      • < dependency >
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
        </dependency>

什么是spring starter

  • starter可以在spring boot启动的时候把一些开源的资源文件或者一些配置文件提前加载到java bean中,这样就可以避免一些依赖的重复引入
  • auto configuration class
    • 在resource/META-INF文件目录下,创建一个文件spring.factories,当spring boot启动的时候,加载spring.factories中的包含的对象
      1
      2
      3
      4
      5
      6
      # Auto Configure
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
      org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
      org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
      org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
    • 不是加到了这个文件中,就会都能够正常使用,只是spring boot在启动的时候,会将这些类(以及相关的beans)加载到java bean中
    • 这些被引用的类,就可以被开箱即用
  • 从application.property中装载自定的属性
    • 使用注解**ConfigurationProperties(prefix = “timeout”)**,关联java类中的属性和application中的关系
    • 使用注解Configuration定义java bean类型
    • 创建MATE-INF文件夹,并在创建additional-spring-configuration-metadata.json文件定义需要自动装载的property的名字
  • 如何自定一个starter
    • 定义自动配置的模块
    • 将需要自动化加载的类添加在configuration文件中,并加上注解ConditionalOnClass
    • pom文件中添加spring-boot-autoconfigure
    • 在srping.factories中加上对应的configuration
    • start命名规则
      • 不能以spring boot开头
      • name-spring-boot-starter的格式来命名
    • 自定中的starter不能在pom文件中添加其他的starter

如何使用custom starter

  • 运行mvn package生成jar
  • 导入jar
    • mvn install:install-file
    • 将jar复制到当前目录下,pom引用时,加入system的标签,读取本地的jar

如何配置slf4j的日志格式

  • 引入spring-boot-starter-log4j2的pom依赖
  • 排除其他引入了logger的started,运行命令 mvn dependency:tree检查引入logger的dependency
  • 如果遇到问题,可能需要删除对应的external library,然后再用reload pom依赖
  • 加入log4j2.xml在resource目录下

code source

  • Title: 如何定义自己的spring starter
  • Author: Xiao Qiang
  • Created at : 2023-03-05 11:43:13
  • Updated at : 2025-03-08 10:49:30
  • Link: http://fdslk.github.io/tech/java/spring-boot/starter/2023/03/05/java-customer-starter/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments