动态给springBoot配置增加属性
有些时候我们要把代码部署到不同地方,根据地方不同来辨别要执行那些代码,这时就要把一些配置事先配置到数据库在在容器初始化时读取对应数据来执行特定需求。好处可以把一些配置文件配置到数据库。用到@PostConstruct注解与@DependesOn注解
@PostConstruct注解
配置了此注解方法会在调用构造方法后自动被调用,也可以理解为spring容器初始化的时候执行该方法。
实例代码如下
-
@Component public class Config3 { @Autowired private ConfigurableEnvironment environment; @PostConstruct public void setProvinceCode() { MutablePropertySources propertySources = environment.getPropertySources(); Pattern p = Pattern.compile("^applicationConfig.*"); for (PropertySource<?> propertySource : propertySources) { if (p.matcher(propertySource.getName()).matches()) { Properties properties = new Properties(); Map<String, String> map = new HashMap<>(); map.put("code","10000000000"); properties.putAll(map); PropertiesPropertySource constants = new PropertiesPropertySource("system-config", properties); propertySources.addAfter(propertySource.getName(),constants); } } } }
@DependesOn注解
-
用来表示一个Bean的实例化依赖另一个Bean的实例化
-
@DependsOn("config3") @Component public class Config2 { @Value("${code}") private String codeValue; public void show() { System.out.println(codeValue); } @Value("${code}") public void setProvinceCode(String codeValue) { System.out.println("code:"+codeValue); } }