栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring-配置数据源

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring-配置数据源

Spring学习笔记目录

目录
  • 数据源(连接池)的作用
  • 项目示例
    • 运行结果
    • 常见错误
    • 代码解析
    • 提取properties文件
    • 运行结果
    • 代码解析
  • Spring配置数据源
    • 运行结果
    • 常见错误
  • Spring引入外部properties文件
    • 代码解析
    • 常见错误
    • 运行结果

数据源(连接池)的作用

事先实例化数据源,初始化部分连接资源
使用连接资源时从数据源中获取
使用完毕后将连接资源归还给数据源
常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid等
——黑马程序员

简而言之:先连接,获取数据,归还资源。
使用步骤:

①导入数据源的坐标和数据库驱动坐标
②创建数据源对象
③设置数据源的基本连接数据
④使用数据源获取连接资源和归还连接资源
——黑马程序员

简而言之:
①导入Mean依赖或是包依赖
然后:先连接,获取数据,归还资源。
第③步的设置基本额度参数信息:驱动,数据库地址,用户名,密码。
④关闭连接即可。

项目示例

项目结构:

导入maven依赖,把一下的依赖复制到项目中的iml文件中导入依赖即可


        
            mysql
            mysql-connector-java
            5.1.32
        
        
            c3p0
            c3p0
            0.9.1.2
        
        
            com.alibaba
            druid
            1.1.10
        
        
            junit
            junit
            4.11
            test
        
    

mysql:导入mysql数据库的jdbc驱动。
c3p0:jdbc数据库连接池。
druid:jdbc数据库连接池。
junit:单元测试框架。
新建类DataSourceTest.java:

package com.test;

import com.alibaba.druid.pool.DruidAbstractDataSource;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.util.ResourceBundle;


public class DataSourceTest {
    @Test
    //测试手动创建 druid数据源
    public void test2() throws Exception{
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        DruidPooledConnection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

    @Test
    //测试手动创建c3p0数据源
    public void test1() throws Exception {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();//创建数据源对象
        //设置基本的连接参数
        dataSource.setDriverClass("com.mysql.jdbc.Driver");//设置jdbc
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");//设置数据库地址
        dataSource.setUser("root");//设置账号
        dataSource.setPassword("root");//设置密码
        Connection connection = dataSource.getConnection();//获取资源
        System.out.println(connection);//打印数据源
        connection.close();//关闭资源
    }
}
运行结果

test1:connection的结果被打印出,证明连接成功

test2:connection的结果被打印出,证明连接成功

常见错误

运行了test1发现一直没有出结果那么可能是因为你电脑的数据库中不存在test这个数据库。
运行了test2程序进入死循环关闭程序运行后编译器报错如下

那么能肯定你电脑的数据库中一定没有名为test的这个数据库。

代码解析



提取properties文件

写完上述程序会发现,当遇见需要求改jdbc驱动器或是数据库地址时就需要去修改源代码,这就构成了耦合。将对数据的配置参数信息写入properties配置文件中,进行解耦操作。

新建jdbc.properties:

jdbc.Driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

配置文件的设置中,等号左边是key,右边是value。
DataSourceTest.java文件中新增以下代码块:

    @Test
    //测试手动创建c3p数据源(加载properties配置文件)
    public void test3() throws Exception{
        //读取配置文件,专门用于读取properties文件,不需要再写后缀名,且它默认是从类路径下开始读取也就是说从resources目录下开始读取
        ResourceBundle rb = ResourceBundle.getBundle("jdbc");
        //读到文件后开始进行赋值
        String driver = rb.getString("jdbc.Driver");//填入key获得配置文件中对应的value
        String url = rb.getString("jdbc.url");
        String username = rb.getString("jdbc.username");
        String password = rb.getString("jdbc.password");
        //创建数据源对象 设置连接参数
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser(username);
        dataSource.setPassword(password);

        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }

运行结果

test3:connection的结果被打印出,证明连接成功

代码解析

Spring配置数据源

在maven中导入spring-context依赖

        
            org.springframework
            spring-context
            5.0.5.RELEASE
        

在resource文件夹下创建jdbc.properties文件

jdbc.Driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

在resource文件夹下创建applicationContext.xml文件


如果在创建时没有看见Spring Config的按钮,应该是没有刷新maven依赖的原因,把maven文件重新导入一下就可能会出现。
applicationContext.xml:




        
            
            
            
            
        

DataSourceTest.java文件中新增以下代码块:

    @Test
    //测试Spring容器去产生数据源对象
    public void test4() throws Exception{
        ApplicationContext appletContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = appletContext.getBean(DataSource.class);
//        ComboPooledDataSource dataSource = appletContext.getBean("dataSource", ComboPooledDataSource.class);
        //以上是两种获得bean的方式
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }
运行结果

常见错误

从appletContext中使用了getBean方法获得的DataSource对象,但是dataSource并找不到getConnection方法,极大可能是因为导错包了!!!
导入:import javax.sql.DataSource;
极有可能导入了:import javax.activation.DataSource;(错误的)

Spring引入外部properties文件

在spring开发中,一般都会将数据库的配置文件数据与spring配置相分离,但在上一个案例中,在properties.xml文件中,直接写入的了数据库的配置

在以下示例中,将使用context命名空间引入外部的properties文件,然后通过文件中配置的属性进行配置。
applicationContext.xml:




    
    

    
        
        
        
        
    

代码解析


在最前的两个网址不需要去背,xmlns-context配置中的路劲地址不需要背诵,只需要将xmlns这个配置复制下来,然后在冒号后面加上context,将网址中的beans改成context即可完成改配置。
在xsi-schemaLocation=…的第二个网址中,只需要将第一个网址复制下来,然后将其中的beans都修改为context即可完成该配置。
修改完xml配置后运行text4

常见错误


Namespace ‘context’ is not bound

该错误说明在配置文件applicationContext.xml中没有设置context的命名空间,只需要在配置中写上context的命名空间以及地址就能够解决这个bug。


aused by: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 74; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder’ 的声明。

以上错误表示在配置文件中设置了某个命名空间,但是在schemaLocation设置中没有设置对应的地址,或是因为模板的地址配置错误了。
没有写模板地址:

以该错误为例,只需要加上context对应的模板空间地址即可解决该bug。
写了模板地址但是写错了:

如果地址是错误的只需要修改为正确的模板地址即可。

运行结果


能够成功打印出地址,说明在xml中的配置文件是正确可行的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号