繁体   English   中英

Spring在运行时覆盖属性并保持持久性

[英]Spring override properties at runtime and keep them persistent

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

我怎么能在春天这样做? 我用@ Value注入的一些属性和其他用MessageSource.getMessage(String, Object [], Locale)获得的属性。 bean已经使用这些值进行了实例化。 如何访问属性,存储它们并更新系统范围内的所有bean?

谢谢!

好的,考虑到你的后续答案,我会保持这个相当简单并使用你已经知道的Spring。 我会做一些假设,注释配置对你来说没问题。

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

所以第1部分,我将定义一个名为ServerProperties的bean,它具有注入其中的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;
     }

}

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

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

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

第三,我将公开一个注入ServerProperties的简单Controller ,以便您可以使用您的网页更新系统属性,例如:

@Controller
public class UpdateProperties
{

    @AutoWired
    private ServerProperties serverProperties;        

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

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

@Component
public class ServerProperties
{

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

这应该为您提供所需内容的框架。 我敢肯定它可以调整,但它会让你到那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM