2009-10-09 3 views
4

Я использую Spring и распорок и имеют следующую запись в «/META-INF/context.xml»Можно ли использовать заполнитель в context.xml

<Context cachingAllowed="false" useHttpOnly="true"> 
<Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" 
      factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
      maxActive="100" maxIdle="30" maxWait="10000" 
      username="xxxxx" password="xxxxx" 
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
      url="jdbc:sqlserver://xxx:1433;databaseName=xxx;"/> 
</Context> 

Можно ли реализовать в следующий способ,

<Context cachingAllowed="false" useHttpOnly="true"> 
    <Resource name="jdbc/xxx" auth="Container" type="javax.sql.DataSource" 
       factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="${jdbc.username}" password="${jdbc.pwd}" 
       driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
       url="${jdbc.url}"/> 
</Context> 

Мой applicationContext.xml получил следующее,

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/xxx" /> 
</bean> 

Я хочу, чтобы подобрать значения jdbc.username и jdbc.pwd из файла свойств.

ответ

1

Нельзя использовать Spring PlaceholderPropertyConfigurer (который заменяет значения только в контексте Spring).

Это возможно, используя Ant во время процесса сборки, используя задачу Replace. Что-то вроде:

<replace file="META-INF/context.xml" replacefilterfile="my.properties" /> 

Обратите внимание, что вышесказанное содержит имена свойств в качестве токенов, подлежащих замене - например. вам нужно будет использовать «jdbc.url», а не «$ {jdbc.url}» в вашем контексте. xml. Если последнее абсолютно необходимо, это может быть достигнуто путем явного обозначения токенов, подлежащих замене, в виде вложенных элементов <replacefilter>.

+0

Thanks ChssPly76 за ваш ответ попытается реализовать это. – SyAu

1

Для Tomcat вы можете настроить пул соединений в файле server.xml сервера, таким образом, имя пользователя/пароль находится за пределами вашего военного файла. Вот некоторая информация о том, как контекстные элементы ведут себя в Tomcat 5.5 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html

Альтернативно, вы можете использовать автономный DBCP пакет из Apache из файла Spring конфигурации, и использовать jdbc.properties заменить имя пользователя/пароль, то там. Например:

<context:property-placeholder location="jdbc.properties"/> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"> 
    <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value> 
    </property> 
    <property name="url"> 
    <value>${jdbc.url}</value> 
    </property> 
    <property name="username"> 
    <value>${jdbc.username}</value> 
    </property> 
    <property name="password"> 
    <value>${jdbc.password}</value> 
    </property> 
    <property name="initialSize"> 
    <value>30</value> 
    </property> 
    <property name="maxActive"> 
    <value>100</value> 
    </property> 
    <property name="maxWait"> 
    <value>10000</value> 
    </property> 
</bean> 
Смежные вопросы