在Spring中设置属性

时间:2011-03-30 08:19:52

标签: spring properties edit

有没有办法更改文件的属性?我正在尝试使用Spring和Jetty并行运行selenium测试,所以我正在尝试配置数据库的url,jettyserver的端口和selenium服务器的端口。这样我就可以初始化两个或多个可以运行测试的服务器。

我的server.properties文件包含:

jdbc.url=jdbc:hsqldb:hsql://localhost/bibliothouris_scenario
jetty.port=8081
seleniumServer.port=4444

我可以使用PropertyPlaceholderConfigurer读取这些属性,我需要灵活的数据库URL,jettyport和seleniumserver端口。

我已经宣布他们是这样的:

在我的applicationContext.xml中:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:server.properties</value>
    </property>
</bean>

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

在serverContext.xml文件中:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:server.properties</value>
    </property>
</bean>

<bean class="com.~companyName~.bibliothouris.jetty.JettyServer" init-method="start" destroy-method="stop">
    <constructor-arg value="${jetty.port}" />
    <constructor-arg ref="dataSource" />
</bean>

<bean class="org.openqa.selenium.server.SeleniumServer" init-method="start" destroy-method="stop">
    <constructor-arg>
        <bean class="org.openqa.selenium.server.RemoteControlConfiguration">
            <property name="port" value="${seleniumServer.port}" />
            <property name="singleWindow" value="true" />
            <property name="timeoutInSeconds" value="10" />
        </bean>
    </constructor-arg>
</bean>

<bean class="com.thoughtworks.selenium.DefaultSelenium" init-method="start" destroy-method="stop" lazy-init="true">
    <constructor-arg>
        <bean class="com.thoughtworks.selenium.HttpCommandProcessor">
            <constructor-arg value="localhost" />
            <constructor-arg value="${seleniumServer.port}" />
            <constructor-arg value="*firefox c:/~companyname~/firefox/firefox.exe" />
            <constructor-arg value="http://localhost:${jetty.port}" />
        </bean>
    </constructor-arg>
</bean>

当我更改server.properties中的数据时,selenium测试在具有正确端口的正确服务器上运行,没有失败。

所以现在我正在寻找一种方法来更改server.properties文件中的属性。

亲切的问候和提前谢谢

3 个答案:

答案 0 :(得分:1)

我通过在构建过程中使用一个标志(我正在使用Maven)来解决这个问题,该标志选择了哪个属性文件包含在最终的战争中。这样,您可以包含具有不同属性的不同工件(不同的属性文件),而不必混淆Spring的低级属性支持。

如果你确实需要这样做只是Spring,我建议你选择基于Java的配置,在那里你可以通过代码而不是XML来获取和设置属性。

答案 1 :(得分:1)

  

有没有办法改变   文件的属性?

不,但你可以通过以下方式解决这个问题。

  • 将属性拆分为jdbc.properties(对于applicationContext.xml)和test.properties(对于serverContext.xml)
  • 通过src / test / resources资源覆盖server.properties
  • 除了server.properties之外还使用系统属性(为此使用PropertyPlaceholderConfigurer.setSystemPropertiesMode)

答案 2 :(得分:1)

感谢帮助人员,没有您的信息,我找不到自己的解决方案。这是:

try {
        Properties props = new Properties();
        FileInputStream fileInputStream = new FileInputStream(
            "C:\\~CompanyName~\\workspace\\bibliothouris\\infrastructure\\src\\main\\resources\\server.properties");
        props.load(fileInputStream);
        fileInputStream.close();
        props.setProperty("seleniumServer.port", "4445");

        FileOutputStream fileOutputStream = new FileOutputStream(
            "C:\\~CompanyName~\\workspace\\bibliothouris\\infrastructure\\src\\main\\resources\\server.properties");
        props.store(fileOutputStream, "");
        fileOutputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

我在一个测试类中编写了这段代码,现在我必须创建一个方法,它需要一些参数(URL,jettyport和seleniumport)。我必须改变相对的路径。

感谢您的帮助!