【问题标题】:Is it possible to use placeholder in context.xml是否可以在 context.xml 中使用占位符
【发布时间】:2009-10-09 04:04:06
【问题描述】:

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

【问题讨论】:

    标签: java spring struts context.xml


    【解决方案1】:

    不可能使用 Spring 的 PlaceholderPropertyConfigurer(它只替换 Spring 上下文中的值)。

    但是,可以在使用Replace 任务的构建过程中使用Ant。比如:

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

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

    【讨论】:

    • 感谢 ChssPly76 的回答,将尝试实施。
    【解决方案2】:

    对于 Tomcat,您可以在服务器的 server.xml 文件中设置一个连接池,这样用户名/密码就在您的 war 文件之外。以下是有关 Tomcat 5.5 http://tomcat.apache.org/tomcat-5.5-doc/config/context.html987654321@ 中 Context 元素的行为方式的一些信息

    或者,您可以使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多