编写场景启动器(starter)需要注意其层级关系需要使用到的依赖自动配置的实现等。

  1. @Configuration //指定这个类是一个配置类
  2. @ConditionalOnXXX //在指定条件成立的情况下自动配置类生效
  3. @AutoConfigureAfter //指定自动配置类的顺序
  4. @Bean //给容器中添加组件
  5. @ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
  6. @EnableConfigurationProperties //让xxxProperties生效加入到容器中
  7. 自动配置类要能加载
  8. 将需要启动就加载的自动配置类,配置在META-INF/spring.factories
  9. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  10. org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
  11. org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

步骤说明

image.png
启动器只用来做依赖导入,需要专门来写一个自动配置模块。启动器依赖自动配置,其他项目需要使用改模块只需要引入启动器(starter)即可。

1、启动器模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.gmd.starter</groupId>
  6. <artifactId>gmd-spring-boot-starter</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <!--启动器-->
  9. <dependencies>
  10. <!--引入自动配置模块-->
  11. <dependency>
  12. <groupId>com.gmd.starter</groupId>
  13. <artifactId>gmd-spring-boot-starter-autoconfigurer</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. </dependency>
  16. </dependencies>
  17. </project>

2、自动配置模块

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.gmd.starter</groupId>
  6. <artifactId>gmd-spring-boot-starter-autoconfigurer</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <name>gmd-spring-boot-starter-autoconfigurer</name>
  10. <description>Demo project for Spring Boot</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.5.10.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22. <dependencies>
  23. <!--引入spring-boot-starter;所有starter的基本配置-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter</artifactId>
  27. </dependency>
  28. </dependencies>
  29. </project>
package com.gmd.starter;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "gmd.hello")
public class HelloProperties {
    private String prefix;
    private String suffix;
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    public String getSuffix() {
        return suffix;
    }
    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}
package com.gmd.starter;
public class HelloService {
    HelloProperties helloProperties;
    public HelloProperties getHelloProperties() {
        return helloProperties;
    }
    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }
    public String sayHello(String name){
        return helloProperties.getPrefix()+"-" +name + helloProperties.getSuffix();
    }
}
package com.gmd.starter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
    @Autowired
    HelloProperties helloProperties;
    @Bean
    public HelloService helloService(){
        HelloService service = new HelloService();
        service.setHelloProperties(helloProperties);
        return service;
    }
}

3、测试
将该项目安装到maven仓库中,然后另起一项目依赖该自定义的场景启动器。

更多SpringBoot整合示例:
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples

尚硅谷SpringBoot学习教程代码:
https://github.com/mxg133/learnforSpringBoot