我使用的是Spring Boot,我有一个属性文件p.properties:
p1 = some val1
p2 = some val2
配置类:
@Configuration
@PropertySource("classpath:p.properties")
public class myProperties {
public myProperties () {
super();
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
我正在使用它来访问该属性:
@Value("${p1}")
private String mProperty;
一切都很好。 我想从应用程序外部更改p.properties文件中的p1,下次我将使用mProperty时,它将包含新值而无需重新启动应用程序。 有可能吗?
谢谢, 阿维
答案 0 :(得分:3)
您只需使用spring boot actuator
即可。
只需在maven/gradle config
中添加执行器依赖项,您就应该在更新property
文件时看到实时重新加载。
注意:您不必重新启动应用程序,但执行器将自行live reloads
。
答案 1 :(得分:1)
我认为,在这种情况下,建议将其保存在数据库中,以便可以更改和更改数据库。无缝访问。我们有一个类似的场景,我们将数据库的加密密码保存在属性文件中。在连接到db时,需要对其进行解密。我们通过如下扩展PropertyPlaceholderConfigurer
来实现这一目标。
public class MyPropertyConfigurer extends PropertyPlaceholderConfigurer{
protected void convertProperties(Properties props){
Enumeration<?> propertyNames = props.propertyNames();
while (propertyNames.hasMoreElements()) {
String propertyName = (String) propertyNames.nextElement();
String propertyValue = props.getProperty(propertyName);
if(propertyName.indexOf("db.password") != -1){
decryptAndSetPropValue(props,propertyName,propertyValue);
}
}
}
}
但是,加载属性文件时只执行一次。
答案 2 :(得分:1)
如果要在运行时更改属性,并且不想重新启动服务器,请执行以下步骤:
Application.properties
app.name = xyz
management.endpoints.web.exposure.include = *
在pom.xml中添加以下依赖项
org.springframework.boot 弹簧启动启动器执行器 org.springframework.cloud 春云语境 2.0.1。发布3)将application.properties放在config文件夹中。 config文件夹必须位于运行jar的位置。
添加ApplcationProperties.java
@RefreshScope @零件 @ConfigurationProperties(前缀=“ app”) 公共类ApplcationProperties { 私有字符串名称; // getter和setter }
编写ApplicationController.java并注入ApplcationProperties
@自动连线 ApplcationProperties applcationProperties;
@RestController 公共类ApplicationController { @GetMapping(“ / find”) 字符串getValue() { 返回applicationProperties.getName(); } }
运行spring boot应用程序
从浏览器中呼叫localhost:XXXX/find
输出:xyz
将application.properties中的值从xyz更改为abc
使用邮递员向localhost:XXXX/actuator/refresh
发送put / options请求
-请注意,此请求应为PUT / OPTIONS
从浏览器中呼叫localhost:XXXX/find
输出:abc