【Spring 学习笔记(七)】Spring 管理第三方Bean之管理Druid数据源

449 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

写在前面😘

大一电子信息工程新生,请多多关照,希望能在掘金记录自己的学习历程!
【Spring 学习笔记】 系列教程基于 Spring 5.2.10.RELEASE讲解

一、第三方Bean

之前在文章JDBC 数据库连接池 Druid讲过手动管理druid数据源,下面通过一个案例——spring管理Druid数据源,来学习Spring如何 管理第三方Bean

第三方Bean,即第三方类,不是自己创建的类。

通常是jar包中提供的第三方类,如阿里druid连接池中的DruidDataSource类

Spring管理第三方Bean也是通过属性注入(setter注入或者构造器注入)的方法

二、思路分析

需求:properties配置文件里有数据库连接信息,spring来加载配置文件,并使用文件中的信息来完成属性注入。

  1. 在resources下创建一个jdbc.properties(文件名称任意),并将数据库连接信息写入配置文件中

  2. 在Spring的配置文件中加载properties文件

  3. 使用配置文件中的信息实现属性注入

三、实现步骤

步骤1:导入druid等依赖

pom.xml文件里添加springdruidmysql驱动的依赖包

<dependencies>
    <dependency>
        <!--springframework框架-->
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.10.RELEASE</version>
    </dependency>
    <!--Druid连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
    <!--mysql 驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

步骤2:准备properties配置文件

resources下创建一个jdbc.properties文件,并添加对应的属性键值对

# 注册驱动,可以缺省,会根据url自动识别
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接地址
jdbc.url=jdbc:mysql://127.0.0.1:3306/db
# 数据库管理员名称
jdbc.username=root
# 数据库密码
jdbc.password=123456
##初始连接数,默认0
jdbc.initialSize=5
# 最大连接数,默认8
jdbc.maxActive=10
# 最小闲置数
jdbc.minIdle=10
# 获取连接的最大等待时间,单位毫秒
jdbc.maxWait=3000

步骤3:开启context命名空间

在applicationContext.xml中开启context命名空间,这样才能加载properties配置文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
</beans>

步骤4:加载properties配置文件

在配置文件中使用context命名空间下的标签来加载properties配置文件。system-properties-mode="NEVER"表示不加载系统的环境变量

<!--加载properties配置文件-->
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>

步骤5:完成属性注入

使用spring的el表达式${key}来读取properties配置文件中的内容并完成属性注入

<!--加载properties配置文件-->
<context:property-placeholder location="jdbc.properties"/>
<!--管理第三方Bean:DruidDataSource对象-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="initialSize" value="${jdbc.initialSize}"/>
    <property name="maxActive" value="${jdbc.maxActive}"/>
    <property name="minIdle" value="${jdbc.minIdle}"/>
    <property name="maxWait" value="${jdbc.maxWait}"/>
</bean>

步骤6:编写运行程序

public static void main(String[] args) throws SQLException {
    //获取IoC容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //从容器中获取DruidDataSource对象
    DruidDataSource druidDataSource = context.getBean("druidDataSource", DruidDataSource.class);
    //获取数据库链接
    DruidPooledConnection connection = druidDataSource.getConnection();
    //打印数据源信息
    System.out.println(druidDataSource);
}

运行结果如下👇
可以看到数据库已经成功连接了🚩 image-20220604173126202

四、加载多个properties文件

  • 一个项目里可能有多个properties文件,下面介绍spring如何加载多个properties文件
<!--方式一 -->
<context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
<!--方式二-->
<context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
<!--方式三 -->
<context:property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
<!--方式四-->
<context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>
方式说明
jdbc.properties,jdbc2.properties以逗号分隔,不适用配置文件多的情况。
*.properties所有以properties结尾的文件都会被加载
classpath:*.properties标准的写法,classpath:代表的是从根路径下开始查找,但是只能查询当前项目的根路径
classpath*:*.properties不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件

写在后面🍻

感谢观看啦✨
有什么不足,欢迎指出哦💖
掘金的运营同学审核辛苦了💗