我正在使用Spring和struts,并且在'/META-INF/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的值。
答案 0 :(得分:1)
使用Spring的PlaceholderPropertyConfigurer(它只替换Spring上下文中的值)是不可能的。
但是,可以在使用Ant任务的构建过程中使用Replace。类似的东西:
<replace file="META-INF/context.xml" replacefilterfile="my.properties" />
请注意,上面将属性名称作为要替换的标记 - 例如你需要在context.xml中使用“jdbc.url”而不是“$ {jdbc.url}”。如果绝对需要后者,则可以通过明确命名标记来替换为嵌套的<replacefilter>
元素来实现。
答案 1 :(得分:1)
对于Tomcat,您可以在服务器的server.xml文件中设置连接池,这样用户名/密码就在war文件之外。以下是有关Context元素在Tomcat 5.5 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html
中的行为方式的一些信息或者,您可以从Spring配置文件中使用Apache的独立DBCP包,并使用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>