Spring通过c3p0或者dbcp连接数据库获得DataSource配置

dbcp方法:

1--jar包: commons-collections4-4.0.jar commons-dbcp2-2.1.1.jar   commons-pool2-2.4.2.jar

2--配置Spring IOC容器,读取 jdbc.properties 配置文件到内存里(也可以不配置该文件,具体后文会讲到)

jdbc.properties 配置如下(以Oracle为例,前后不要有空格 ,同时需要加入Oracle驱动包:c3p0-0.9.1.jar):

username=用户名

password=密码

driverclassname=oracle.jdbc.driver.OracleDriver

url==jdbc\:oracle\:thin\:@localhost\:1521\:xe

Spring IOC容器(applicationContext.xml),如下方式注入

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="locations" >

<value>classpath:jdbc.properties</value> 

</property>

</bean>

3--注入到DataSource中,

jar包:commons-dbcp2-2.1.1.jar

如果配置了第二步,继续如下配置:

<bean class="org.apache.commons.dbcp2.BasicDataSource" id="basicDataSource">

<property name="driverClassName"  value="${driverClassName}"></property>

<property name="password"  value="${password}"></property>

<property name="username"  value="${username}"></property>

<property name="url"  value="${url}"></property>

</bean>

如果没有配置第二步,就将property对应的name值,直接赋值即可;

如果使用dpcp方法还有如下常用属性:

defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;
defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false; 
maxActive:最大连接数据库连接数,设置为0时,表示没有限制; 
maxIdle:最大等待连接中的数量,设置为0时,表示没有限制; 
maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息; 
validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据,
如你可以简单地设置为:“select count(*) from user”; 
removeAbandoned:是否自我中断,默认是 false ; 
removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值; 
logAbandoned:是否记录中断事件, 默认为 false;

4--配置jdbcTemplate(Spring自带的辅助类 ,jar包:spring-jdbc-4.2.1.RELEASE.jar)

jdbcTemplate:使用模板方式封装jdbc数据库操作,固定的流程操作,提供丰富的callback回调接口功能,方便公户自定义 加工细节跟好模块化jdbc操作,简化传统

配置如下:

<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcOperations">
<property name="dataSource">
<ref bean="basicDataSource"/>
</property>
</bean>

5--注入到一个UserDaoImp类中(因为注入需要jdbcTemplate, 必须定义个该类型的成员变量)

UserDaoImp如下定义

public class PersonDaoImp implements PersonDao{
private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;

}

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void save() {
System.out.println("person保存了");
System.out.println(jdbcTemplate.getDataSource());
}
}

注入配置如下:

<bean class="cn.com.spring.dao.imp.PersonDaoImp" id="personDaoImp">
<property name="jdbcTemplate">
<ref bean="jdbcOperations"/>
</property>
</bean>

测试方法如下:

@Test

public void test01(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
PersonDao pd=(PersonDao) ac.getBean("personDaoImp");
pd.save();
}


如果是用c3p0:

只需导入c3p0jar包

将第二步改为

<bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="comboPooledDataSource">
.
.......(类容不变)
</bean>
.

同时参数略有不同


以上配置可以进行简化;

第四步和第五步 是将DataSource注入到JdbcTemplate,在注入到UserDaoImp;也有进行修改

让UserDaoImp继承JdbcDaoSupport类; 当设置了DataSource属性的时候,会创建jdbcTemplate实例,

UserDaoImp修改为:

public class PersonDaoImp02 extends JdbcDaoSupport implements PersonDao{
@Override
public void save() {
System.out.println("person保存了");
System.out.println(this.getJdbcTemplate().getDataSource());
}
}

第四部和第五步合并如下:

<bean class="cn.com.spring.dao.imp.PersonDaoImp02" id="personDaoImp02">
<property name="dataSource">
<ref bean="basicDataSource"/>
</property>
</bean>


最后的总结:

jar: c3p0-0.9.1.jar;  ojdbc14.jar

commons-collections4-4.0.jar;  commons-dbcp2-2.1.1.jar;  commons-logging-1.2.jar;  commons-pool2-2.4.2.jar

spring-beans-4.2.1.RELEASE.jar;  spring-context-4.2.1.RELEASE.jar;  spring-core-4.2.1.RELEASE.jar;  

spring-expression-4.2.1.RELEASE.jar;  spring-jdbc-4.2.1.RELEASE.jar;  spring-tx-4.2.1.RELEASE.jar  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值