7. Spring

数据源(连接池)的作用

• 数据源(连接池)是提高程序性能如出现的

• 事先实例化数据源,初始化部分连接资源

• 使用连接资源时从数据源中获取

• 使用完毕后将连接资源归还给数据源

常见的数据源(连接池):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);

    }


}

已测试 ✔  打印毫无问题

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14906840.html

原文地址:https://www.cnblogs.com/bi-hu/p/14906840.html