四. 自定义启动器

四. 自定义启动器

当需要把一些共用的 api 封装成 jar 包的时候,就可以尝试自定义启动 器来做。

自定义启动器用到的就是 springboot 中的 SPI 原理,springboot 会去加载 META-INF/spring.factories 配置文件。加载 EnableAutoConfiguration 为 key 的所有类。

利用这一点,我们也可以定义一个工程也会有这个文件。

1、定义启动器核心工程

工程结构

custom-spring-boot-starter-autoconfigurer
    ─src
        └─main
            ├─java
            │  └─len
            │      └─hgy
            │          │  CustomSpringBootStarterAutoconfigurerApplication.java
            │          │
            │          └─start
            │                  CustomStarterRun.java
            │                  JackTemplate.java
            │                  RedisConfig.java
            │
            └─resources
                │  application.properties
                │
                └─META-INF
                        spring.factories

spring.factories 配置内容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
len.hgy.start.CustomStarterRun

被 springboot SPI 加载的类

@Configuration
@ConditionalOnClass(MyTemplate.class)
@EnableConfigurationProperties(RedisConfig.class)
public class CustomStarterRun {

    @Autowired
    private RedisConfig redisConfig;

    @Bean
    public MyTemplate jackTemplate() {
        return new MyTemplate(redisConfig);
    }
}

这个 MyTemplate 实例就是我们封装的通用 API,其他工程可以直接导入 jar 使用的。

2、自定义 starter

我们还会定义一个没代码的工程,在这个工程里面没有任何代码,只有一个 pom 文件。Pom 里面就是对前面核心工程 jar 包的导入

工程结构:

springboot-starter-mytemplate
	│  pom.xml

pom.xml



<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.0modelVersion>

  <parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.2.2.RELEASEversion>
    <relativePath/> 
  parent>

  <groupId>len.hgygroupId>
  <artifactId>spring-boot-starter-templateartifactId>
  <version>1.0-SNAPSHOTversion>

  <name>jackTemplate-spring-boot-startername>
  
  <url>http://www.example.comurl>

  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.8maven.compiler.source>
    <maven.compiler.target>1.8maven.compiler.target>
  properties>
  <dependencies>
    <dependency>
      <groupId>len.hgygroupId>
      <artifactId>custom-spring-boot-starter-autoconfigurerartifactId>
      <version>0.0.1-SNAPSHOTversion>
    dependency>
  dependencies>
project>

主类

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

打包

mvn clean package -Dmaven.test.skip=true

运行

java -jar spring-boot-starter-template-1.0-SNAPSHOT.jar

你可能感兴趣的:(微服务,java,spring,boot,spring)