Настройка свойств в Spring - PullRequest
1 голос
/ 30 марта 2011

Есть ли способ изменить свойства файла? Я пытаюсь запустить тесты на селен параллельно с Spring и Jetty, поэтому пытаюсь настроить URL базы данных, порт сервера Jetty и порт сервера селена. Так что я могу инициализировать два или более серверов, на которых могут выполняться тесты.

Мой файл server.properties содержит это:

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

Я могу прочитать эти свойства с помощью PropertyPlaceholderConfigurer, и мне нужно, чтобы URL базы данных, порт Jettyport и порт seleniumserver были гибкими.

Я объявил их так:

В моем приложенииContext.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, тесты селена запускаются на правильных серверах с правильными портами, без сбоев.

Так что теперь я ищу способ изменить свойства в файле server.properties.

С уважением и заранее спасибо

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Есть ли способ изменить свойства файла?

Нет, но вы можете решить эту проблему следующими способами.

  • Разделить свойства на jdbc.properties (для applicationContext.xml) и test.properties (для serverContext.xml)
  • переопределить server.properties через ресурс src / test / resources
  • использовать системные свойства в дополнение к server.properties (для этого используйте PropertyPlaceholderConfigurer.setSystemPropertiesMode)
1 голос
/ 30 марта 2011

Спасибо за помощь, ребята, без вашей информации я не смог найти свое собственное решение. Вот оно:

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). И я должен изменить путь на относительный.

Спасибо за помощь!

1 голос
/ 30 марта 2011

Я решил эту проблему, установив флаг в процессе сборки (я использую Maven), который выбирал, какой файл свойств включить в финальную войну. Таким образом, вы можете включать разные артефакты (разные файлы свойств) с разными свойствами, не связываясь с поддержкой низкоуровневых свойств Spring.

Если вам нужно сделать это только для Spring, я бы порекомендовал перейти на конфигурацию на основе Java, где вы можете получить и установить свойства в коде, а не в XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...