nacos client配置项
spring:
application:
name: @artifactId@
cloud:
nacos:
username: nacos
password: 加密的密码
扩展EnvironmentPostProcessor
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
try {
final String PROPERTY_NAME = "spring.cloud.nacos.password";
// 读取YAML文件并获得Properties对象
ClassLoader classLoader = AuroraEnvironmentPostProcessor.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("application.yml");
HashMap<String, Object> hashMap = YamlUtil.load(inputStream, HashMap.class);
// 指定配置项的值
HashMap<String, Object> spring = (HashMap<String, Object>) hashMap.get("spring");
HashMap<String, Object> cloud = (HashMap<String, Object>) spring.get("cloud");
HashMap<String, Object> nacos = (HashMap<String, Object>) cloud.get("nacos");
String nacosPassword = (String) nacos.get("password");
// 修改指定配置项的值
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
standardPBEStringEncryptor.setPassword("JASYPT_PASSWORD");
standardPBEStringEncryptor.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
standardPBEStringEncryptor.setIvGenerator(new RandomIvGenerator());
Properties properties = new Properties();
properties.put(PROPERTY_NAME, standardPBEStringEncryptor.decrypt(nacosPassword));
// 覆写配置项的值
MutablePropertySources propertySources = environment.getPropertySources();
propertySources.addFirst(new PropertiesPropertySource("nacos-properties", properties));
} catch (Exception e) {
log.error("setProperties fail", e);
}
}
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
}
通过SPI使自定义的配置生效
在 src/main/resources下新建META-INF/spring.factories文件,写入内容
org.springframework.boot.env.EnvironmentPostProcessor=com.test.config.MyEnvironmentPostProcessor