gpt4 book ai didi

java - Spring 在运行时覆盖属性并保持它们持久化

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:10 25 4
gpt4 key购买 nike

我正在使用 Spring 3.2.8 并将我的设置保存在属性文件中。现在我希望其中一些在运行时覆盖。我想通过覆盖属性文件中的旧值来保持新值的持久性 。

我如何在 Spring 中执行此操作?我使用 @Value 注入(inject)一些属性,而其他属性则使用 MessageSource.getMessage(String, Object [], Locale) 获取。这些 bean 已经用这些值实例化了。我如何访问属性、存储它们并更新系统范围内的所有 beans?

谢谢!

最佳答案

好的,考虑到您的后续回答,我会保持这个相当简单,并使用您已经了解的 Spring。我将假设注释配置适合您。

在我的示例中,我假设您要配置的所有属性都与称为 ServerConfiguration 的东西相关,并且最初这些是从 server.properties 读取的类路径。

因此第 1 部分,我将定义一个名为 ServerProperties 的 bean,其中注入(inject)了来自 server.properties 的原始值。

所以:

@Component
public class ServerProperties
{
@Value("${server.ip}");
private String ipAddress;

...

public void setIpAddress(String ipAddress)
{
this.ipAddress = ipAddress;
}

public String getIpAddress()
{
return this.ipAddress;
}

其次,任何依赖这些属性的地方,我都会注入(inject)一个 ServerProperties 的实例,而不是使用 @Value 例如:

@Component
public class ConfigureMe
{
@AutoWired
private ServerProperties serverProperties;

@PostConstruct
public void init()
{
if(serverProperties.getIpAddress().equals("localhost")
{
...
}
else
{
...
}
}
}

第三,我将公开一个简单的 Controller,其中注入(inject)了 ServerProperties,这样您就可以使用您的网页来更新系统属性,例如:

@Controller
public class UpdateProperties
{

@AutoWired
private ServerProperties serverProperties;

@RequestMapping("/updateProperties")
public String updateProperties()
{
serverProperties.setIpAddress(...);
return "done";
}

最后,我会在 ServerProperties 上使用 @PreDestroy,以便在 ApplicationContext 关闭时将当前属性值刷新到文件中,例如:

@Component
public class ServerProperties
{

@PreDestroy
public void close()
{
...Open file and write properties to server.properties.
}
}

这应该为您提供所需的框架。我确信它可以进行调整,但它会让你到达那里。

关于java - Spring 在运行时覆盖属性并保持它们持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com