Spring学习笔记(四) DataSource

DataSource是一个接口(interface) javax.sql.DataSource,在java文件中引入DataSource对应的包

Spring中使用的是org.apache.commons.dbcp.BasicDataSource

Dbcp(Data Base Connection Pool)

在本文中将介绍两种配置Spring DataSource的方式

    1à基础配置方式

    2àPlanceHolder(占位符)配置方式

基础配置方式(以MySQL为例)

  1. <bean id="dataSource" //要注入的DataSource,在java文件中有对应的DataSource成员变量
  2. class="org.apache.commons.dbcp.BasicDataSource"
  3. destroy-method="close">
  4.  
  5. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  6. <property name="url" value="jdbc:mysql://localhost:3306/spring" />
  7. <property name="username" value="root" />
  8. <property name="password" value="admin" />
  9. </bean>

上述配置MySQL的方式可以从Spring的官方参考文档中找各种相关数据库的配置示例。

DataSource注入

  1. @Component("u")
  2. public class UserDAOImpl implements UserDAO {
  3.  
  4.     private DataSource dataSource;
  5.    public void save(User user) {
  6.         try {
  7.         Connection conn = dataSource.getConnection();
  8.         String sql = "insert into user values(null,'wenlonghor')";
  9.         conn.createStatement().executeUpdate(sql);
  10.         } catch (SQLException ex) { Logger.getLogger(UserDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
  11.         }
  12.       System.out.println("user saved!");
  13.    }
  14.  
  15.     public DataSource getDataSource() {
  16.         return dataSource;
  17.     }
  18.    @Resource(name="dataSource") //这里如果在beans.xml中对应的名字和成员变量的名字一样,name属性可以不用标注
  19.     public void setDataSource(DataSource dataSource) {
  20.         this.dataSource = dataSource;
  21.     }
  22. }

从而,Spring在初始化beans的时候会把beans.xml中的DataSource注入到UserDAOImpl中的DataSource属性中。从而在使用数据库时,使用

DataSource.getConnection()即可获得connection对象。

PlanceHolder(占位符)配置方式

  1. <bean
  2. class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  3.    <property name="locations">
  4.       <value>classpath:jdbc.properties</value>
  5.    </property>
  6. </bean>
  7.  
  8. <bean id="dataSource" destroy-method="close"
  9.    class="org.apache.commons.dbcp.BasicDataSource">
  10.    <property name="driverClassName"
  11.       value="${jdbc.driverClassName}" />
  12.    <property name="url" value="${jdbc.url}" />
  13.    <property name="username" value="${jdbc.username}" />
  14.    <property name="password" value="${jdbc.password}" />
  15. </bean>

代码中第四行设置Spring搜索jdbc.properties路径;8-14行中的设计同基本的Spring DataSource类似,只不过value的获取是从jdbc.properties文件中获取

jdbc.properties文件就是一个键值对,示例如下:

  1. jdbc.driverClassName=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://localhost:3306/spring
  3. jdbc.username=root
  4. jdbc.password=admin

dbcp.BasicDataSource

  1. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  2. <property name="url" value="jdbc:mysql://localhost:3306/spring" />
  3. <property name="username" value="root" />
  4. <property name="password" value="admin" />
  5. <property name="initialSize" value="10" /> //初始化连接
  6. <property name="maxIdle" value="20" />//最大空闲连接数
  7. <property name="minIdle" value="10" />
  8. <property name="MaxActive" value="50" />//最大连接数
  9. <property name="logAbandoned" value="true" />//是否在自动回收超时连接的时候打印链接超时连接错误
  10. <property name="removeAbandoned" value="true" />//是否自动回收超时连接
  11. <property name="removeAbandonedTimeout" value="180" />//超时时间,单位毫秒
  12. <property name="maxWait" value="1000" />//超时等待时间
原文地址:https://www.cnblogs.com/wenlonghor/p/3296069.html