【问题标题】:Change jdbc.properties with context.xml使用 context.xml 更改 jdbc.properties
【发布时间】:2015-09-24 17:06:48
【问题描述】:

我制作 Spring webapp,并使用 DB 中的 jdbc.properties 文件。 在 applicationContext.xml 我有这个

<context:property-placeholder location="classpath:cfg/properties/jdbc.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
    p:password="${jdbc.password}" />

现在,我想从我的 DB 中的属性更改位置,现在我在 tomcat 中有 context.xml 文件,在 webapp 的 META-INF 中有 context.xml 文件。 在 context.xml 我有:

<?xml version='1.0' encoding='utf-8'?>
<Context path="/webapp" docBase="../webapp/webapp.war" displayName="webapp">
<Environment name="jdbc.driverClassName" override="false"     type="java.lang.String" value="org.postgresql.Driver"/>  
<Environment name="jdbc.dialect" override="false" type="java.lang.String"   value="..."/>  
<Environment name="jdbc.databaseurl" override="false" type="java.lang.String" value="..."/>  
<Environment name="jdbc.username" override="false" type="java.lang.String" value=""/>  
<Environment name="jdbc.password" override="false" type="java.lang.String" value=""/>  
</Context>

我需要将 applicationContext 更改为从 context.xml 查找属性的 webapp,或者更好地如何从 tomcat context.xml 文件中放入 jdbc.properties 值?

【问题讨论】:

  • 为什么还需要 context.xml 中的属性?
  • 因为,如果我改变一些关于 DB 的东西,我不想改变 WAR 文件。我只更改了 tomcat 中的 context.xml。

标签: java xml spring tomcat jdbc


【解决方案1】:

这就是 JNDI 出现的地方......在你的 Tomcat 的 conf 目录中,context.xml 文件添加:

 <Resource name="jdbc/your_app_ds"
          auth="Container"
          type="javax.sql.DataSource"
          username="username"
          password="password"
          driverClassName="org.postgresql.Driver"
          maxActive="100"
          maxIdle="10"
          validationQuery="select 1"
          minEvictableIdleTimeMillis="300000"
          timeBetweenEvictionRunsMillis="100000"
          testWhileIdle="true"
          url="db_url"/>

然后在你的 Spring 文件中你需要做的就是像这样定义 JNDI 条目:

<jee:jndi-lookup id="dataSource"
                 jndi-name="jdbc/your_app_ds"
                 expected-type="javax.sql.DataSource"/>

这样 Spring 将创建 javax.sql.DataSource 实现实例,您将通过 dataSource id 获取它。

只是不要忘记为 jee 前缀指定架构位置:

xmlns:jee="http://www.springframework.org/schema/jee"

和:

xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"

【讨论】:

  • 这是有效的,但我现在尝试使用来自 tomcat 的 contex.xml 和 ' ... ' ,然后在 java 类中将此值用于属性并制作 dataSource bean。
【解决方案2】:

你可以拥有一个像

这样的propery holder bean
<!-- Load values for configuration placeholders, evaluated at startup only -->
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="location" value="file:${user.dir}/jdbc.properties" />
</bean>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2011-07-23
    • 2011-08-16
    • 2012-03-24
    相关资源
    最近更新 更多