Spring数据源对象管理:基于XML配置文件的第三方bean管理

前言

  • 第三方资源配置管理
    • ioc容器和依赖管理,我们大多数管理的是自己创建的bean,如果是第三方提供的bean是如何管理,我们以数据源对象的ioc管理为例子进行说明。

步骤

第一步: 需要导入相应的依赖包(导入坐标)

pom.xml

XML 复制代码
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>

第二步:配置xml文件(需要自己了解数据源对象的名称,属性名等等信息)

即数据源bean运行需要哪些信息:

  • 因为数据源需要连接数据库(需要连接驱动,url,用户名,密码...),
  • 又因为数据源对象只提供了合适的set方法进行使用,
  • 因此只能使用setter注入

老版本驱动,一般指5.x版本:

复制代码
driverClassName: com.mysql.jdbc.Driver

新版本驱动,一般指8.x版本:

复制代码
driverClassName: com.mysql.cj.jdbc.Driver

mysql8.0版本以上可能还需要配置时区等相关配置

总的来说:

管理第三方bean的工作流程:将哪个对象交给ioc管理,并提供哪些属性,才能使这个对象工作。

spring.xml

XML 复制代码
<?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="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url"  value="jdbc:mysql://localhost:3306/test1010?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>


</beans>

第三步:创建测试类进行测试

AppTest

java 复制代码
public class AppTest {
    public static void main(String[] args) {
        ApplicationContext context =new ClassPathXmlApplicationContext("spring.xml");
        DataSource dataSource = (DataSource) context.getBean("dataSource");
        System.out.println(dataSource);
    }
}

运行结果

扩展

配置信息分离

在resources文件夹下创建一个jdbc.properties配置文件配置连接信息

jdbc.properties

java 复制代码
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test1010?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
username=root
password=root

spring.xml

XML 复制代码
<?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">


    <context:property-placeholder location="jdbc.properties"/>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url"  value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>

   
</beans>

第一步:首先要开启spring提供的命名空间context

新增命名空间

第二步:使用context空间加载properties文件

<context:property-placeholder location="jdbc.properties"/>

第三步:使用属性占位符${},读取properties文件中的属性

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">

<property name="driverClassName" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</bean>

注意事项

在配置properties文件时,名称与系统的属性冲突,而系统的属性优先级更高,就会产生错误,这时需要关闭系统属性优先级

复制代码
<context:property-placeholder location="jdbc.properties"  system-properties-mode="NEVER"/>

使用system-properties-mode="NEVER"

可以同时加载多个properties文件,需要遵守以下规则:
相关推荐
敲代码的嘎仔16 分钟前
从零搭建微服务:Spring Cloud Alibaba 全家桶踩坑实录(Nacos + OpenFeign + Gateway + Sentinel)
java·spring boot·spring·spring cloud·微服务·gateway·sentinel
一条泥憨鱼1 小时前
苍穹外卖【day7| 对购物车进行操作】
java·后端·mysql·苍穹外卖
凌虚12 小时前
面向 MySQL 用户的 PostgreSQL 快速上手指南
数据库·后端·架构
五阿哥永琪12 小时前
MySQL中操作json的函数!
数据库·mysql·json
来者皆善12 小时前
了解Mysql优化吗?如何优化索引?
数据库·mysql
都叫我大帅哥13 小时前
Java JJWT 完全指南:从入门到生产级实践
java
前端开发张小七14 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
ThsPool15 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
赤壁小虾15 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
MC皮蛋侠客15 小时前
SQLAlchemy 系列(七):高级建模与高效写入——批量 DML、方言与扩展
数据库·python