前言
配置预习知识点: PropertyPlaceholderConfigurer, PropertySourcesPlaceholderConfigurer, EnvironmentPostProcessor。
 @PropertySource引入外部配置文件
 自定义配置文件config.properties
1 2
   | idea360.username=admin idea360.password=admin
   | 
 
 配置bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   | package cn.idea360.prop;
  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment;
 
 
 
 
  @Configuration @ComponentScan(basePackages = "cn.idea360.prop") @PropertySource(value = "classpath:config.properties") public class PropertyConfig {
      @Autowired     Environment environment;
      public PropertyConfig() {         System.out.println("PropertyConfig init");     }
      public javax.sql.DataSource dataSource(){         String user = this.environment.getProperty("idea360.username");         System.out.println("user=" + user);          return null;     } }
   | 
 
 测试
1 2 3 4 5 6
   | @Test public void test09() {     AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(PropertyConfig.class);     PropertyConfig bean = applicationContext.getBean(PropertyConfig.class);     bean.dataSource(); }
   | 
 
 EnvironmentPostProcessor封装自定义配置文件
一般应用在封装自定义组件及内置配置文件中
 内置配置文件
- 添加配置
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | @Component public class TestEnvironmentPostProcessor implements EnvironmentPostProcessor {
      private static final Logger logger = LoggerFactory             .getLogger(TestEnvironmentPostProcessor.class);
      @Override     public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {         YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();                  ClassPathResource classPathResource=new ClassPathResource("test.yml");         yaml.setResources(classPathResource);         Properties properties=yaml.getObject();         PropertiesPropertySource propertySource =new PropertiesPropertySource("TestProperties", properties);         environment.getPropertySources().addLast(propertySource);     }
           public static TestConfigProperties buildTestConfigProperties(             ConfigurableEnvironment environment) {         TestConfigProperties nacosConfigProperties = new TestConfigProperties();         Binder binder = Binder.get(environment);         ResolvableType type = ResolvableType.forClass(TestConfigProperties.class);         Bindable<?> target = Bindable.of(type).withExistingValue(nacosConfigProperties);         binder.bind(TestConfigProperties.PREFIX, target);         logger.info("testConfigProperties : {}", nacosConfigProperties);         return nacosConfigProperties;     } }
   | 
 
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | @ConfigurationProperties(TestConfigProperties.PREFIX) public class TestConfigProperties {
      public static final String PREFIX = "idea360";
      private String username;     private String password;
      public String getUsername() {         return username;     }
      public void setUsername(String username) {         this.username = username;     }
      public String getPassword() {         return password;     }
      public void setPassword(String password) {         this.password = password;     } }
   | 
 
日志
1 2 3 4 5 6
   | <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-logging</artifactId>     <version>2.3.7.RELEASE</version>     <optional>true</optional> </dependency>
   | 
 
- resources目录下配置test.yml
 
1 2 3
   | easyliao:   name: idea360   password: 123456
   | 
 
- META-INF/spring.factories中配置
 
1 2
   | org.springframework.boot.env.EnvironmentPostProcessor=\ com.easyliao.framework.config.TestEnvironmentPostProcessor
   | 
 
- 项目中使用
 
1 2
   | @Value("${easyliao.name}") private String name;
  | 
 
 替换日志配置文件
- 替换默认日志格式
 
1 2 3 4 5 6 7 8 9 10 11 12
   | public class TraceEnvironmentPostProcessor implements EnvironmentPostProcessor {
      private static final String PROPERTY_SOURCE_NAME = "defaultProperties";     private static final String LEVEL_STR_PARENT = "%5p [%X{traceId:-}]";
      @Override     public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {         Map<String, Object> map = new HashMap<>(1);         map.put("logging.pattern.level", LEVEL_STR_PARENT);         EnvironmentUtils.addOrReplace(environment.getPropertySources(), map, PROPERTY_SOURCE_NAME);     } }
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | public class EnvironmentUtils {     public static void addOrReplace(MutablePropertySources propertySources, Map<String, Object> map, String propertySourceName) {         MapPropertySource target = null;         if (propertySources.contains(propertySourceName)) {             PropertySource<?> source = propertySources.get(propertySourceName);             if (source instanceof MapPropertySource) {                 target = (MapPropertySource) source;                 for (String key : map.keySet()) {                     if (!target.containsProperty(key)) {                         target.getSource().put(key, map.get(key));                     }                 }             }         }         if (target == null) {             target = new MapPropertySource(propertySourceName, map);         }         if (!propertySources.contains(propertySourceName)) {             propertySources.addLast(target);         }     } }
  | 
 
- META-INF/spring.factories中配置
 
1 2
   | org.springframework.boot.env.EnvironmentPostProcessor=\ com.easyliao.framework.log.processor.TraceEnvironmentPostProcessor
   | 
 
 最后
本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力