spring boot 自定义 PropertyPlaceholderConfigurer
时间: 2024-01-29 17:04:04 浏览: 90
在Spring Boot中,可以通过自定义一个PropertySource来实现自定义的PropertyPlaceholderConfigurer。
首先,创建一个类,继承自PropertySource,实现getProperties方法,该方法返回一个Properties对象,其中包含了我们要替换的属性值,例如:
```java
public class MyPropertySource extends PropertySource {
public MyPropertySource(String name) {
super(name);
}
@Override
public Object getProperty(String name) {
// 返回我们要替换的属性值
if (name.equals("my.property")) {
return "my custom property value";
}
return null;
}
@Override
public boolean containsProperty(String name) {
// 判断是否包含我们要替换的属性
return name.equals("my.property");
}
@Override
public Enumeration<?> getPropertyNames() {
// 返回所有属性名
return Collections.enumeration(Arrays.asList("my.property"));
}
@Override
public String toString() {
return "MyPropertySource";
}
}
```
然后,在Spring Boot启动类中,将该自定义的PropertySource添加到Environment中:
```java
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MyApp.class);
app.setAdditionalProfiles("my-profile");
app.setEnvironment(new StandardEnvironment() {
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
super.customizePropertySources(propertySources);
propertySources.addFirst(new MyPropertySource("my-property-source"));
}
});
app.run(args);
}
}
```
在上述代码中,我们通过setEnvironment方法设置了一个新的Environment,并在customizePropertySources方法中,将自定义的PropertySource添加到了最前面,以确保优先使用该自定义的PropertySource替换属性值。
最后,在application.yml或application.properties中,可以使用${my.property}来引用我们自定义的属性值,例如:
```yaml
my.custom.property: ${my.property}
```
这样,当应用启动时,就会将${my.property}替换成我们自定义的属性值"my custom property value"。
阅读全文