当前位置: 首页 > news >正文

Spring第三方资源配置管理

在这里插入图片描述

Spring第三方资源配置管理

      • 1. 管理DataSource连接池对象
        • 1.1 管理Druid连接池【重点】
        • 1.2 管理c3p0连接池
      • 2. 加载properties属性文件【重点】
        • 2.1 基本用法
        • 2.2 配置不加载系统属性
        • 2.3 加载properties文件写法

说明:以管理DataSource连接池对象为例讲解第三方资源配置管理

1. 管理DataSource连接池对象

问题导入

配置数据库连接参数时,注入驱动类名是用driverClassName还是driver?

1.1 管理Druid连接池【重点】

数据库准备

create database if not exists spring_db character set utf8;
use spring_db;
create table if not exists tbl_account(id int primary key auto_increment,name varchar(20),money double
);
insert into tbl_account values(null,'Tom',1000);
insert into tbl_account values(null,'Jerry',1000);

【第一步】添加Druid连接池依赖

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version>
</dependency>

注意:除了添加以上两个依赖之外,别忘了添加spring-context依赖。

【第二步】配置DruidDataSource连接池Bean对象

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/spring_db"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>

【第三步】在测试类中从IOC容器中获取连接池对象并打印

public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}
}

1.2 管理c3p0连接池

【第一步】添加c3p0连接池依赖

<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version>
</dependency>

【第二步】配置c3p0连接池Bean对象

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/><property name="user" value="root"/><property name="password" value="root"/><property name="maxPoolSize" value="1000"/>
</bean>

注意:同一个Spring容器中不能有两个id="dataSource"的连接池。

【第三步】在测试类中从IOC容器中获取连接池对象并打印

public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}
}

2. 加载properties属性文件【重点】

目的:将数据库的连接参数抽取到一个单独的文件中,与Spring配置文件解耦。

问题导入

问题1:如何解决使用EL表达式读取属性文件中的值结果读取到了系统属性问题?

问题2:加载properties文件写法标准写法该怎么写?

2.1 基本用法

【第一步】编写jdbc.properties属性文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root

【第二步】在applicationContext.xml中开启开启context命名空间,加载jdbc.properties属性文件

image-20210730101826913

小技巧:如果同学们觉得上述复制粘贴方式不好改或者容易改错,其实idea是有提示功能的,注意不要选错就行了。有些版本的idea没有这个提示,那么就按照上面复制粘贴的方式改,改完之后可以做成live template模板,后期直接用。

image-20210730102053281

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

【第三步】在配置连接池Bean的地方使用EL表达式获取jdbc.properties属性文件中的值

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

配置完成之后,运行之前的获取Druid连接池代码,可以获取到连接池对象就表示配置成功。

2.2 配置不加载系统属性

问题

如果属性文件中配置的不是jdbc.username,而是username=root666,那么使用${username}获取到的不是root666,而是计算机的名称。

原因

系统属性的优先级比我们属性文件中的高,替换了我们的username=root666。

解决

解决1:换一个名称,例如不叫username,叫jdbc.username。

解决2:使用system-properties-mode="NEVER"属性表示不使用系统属性。

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

2.3 加载properties文件写法

  • 不加载系统属性
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
  • 加载多个properties文件
<context:property-placeholder location="jdbc.properties,msg.properties"/>
  • 加载所有properties文件
<context:property-placeholder location="*.properties"/>
  • 加载properties文件**标准格式**
<context:property-placeholder location="classpath:*.properties"/>
  • 加载properties文件标准格式
<context:property-placeholder location="classpath*:*.properties"/>
http://www.lryc.cn/news/63013.html

相关文章:

  • 网络编程代码实例:多进程版
  • 一家传统制造企业的上云之旅,怎样成为了数字化转型典范?
  • C++入门(C++)
  • Linux 利用网络同步时间
  • 炫技亮点 SpringBoot下消灭If Else,让你的代码更亮眼
  • 免费ChatGPT接入网站-网站加入CHATGPT自动生成关键词文章排名
  • PostgreSQL的数据类型有哪些?
  • Android 9.0 系统开机自启动第三方app
  • 一些想法:关于学习一门新的编程语言
  • 线性代数——矩阵
  • taro之小程序持续集成
  • Ceph入门到精通-Ceph 编排器简介
  • 【Feign扩展】OpenFeign日志打印Http请求参数和响应数据
  • MongoDB (零) 安装和简单使用
  • Java中的异常是什么?
  • 微短剧“小阳春”,“爱优腾芒”抢滩登陆?
  • C++菱形继承(再剖析)
  • java获取星期几
  • 【TypeScript】03-TypeScript基本类型
  • 什么是跨域?
  • Gradle理论与实践—Gradle构建脚本基础
  • 【Vue 基础】vue-cli初始化项目及相关说明
  • 【c语言】详解c语言#预处理期过程 | 宏定义前言
  • 内网远程控制软件哪个好用
  • 【计算机基本原理-数据结构】数据结构中树的详解
  • 数字设计小思 - D触发器与死缠烂打的亚稳态
  • Notes/Domino 11.0.1FP7以及在NAS上安装Domino等
  • 【VM服务管家】VM4.x算子SDK开发_3.3 模块工具类
  • Aspose.Pdf使用教程:在PDF文件中添加水印
  • H.264/AVC加密----选择加密