可以在context.xml中使用占位符吗?

5

我正在使用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的值。
2个回答

1

使用Spring的PlaceholderPropertyConfigurer无法实现此功能(它仅替换Spring上下文中的值)。

但是,在构建过程中使用AntReplace任务可以实现。类似于:

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

请注意,上述内容将属性名称作为要替换的标记 - 例如,在您的context.xml中需要使用“jdbc.url”,而不是“$ {jdbc.url}”。如果绝对需要后者,则可以通过显式命名要替换的标记作为嵌套的元素来实现。

感谢ChssPly76的回答,我会尝试实现这个。 - SyAu

1

对于Tomcat,您可以在服务器的server.xml文件中设置连接池,这样用户名/密码就不会保存在war文件中。以下是有关Tomcat 5.5中Context元素行为的一些信息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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接