Spring Boot 自定义一个starter

SprngBoot之所以现在这吗火热,是因为spring starter模式使我们日常模块化开发独立化, 模块之间依赖关系更加松散,更加的方便集成

如何实现

首先建立一个普通maven工程,修改pom配置文件

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-parent</artifactId>
                    <version>2.0.6.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    </dependencyManagement>

然后定义一个配置文件属性的类,为后续再其它项目中配置属性时使用。以spring.test-starter为开头,后面配置时间添加相应的属性即可

@ConfigurationProperties(prefix = "spring.test-starter")
public class TestProperties {
    private  String name;
    private  int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

t添加一个测试的service。其它模块集成这个starter时可以直接调用

public class TestService {

    private TestProperties properties;

    public TestService() {
    }

    public TestService(TestProperties properties) {
        this.properties = properties;
    }

    public String  sayHello(){
        return "自定义starter->读取配置文件,name="+properties.getName()+"age="+properties.getAge();
    }
}

创建自动配置。用于读取自定义的配置属性和自动注入TestService的 bean。每个starter都至少会有一个自动配置类

@Configuration
@EnableConfigurationProperties(TestProperties.class)
@ConditionalOnClass(TestService.class)
@ConditionalOnProperty(prefix = "spring.test-starter", value = "enabled", matchIfMissing = true)
public class TestServiceAutoConfiguration {
    @Autowired
    private TestProperties properties;
    /**
     *
     * 容器中没有指定Bean时会自动配置PestService
     * @return
     */
    @Bean
    @ConditionalOnMissingBean(TestService.class)
    public TestService testService(){
        TestService testService = new TestService(properties);
        return testService;
    }

在resources目录下创建META-INF文件夹并添加spring.factories文件。在该文件中配置自己的自动配置类。如果去debug springboot源码会发现SpringApplication.run中就执行了读取spring.factories文件的操作去进行自动配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.TestServiceAutoConfiguration

这样自定义一个starter 就完成了。接下来就可以到其它模块中使用了。首先在其他模块中引入

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>test-springboot-starter</artifactId>
            <version>1.0</version>
        </dependency>

application.properties中添加配置属性

spring.test-starter.name=qxwxww
spring.test-starter.age=25

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSpringbootApplicationTests {
    @Autowired
    TestService testService;
    @Test
    public void contextLoads() {
        System.err.println(testService.sayHello());
    }

}

输出如下提示,表示成功


 上一篇
SpringBoot集成Sharding-JDBC实现分库分表 SpringBoot集成Sharding-JDBC实现分库分表
概述 ShardingSphere,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。定位为轻量级Java框架。其实就是一个增强版的JDBC驱动,完全兼容JDB
2019-04-25
下一篇 
Docker快速入门 Docker快速入门
概述 Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者
2019-04-20
  目录