• 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

  • 相关阅读:
    POJ 2823 Sliding Window & Luogu P1886 滑动窗口
    Luogu P2970 [USACO09DEC]自私的放牧
    Luogu P2922 秘密消息
    Luogu P3353 在你窗外闪耀的星星
    Luogu P2580 于是他错误的点名开始了
    Floyd详解
    高精度模板
    51Nod P1100 斜率最大
    洛谷——P1025 数的划分
    洛谷——P1063 能量项链
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14906840.html
Copyright © 2020-2023  润新知