数据源(连接池)的作用
• 数据源(连接池)是提高程序性能如出现的
• 事先实例化数据源,初始化部分连接资源
• 使用连接资源时从数据源中获取
• 使用完毕后将连接资源归还给数据源
常见的数据源(连接池):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); } }
已测试 ✔ 打印毫无问题