springboot自定义starter

【摘要】 目的简单实根据载配置文件是否存在某属性来加载配置Starter工程的命名Spring官方定义的Starter通常命名遵循的格式为spring-boot-starter-{name},例如spring-boot-starter-web。Spring官方建议,非官方Starter命名应遵循{name}-spring-boot-starter的格式,例如,dubbo-spring-b…

目的

简单实根据载配置文件是否存在某属性来加载配置

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 类的全限定性类名,而值则为我们自 定义的自动配置类。

文章来源: www.oschina.net,作者:ossea

 

分类: 微服务

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据