前言
配置预习知识点: 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
|
最后
本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力