2017-09-25 25 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添加新配置。例如。點擊「添加」按鈕應該創建字段供用戶輸入新配置。 –

相關問題