参考资料
1. Spring Boot will automatically find and load application.properties and application.yaml files from the following locations when your application starts:
2. The classpath root
3. The classpath /config package
4. The current directory
5. The /config subdirectory in the current directory
6. Immediate child directories of the /config subdirectory
下面是自定义starter场景
- 前置知识
当@EnableConfigurationProperties注解应用到你的@Configuration时,任何被@ConfigurationProperties注解的beans将自动被Environment属性配置。这种风格的配置特别适合与SpringApplication的外部YAML配置进行配合使用。
- 环境准备
使用idea创建项目模块hello-starter 和hello-starter-autoconfigure
1、在hello-starter-autoconfigure模块写好服务HelloService
public class HelloService {
@Autowired
HelloProperties helloProperties;
public String hello(String userName){
return helloProperties.getPrefix()+ userName + helloProperties.getSuffix();
}
}
2、在hello-starter-autoconfigure模块 HelloProperties
package com.gaojl.autoconfig.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "com.gao")
public class HelloProperties {
String prefix;
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;
}
}
3、在hello-starter-autoconfigure模块 自动配置类
@Configuration
@ConditionalOnMissingBean(HelloService.class)
@EnableConfigurationProperties(HelloProperties.class)//绑定HelloProperties 并放入容器中
public class HelloAutoConfiguration {
@Bean
public HelloService getHelloService(){
return new HelloService();
}
}
4、在hello-starter-autoconfigure模块 Resources 文件夹下/META-INF/spring.factories配置自动装配的类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.gaojl.autoconfig.auto.HelloAutoConfiguration
5、 在hello-starter 模块引入hello-starter-autoconfigure模块打好的包
- 注意事项
hello-starter-autoconfigure模块不需要test目录 不需要有Main方法。
这样这个starter就可以被其他项目使用了。其他项目使用的步骤当然就是
1、倒入我们的制作好的场景
<dependency>
<groupId>com.gaojl</groupId>
<artifactId>custom-hello-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、由于HelloService在容器中没有HelloService.class时会自动注入HelloService,期间会从Prefix=com.gao 的application.yml中嗱值。所以我们需要在配置文件中配置
3、在controller层配置使用