我做Spring webapp,我使用jdbc。属性文件从DB。在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属性改变的地方,现在我有上下文.xml文件在tomcat和上下文.xml在META-INF在webapp。在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中更改为web应用程序从context.xml中寻找属性,或者更好的是我如何放入jdbc。从tomcat context.xml文件的属性值?
这就是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"
你可以有一个像
这样的属性持有者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>