对于不同的数据库来源, Spring提供了javax.sql.DataSource注入,更换数据库连接来源只需要在bean定义文件中修改配置,而不需要修改任何一行程序。
对于不同的项目,应用程序可能使用不同的数据来源,例如纯使用jdbc、通过连接池或者JNDI等。
1、纯JDBC方式:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceBean" class="Test201307.DataSourceBean">
<constructor-arg>
<ref bean="dataSource" />
</constructor-arg>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</property>
<property name="username">
<value>zen</value>
</property>
<property name="password">
<value>sa</value>
</property>
</bean>
</beans>
2、通过连接池:如DBCP数据库连接池
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSourceBean" class="Test201307.DataSourceBean">
<constructor-arg>
<ref bean="dataSource" />
</constructor-arg>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:orcl</value>
</property>
<property name="username">
<value>zen</value>
</property>
<property name="password">
<value>sa</value>
</property>
</bean>
</beans>
注明:使用DBCP数据来源,需要在CLASSPATH中加入commons-dbcp.jar、commons-pool.jar和commons-collections.jar包。
3、通过JNDI配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
....
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>jdbc/orcl</value>
</property>
</bean>
</beans>
需要加入包:spring-context.jar,ojdbc14.jar
在web项目中配置jndi名称,在web应用的META-INF目录下:配置context.xml
<Context>
<Resource name="jdbc/orcl" auth="Container" type="javax.sql.DataSource"
username="zen" password="sa" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
maxActive="50" maxIdle="30" maxWait="6000"
/>
</Context>