Spring第三方资源配置管理

news2024/9/21 10:38:28

在这里插入图片描述

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.coloradmin.cn/o/462663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ 5.1 版本 NameServer 路由管理

文章目录 1. 路由管理核心组件介绍2. RouteInfoManager 路由表3. 路由管理3.1 注册 Broker3.2 注销 Broker3.3 拼凑 TopicRouteData 此文章基于 RocketMQ 5.1 版本进行分析&#xff0c;与 4.x 版本相比此文章分析的部分源码有很大的区别 1. 路由管理核心组件介绍 路由管理是指…

又一次503 service unavailable处理

出现了&#xff1a;503 service unavailable 1&#xff09;查看系统日志 通过事件查看器&#xff0c;查看iis的日志,如下&#xff1a; 在错误信息中提示是 应用程序池提供服务的进程中出现错误。 其他警告也可通过日志目录查看 C:\inetpub\ 出现上述问题的可能是&#xf…

树形结构——JAVA实现

1、树定义和基本术语 节点 package com.young.tree;/*** <p>* Title:树节点&#xff1a;二叉链表结构* </p>** Author: yangyongbing* Date: 2023-04-18 13:25* version: v1.0*/ public class Node<T> {public Node<T> lChild;private T data;public…

CASP15 蛋白质结构域 Domain 的定义和分类

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/130379447 在CASP中&#xff0c;蛋白质结构域(Domain)的类别&#xff0c;包括 FM、FM/TBM、TBM-easy、TBM-hard、not evaluated 等5个类…

25从零开始学Java之数组扩容与数组拷贝的实现过程与原理分析

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家讲解了数组的创建、初始化及遍历方式&#xff0c;这些是我们学…

Cookies和Session案例-注册

1. 注册功能改进 1.1 service 将之前的注册案例的代码进行优化&#xff0c;将获取sqlsession工厂对象、获取sqlsession、获取mapper等操作从servlet中分离出来转变为三层架构的形式 在service目录下创建UserService public class UserService {SqlSessionFactory sqlSessionFa…

办公室组网

1.办公网络组网中,汇聚交换机和接入交换机你会做哪些配置? 接入交换机上配置: (1)VLAN配置:由题意得办公网络中有两个部门,使用VLAN技术将每个部门划入一个局域网中,如部门1属于VLAN 10,部门2属于VLAN20.该网络中还需要额外创建一个VLAN用于管理网络,如VLAN30。在接入…

一文了解国外AIGC头部产品

AIGC是指通过人工智能技术生成的内容&#xff0c;包括文字、图片、音频和视频等。AIGC技术可以基于大量的数据和算法&#xff0c;自动地生成各种类型的内容&#xff0c;可以用于新闻报道、广告宣传、文学创作、游戏设计等各个领域。AIGC技术的优点在于可以大大提高内容生产的效…

GD32F303RCT6开发笔记(一)—— macos环境搭建

macOS vscodegccpyocd环境搭建 1、vscode/arm-none-eabi-/pyocd 安装可百度。 2、pyocd 安装完成后&#xff0c;连接st-link 输入命令后显示如下&#xff0c;说明连接成功。 3、输入命令 pyocd pack find GD32F303RC4、如果没有安装GD32F303RC包 使用命令安装 pyocd pack …

【Vue 基础】vue-cli初始化项目及相关说明

目录 1. 创建项目 2. 项目文件介绍 3. 项目的其它配置 3.1 项目运行时&#xff0c;让浏览器自动打开 3.2 关闭eslint校验功能 3.3 src文件夹简写方法 1. 创建项目 vue create 项目名 2. 项目文件介绍 创建好的项目中包含如下文件&#xff1a; &#xff08;1&#xff09…

基于显扬科技自主研发3D机器视觉HY-M5在易拉罐包装检测的应用

行业现状&#xff1a; 易拉罐包装行业发展迅速&#xff0c;是中国食品工业的重要组成部分。近年来&#xff0c;随着经济水平的提高和生活方式变化&#xff0c;各类预包装食品需求剧增&#xff0c;碳酸饮料和啤酒等饮料消费大幅增加&#xff0c;直接带动易拉罐包装行业高速发展…

方案解析丨数字人主播如何成为电商直播新标配

浙江省政府办公厅近日印发《关于进一步扩大消费促进高质量发展若干举措》支持电子商务直播发展。抢抓电子商务直播快速发展机遇&#xff0c;发展数字人虚拟主播、元宇宙新消费场景等新业态新模式。 随着电商直播快速发展&#xff0c;企业怎么高效地实现引流获客&#xff0c;成为…

【计算机组成原理】数据的表示和运算·进位计数制

&#x1f6a9; 本文已收录至专栏&#xff1a;计算机基础 我们可以通过显示屏看到各种形式的数据信息&#xff0c;但数据是如何在计算机中表示呢&#xff1f;运算器又是如何实现数据的算数、逻辑运算&#xff1f; 十进制数是最适合我们日常使用的一种计数方式&#xff0c;除此之…

随手记录:Livox 时间戳修改为ROS时间戳

参考与前言 传感器类型&#xff1a;Livox-Mid70 参考链接&#xff1a;Ubuntu20.04系统安装Livox ROS Driver 官方驱动&#xff1a;https://github.com/Livox-SDK/livox_ros_driver 碎碎念&#xff1a;之所以要改成rostime主要是 提取pcd的时候发现这个timestamp 300.xxx 打…

我那张被问爆了的漫画头像确实有点东西

不得不说&#xff0c;这个照片变漫画有点东西啊&#xff01;不知道姐妹们有没有发现❗️最近漫画人像它又火起来了&#xff0c;基本上在dy等各大社交软件上&#xff0c;特别是朋友圈已经是刷屏了&#xff5e;随便一张照片经过渲染之后秒变动漫风格照&#xff0c;我就马不停蹄就…

宝塔面板搭建自己的网站,并发布公网远程访问

文章目录 1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4.固定http地址5. 配置二级子域名6.创建一个测试页面 宝塔面板简单几步搭建本地web站点&#xff0c;并做内网穿透&#xff0c;实现公网用户也可以正常远程访问&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1. 环…

这样的速度,还有谁?一个 issue 引发的性能大跃进

前段时间开源了一个关于音频特征提取和分析的小项目&#xff0c;自己是 AI 音频领域方向的&#xff0c;但受限于对音频特征的理解&#xff0c;做研究时总感觉缺乏“底料”&#xff0c;所以当做是学习练手做了这个小东西。 虽然是学习练手的小项目&#xff0c;但也信心满满&…

从盒马来看新零售的全面可行性

来源&#xff5c;新零售 不久前&#xff0c;一家位置极佳的北京老牌超市闭店的消息引发了很多人的唏嘘&#xff0c;这家超市位于北京长安街东侧的万达广场上&#xff0c;曾经作为万达广场的主力店&#xff0c;服务周边居民长达十年之久。 不过&#xff0c;周边的居民很快得知…

哪个牌子的电视盒子好用?经销商总结目前性能最好的电视盒子

做数码经销已经是第九年了&#xff0c;这些年对数码行业也算是颇有研究&#xff0c;大家选购数码产品时都会参考我的建议。今天我将来分享目前性能最好的电视盒子推荐&#xff0c;想知道哪个牌子的电视盒子好用看这篇就足够了。 一&#xff1a;泰捷WEBOX60Pro电视盒子 亮点&a…

27- OCR 光功率计数码管字符识别

要点&#xff1a; 光功率计数码管 1 前言 本案例将使用OCR技术自动识别光功率计显示屏文字&#xff0c;通过本章您可以掌握&#xff1a; PaddleOCR快速使用数据合成方法数据挖掘方法基于现有数据微调 为实现智能读数&#xff0c;通常会采取文本检测文本识别的方案&#xff…