目的
简单实根据载配置文件是否存在某属性来加载配置
Starter 工程的命名
Spring 官方定义的 Starter 通常命名遵循的格式为 spring-boot-starter-{name},例 如 spring-boot-starter-web。Spring 官方建议,非官方 Starter 命名应遵循 {name}-spring-boot-starter 的格式,例如,dubbo-spring-boot-starter。
- 自定义属性Bean
/**
* 该类用于封装从配置文件中读取的属性值
*/
@Data
@ConfigurationProperties("os.properties")
public class MyConfig {
private String location;
}
其中os.properties对应的是yml中的前缀 location对应的是yml中的key
- application.yml
os:
properties:
location: dalian
enable: true
- service bean 功能实现service 例如实现各种业务
public class ConfigService {
public String location;
public ConfigService(String location) {
this.location = location;
}
public String speak(String args) {
return location \+ ": " \+ args;
}
}
- 实现serviceBean的自动装配
@Configuration
@ConditionalOnClass(ConfigService.class) // 如果当前classpath下存在指定类, 那么加载配置到容器中
@EnableConfigurationProperties(MyConfig.class) // 将配置类注册到bean的配置容器中
public class MyServiceConfigAutoConfiguration {
@Autowired
private MyConfig myConfig;
@Bean
@ConditionalOnMissingBean @ConditionalOnProperty(prefix = "os", value = "enable", havingValue = "true")
public ConfigService configService() {
return new ConfigService(myConfig.getLocation());
}
}
@ConditionalOnProperty(prefix = "os", value = "enable", havingValue = "true") 其中os是yml中的key的前缀 enable是os其中的一个key 这句的意思如果os.enable=true那么加载这个bean
- resources/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.os.config.MyServiceConfigAutoConfiguration
在 resources/META-INF 目录下创建一个名为 spring.factories 的文件。该配置文件是一个 键值对文件,键是固定的,为 EnableAutoConfiguration 类的全限定性类名,而值则为我们自 定义的自动配置类。
git地址
https://gitee.com/ossea/myStarter.git
来源:oschina
链接:https://my.oschina.net/osmoon/blog/3164443