总言:在Spring中,任何数据的连接都是通过数据源获得的。数据源的获取主要有两种方式:
1:在Spring容器中直接配置数据源。
2:通过jndi获取。
下面通过具体的实例讲解这两种数据源配置方法
一:Spring容器中直接配置数据源
Spring在第三方依赖包中有两个实现数据源的类包,分别是DBCP和C3P0,Spring可以利用两者中任何一个进行数据源配置。这种配置方式就是直接在容器中通过引入配置文件写死,要修改数据源就修改配置文件。下面分别介绍具体实现:
1.1.DBCP数据源
DBCP依赖commons-pool的类包,如果使用,需引入如下MAVEN:
<!--dbcp包 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- dbcp依赖包 -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.5.4</version>
</dependency>
Spring中具体配置:
<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
项目开发中通常会把数据库的配置放在一个properties文件中,通过${XX}形式引用。其中destory-method=“close”指的是Spring容器关闭,数据源能正常关闭。
jdbc.properties:具体配置
####使用jndi或c3p0(DBCP)
#jndi数据源配置
jndi.datasource=jdbc/PUMSDB
#c3p0数据源配置
jdbc.driverClass =com.ibm.db2.jcc.DB2Driver
jdbc.url =jdbc:db2://10.27.19.1:60004/pumpdev
jdbc.user =pumpusr
jdbc.password =dE3dHE10
jdbc.minPoolSize =1
jdbc.maxPoolSize =20
jdbc.initialPoolSize =1
jdbc.maxIdleTime =25000
jdbc.acquireIncrement =5
jdbc.acquireRetryAttempts =30
jdbc.acquireRetryDelay =1000
#####获取connnection时测试是否有效#####
jdbc.testConnectionOnCheckin =true
#####自动测试的table名称###############
jdbc.automaticTestTable =c3p0testtable
jdbc.idleConnectionTestPeriod =18000
jdbc.checkoutTimeout =3000
上述最重要的就是driverClass,url,user,password四个参数。
1.1.C3P0数据源
<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties" />
<!-- c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClass}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
关于其他参数,例如maxActive,maxPoolSize等介绍文章很多,不赘述。
以下是启动日志:
二:使用JNDI配置数据源
如果应用配置在高性能应用服务器上,比如Websphere或者Tomcat等上面时,可以使用JNDI来配置数据源。
原理就是通过容器中配置org.springframework.jndi.JndiObjectFactoryBean,寻在tomcat应用服务器上配置jndi,通过name来匹配。实现如下:
2.1.jdbc.properties配置
2.2.相关的配置
<!-- 引入jdbc配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${jndi.datasource}"></property>
<property name="resourceRef" value="true"></property>
</bean>
引入jdbc配置文件,定义一个jndiName。
tomcat中配置:
<Resource auth="Container" driverClassName="com.ibm.db2.jcc.DB2Driver" logAbandoned="true" maxActive="100"
maxIdle="30" maxWait="1000" name="jdbc/PUMSDB" password="dE3dHK10" removeAbandoned="true" removeAbandonedTimeout="60"
type="javax.sql.DataSource" url="jdbc:db2://XX.XX.XX.XX:XX/XX" username="XX"/>
这里请注意:
name=“jdbc/PUMSDB”要和jndiName中匹配。