如何从Java GUI数据更新spring属性值?

时间:2016-12-09 07:51:50

标签: java spring-mvc user-interface

我在src / main / resources

中有Spring上下文
<bean id="dataSource" 
    class="org.postgresql.ds.PGSimpleDataSource">
    <property name="serverName" value="localhost"/>
    <property name="databaseName" value="bookcompany"/>
    <property name="user" value="thisadmin"/>
    <property name="password" value="thisadmin"/>
</bean>

我想更新Java swing GUI中每个属性值的“值”

screenshoot Java Swing GUI for select database properties

这是我的Java GUI代码:

private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
 String serverNew = serverName.getText();
 String databaseNew = databaseName.getText();
 String dbUsernameNew = databaseName.getText();
 String dbPasswordNew = databasePassword.getText();  

 //???
} 

是否可以使用java GUI中的数据更新spring-context的属性值? 请帮忙..

2 个答案:

答案 0 :(得分:0)

如果使用@Bean创建对象并使用@ComponentScan,则可以更改这些值,但我不确定您是否可以动态更改数据库连接参数。

如果您想要数据库连接,那么您可以通过扩展PersistenceUnitInfo来获得GUI中的值后自己创建所需的bean或对象。

答案 1 :(得分:0)

我找到了一个解决方案,我使用“属性”文件存储属性值。然后,我的Spring上下文文件将使用该属性文件。

首先,我将Spring上下文文件更新为:

<context:property-placeholder location="file:./jdbc.properties" />
<bean id="dataSource" 
    class="org.postgresql.ds.PGSimpleDataSource"> 
    <property name="serverName" value="${db.server}"/>
    <property name="databaseName" value="${db.database}"/>
    <property name="user" value="${db.username}"/>
    <property name="password" value="${db.password}"/>
</bean>

我更新了Java代码:

String serverNew = serverName.getText();
String databaseNew = databaseName.getText();
String dbUsernameNew = databaseName.getText();
String dbPasswordNew = databasePassword.getText();  

Properties props = new Properties();
File f = new File("./jdbc.properties");
if (f.exists()) {
    props.load(new FileReader(f)); 
    props.setProperty("db.host", serverNew);
    props.setProperty("db.database", databaseNew);
    props.setProperty("db.username", dbUsernameNew);
    props.setProperty("db.password", dbPasswordNew);
    f.createNewFile(); 
} 

out = new FileOutputStream(f);
props.store(out, null);