2017-09-25 42 views
1

我有一个web窗体,可以让用户更新appliaction.properties,以便用户不必转到该文件并对其进行编辑。我想从application.properties文件加载值并显示在Web表单文本框中。在用户编辑了一些更改后,用户可以更新application.properties文件。Spring - 将web窗体绑定到application.properties文件

问题 - 如何将我的web表单绑定到除了在Spring中使用@value之外的application.properties文件?由于键/值对可能通过网页形式进行更新,因此我认为@value不是正确的选择。

+0

对于您的应用程序,您可以在加载属性文件后将更新的属性存储到Map/Dto,并且如果需要可以从那里读取它。当您使用属性文件绑定表单时,您需要确保您正在更新map/dto和属性。您只能在应用程序启动期间使用@Value。在上下文加载后它不会有用。 – asg

+0

嗨,我对你提出的想法感兴趣。你能否有任何我可以涉及的材料或例子?提前致谢! –

+0

请检查此.. https://stackoverflow.com/questions/42179664/inject-all-keys-and-values-from-property-file-as-map-in-spring – asg

回答

2

应用程序属性用于应用程序启动时需要加载的设置,然后用该文件中指定的用户名和密码连接到数据库(尽管也可以使用环境变量)。

您不应该在运行时真正编辑此文件,但使用刷新范围注释除外。但我不建议你这样做,因为在实践中实现支持在运行时更改配置的应用程序相当困难。

还有Spring Cloud Config服务器用于在运行时重新加载属性,并提供REST API,尽管您主要只是将git与该API一起使用。

但是关键是在这里,他们都提到配置,这只是开发人员所做的事情。我也不认为你想使用文件系统来存储你的状态,更重要的是有数据库。在数据库上使用文件系统的原因有很多,我现在不会介绍它们。

我会做出假设,你是一个初学者在看你的代表。我可以给你的最好建议是观察其他人正在做的事情,并从中学习。大多数时候人们都在做类似的事情,因为这是正确的事情。如果您在其Spring应用程序中根据表单提交找不到任何其他人更改属性文件,而是使用数据库,则可能需要使用数据库。

+0

嗨,感谢您的回复。但是,如果我打算在使用我的Web表单更新配置后重新启动Web应用程序,该怎么办?除了使用Spring Cloud Config之外,是否还有其他可行的解决方案? –

+0

如果您使用Spring云配置,则不需要启动应用程序。属性将自动更新。 – asg

0

上个月,我们遇到了类似的情况,客户端需要在运行时更新配置文件。 我们创建使用@Value

@Component 
public class ConfigurationManagerComponent{ 
    @Value("conf.username") 
    private String userName; 
    @Value("conf.email"); 
    private String email; 
    /* 
    * All your attributes 
    */ 
    //getters and setters 
    public String getUserName(){ 
    return this.userName; 
    } 
    public void setUserName(String userName){ 
    // first set the value to this class (component) 
    this.userName=userName; 
    //second save this value in the properties file 
    //a specific method you have to implement 
    saveproperties("conf.username",userName); 
    } 
    /* 
    * Do like this for all your getters and setters 
    */ 
} 

然后,在任何时候,你需要获得或保存特性,只是注入该组件并使用它的getter和setter

@Autowired 
ConfigurationManagerComponent configComponent; 
String myActualUserName=configComponent.getUserName(); 
中央Spring组件加载从文件中的所有属性

所以你可以从你的控制器获取你的所有数据,并将它们设置为你的弹簧模型以填充网页中的表单,并且在编辑后保存时,你总是可以使用你的配置组件的setter(更新类和属性文件)。

这种方法不是一个标准,只是我们用来解决问题的一种解决方案,它现在给出了很好的结果。 你也可以检查Apache公共配置Here其他解决方案.. 希望这会有所帮助。

+0

嗨,如果有需要添加新的配置到application.properties怎么办? –

+0

嗨,只需在组件中添加这个新属性并添加其getter和setter。 – oussamaLachiheb

+0

嗨,对不起。我想我应该重述一下我的问题。我所问的问题是如果需要通过Web表单向application.properties添加新配置。例如。点击“添加”按钮应该创建字段供用户输入新配置。 –

相关问题