2013-10-15 3 views
4

В настоящее время мы загружаем наши исходные значения JDBC из файла свойств согласно следующим:Загрузка значения свойства компонента из context.xml

<context:property-placeholder location="classpath:master.properties" ignore-unresolvable="true" /> 

<bean id="mainDataSource" class="com.jolbox.bonecp.BoneCPDataSource" 
    destroy-method="close"> 
    <property name="driverClass" value="${database.driver}" /> 
    <property name="jdbcUrl" value="${database.url}" /> 
    <property name="username" value="${database.user}" /> 
    <property name="password" value="${database.password}" /> 
    <property name="idleConnectionTestPeriod" value="60" /> 
    <property name="idleMaxAge" value="240" /> 
    <property name="maxConnectionsPerPartition" value="2" /> 
    <property name="minConnectionsPerPartition" value="2" /> 
    <property name="partitionCount" value="3" /> 
    <property name="acquireIncrement" value="10" /> 
    <property name="statementsCacheSize" value="50" /> 
    <property name="releaseHelperThreads" value="3" /> 
</bean> 

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" 
    scope="singleton"> 
    <property name="targetDataSource"> 
     <ref local="mainDataSource" /> 
    </property> 
</bean> 

Это сегментный. отлично работает с файлом app.properties на основе classpath и избавляется от app.properties.

Мы хотели бы загрузить эти значения из context.xml (либо помещены в META-INF, либо $CATALINA_HOME/conf/context.xml). Это поможет нам загрузить правильные значения на prod/промежуточных серверах.

Поймите любую помощь или альтернативный способ/предложения. (Если аналогичный вопрос уже ответил, пожалуйста, поделитесь ссылкой) Спасибо!

+0

@ Вопрос Якоба аналогичен и решил его. http://stackoverflow.com/questions/5656756/moving-contents-of-meta-inf-context-xml-to-tomcat-conf/5656944#5656944 – herry

ответ

3

Как сказал Алан Хэй, вы можете вытеснить конфигурацию источника данных в собственный контекст Tomcat.xml, а затем Spring сделать JNDI-поиск, чтобы получить его. Это подход, который я обычно использовал в некоторых проектах, над которыми я работал.

Куски вам нужно поставить на место, чтобы добиться будет:

1. Добавьте конфигурацию источника данных в $ CATALINA_HOME/CONF/context.xml

<GlobalNamingResources> 

    <Resource type="javax.sql.DataSource" 
       name="dsName" 
       factory="com.jolbox.bonecp.BoneCPDataSource" 
       driverClassName="your.driver.classname" 
       jdbcUrl="your:driver:url" 
       username="username" 
       password="password" 
       idleMaxAge="240" 
       idleConnectionTestPeriod="60" 
       partitionCount="3" 
       acquireIncrement="10" 
       maxConnectionsPerPartition="2" 
       minConnectionsPerPartition="2" 
       statementsCacheSize="50" 
       releaseHelperThreads="3" /> 

</GlobalNamingResources> 

2. Добавить ссылку ресурса в метаданных приложения META-INF/context.XML

<Context path="/YourApp"> 
    <ResourceLink description="Datasource for YourApp" 
        global="jdbc/dsName" 
        name="jdbc/dsName" 
        type="javax.sql.DataSource" />   
</Context> 

3. Изменение конфигурации Spring для поиска источника данных в JNDI

<beans xmlns:jee="http://www.springframework.org/schema/jee" 
     xsi:schemaLocation="http://www.springframework.org/schema/jee classpath:/org/springframework/ejb/config/spring-jee-3.0.xsd"> 

    <jee:jndi-lookup id="dataSource" 
        jndi-name="java:comp/env/jdbc/dsName" /> 

4. Установите драйвер и DataSource банки

Поскольку конфигурация источника данных теперь контейнер, вы должны поместить драйвер базы данных и datasource jars в $ CATALINA_HOME/lib, чтобы они были доступны Tomcat, когда он создает данные сходный код. Эти банки больше не должны находиться в WEB-INF/lib вашего приложения.

2

Как мне это сделать, у меня есть свойства файла по умолчанию в моем пути к классам, и у меня есть один файл свойств, которые я использую, чтобы переопределить эти значения по умолчанию (развития) свойства:

в моем весеннем файле:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="ignoreResourceNotFound" value="true"/> 
     <property name="locations"> 
     <list> 
      <value>classpath:jdbc.properties</value> 
      <value>classpath:camel.properties</value> 
      <value>classpath:email.properties</value> 
      <value>${external_config}</value> 
     </list> 
    </property> 
</bean> 

В разработке я использую файл свойств в пути к классам.
На другом envionment, постановка, интеграция, производство мы начинаем программу с помощью следующего параметра:

-Dexternal_config=file:c:/staging.properties 

Таким образом, у меня есть один и тот же билд для всех сред и может выбрать расположение моих Переопределение свойств файл.

Таким образом, ${external_config} является владельцем места для файла конфигурации, который зависит от окружающей среды. Spring ищет переменную окружения с именем external_config, эта переменная должна указывать на файл конфигурации. Если файл не найден, Spring игнорирует его с ignoreResourceNotFound = true;

0

Весна 3.1 представлена ​​поддержка конкретных профилей среды. Определите некоторые профили, свяжите их с некоторыми файлами свойств, например. test.properties, live.properties и установить переменную среды при запуске сервера -Dspring.profiles.active = Test. Чистый и простой.

http://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/

Другой вариант, как намекнул выше, чтобы перейти к контейнеру управляемого пула соединений посмотрел вверх через JNDI т.е. определить JNDI источника данных с именем хуг же на каждом сервере, а затем:

 Смежные вопросы

  • Нет связанных вопросов^_^