数据源(连接池)的作用
• 数据源(连接池)是提高程序性能如出现的
• 事先实例化数据源,初始化部分连接资源
• 使用连接资源时从数据源中获取
• 使用完毕后将连接资源归还给数据源
常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid等
数据源就是数据库 上面都是对数据库连接池的逻辑分析
数据源的开发步骤
① 导入数据源的坐标和数据库驱动坐标 【导包】
② 创建数据源对象 【搞一个数据库连接池 获得实例】
③ 设置数据源的基本连接数据 【设置数据库连接池的配置】
④ 使用数据源获取连接资源和归还连接资源 【用完后归还】
所以句个例C3P0的例子 ,复习一下C3P0 之前直接读取文件配置的 现在直接set方法直接配置:
1.导包- 这个不用多说了
2.创建一个数据库工具类: DataSourceUtil :
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
public class DataSourceUtil {
/*这里演示 直接测试即可:*/
/*创建数据库连接池*/
@Test
public void datasource(){
//得到数据库连接池对象
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//设置相关属性
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");
dataSource.setUser("root");
dataSource.setPassword("root");
//获得连接
Connection connection = dataSource.getConnection();
//这里只做演示 所以这里测试打印不会是null即可
System.out.println(connection);
connection.close(); //忘记放回去了...
} catch (Exception e) {
e.printStackTrace();
}
}
}
所以 方便的我都快哭了
然后我们试一下 Druid 的:
import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
public class DataSourceUtil {
/*这里演示 Druid的数据库连接池 直接测试即可:*/
/*创建数据库连接池*/
@Test
public void datasource(){
//得到数据库连接池对象
DruidDataSource dataSource = new DruidDataSource();
//设置相关属性
try {
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/jdbc"); //之前学过 自动识别的 怎么感觉又绕了回来
dataSource.setUsername("root");
dataSource.setPassword("root");
//获得连接
Connection connection = dataSource.getConnection();
//这里只做演示 所以这里测试打印不会是null即可
System.out.println(connection);
connection.close();//忘记放回去了...
} catch (Exception e) { e.printStackTrace(); }
} }
和c3p0写法差不多 就差那么两个方法名不一样,然后呢 Druid是效率比较快 然后也可以制动识别数据库,所以 都很方便....之前学过啊 怎么感觉又绕回来了啊。
总之 很方便就完事了 所以我们在复习一下手动配置 第三方数据库的xml配置,不用set方法:
properties配置文件创建 来读取里面的内容 xml也可以 但这里用properties文件
1.创建一个 properties文件:[一般放在resource文件夹下] 【你想取什么名都可以啊】
JDBC.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
然后创建连接池【这里用C3p0吧】,然后读取外置配置文件的内容即可:
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ResourceBundle;
public class DataSourceUtil {
/*这里演示 Druid的数据库连接池 直接测试即可:*/
/*这种方法太没效率了 有一种可以直接读取Clss字节码文件进去的...*/
@Test
public void Test_C3P0() throws SQLException {
//加载类路径下的JDBC.properties
ResourceBundle rb = ResourceBundle.getBundle("JDBC");
//创建数据库连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
//一连串设置
dataSource.setDriverClass(rb.getString("jdbc.driver"));
dataSource.setJdbcUrl(rb.getString("jdbc.url"));
dataSource.setUser(rb.getString("jdbc.username"));
dataSource.setPassword(rb.getString("jdbc.password"));
} catch (Exception e) {
e.printStackTrace();
}
//连接池中得到一个Connection
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close();
}
/*一般都把get到的配置参数用变量存起来*/
}
这些之前都学过 不止是properties文件 其实还有xml也是可以的.因为有复习 所以我们这次的交给spring来配置数据源(properties文件)
复习的差不多了 我们来用Spring注入这些参数【其实刚刚好用set方式注入】
Spring配置数据库连接池:
可以将DataSource的创建权交由Spring容器去完成
DataSource有无参构造方法,而Spring默认就是通过无参构造方法实例化对象的
DataSource要想使用需要通过set方法设置数据库连接信息,而Spring可以通过set方法进行字符串注入
记得导入spring 和 其他的Maven坐标啊
然后配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/jdbc"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
</beans>
那个class你不知道的话 自己去对着类 右键复制地址即可。
然后测试类【注入】:
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.sql.Connection;
import java.sql.SQLException;
public class DataSourceUtil {
@Test
public void Test_C3P0() throws SQLException {
//由于懒 所以 配置文件叫 applicationContext.xml
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
ComboPooledDataSource bean = applicationContext.getBean(ComboPooledDataSource.class); //当然 看自身情况选择获取Bean方式 id/Class
Connection connection = bean.getConnection();
System.out.println(connection);
}
}
所以我们通过Set方法注入C3p0就完成了
接下来我们学习 Spring读入 properties文件的数据,然后把数据用set方法注入到C3p0对象中:
首先有个properties文件:
JDBC.properties :
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jssx
jdbc.username=root
jdbc.password=root
然后Spring配置文件:
要想在Spring配置文件中读取 properties文件的数据,首先,需要引入context命名空间和约束路径:
1.命名空间:xmlns:context="http://www.springframework.org/schema/context"
2. 约束路径:http://www.springframework.org/schema/context 和 http://www.springframework.org/schema/context/spring-context.xsd
其实这一步 直接复制beans 的 然后把全部beans改成context即可.
代码:【注意看注释!!】
<?xml version="1.0" encoding="UTF-8"?>
<!--需要引入context命名空间和约束路径: 认真看命名空间和约束空间!-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 读取properties文件: -->
<context:property-placeholder location="classpath:JDBC.properties"/>
<!-- 下面通过set方式 把参数注入到c3p0的对象中 -->
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 值直接用${} 里面写properties文件的key即可,有点像El表达式 -->
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 这个注入 你先要懂set注入 其实 IDEA都有提示 主要还是步骤要清晰!! -->
</beans>
然后测试类 测试一下:
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.sql.Connection;
import java.sql.SQLException;
public class DataSourceUtil {
@Test
public void Test_C3P0() throws SQLException {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
ComboPooledDataSource bean = applicationContext.getBean(ComboPooledDataSource.class); //当然 看自身情况选择获取Bean方式 id/Class
Connection connection = bean.getConnection();
System.out.println(connection);
}
}
已测试 ✔ 打印毫无问题
所有评论(0)