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

Spring配置数据源

Spring配置数据源

  • 数据源的作用
  • 环境准备
  • 手动创建c3p0数据源
  • 封装抽取关键信息,手动创建c3p0数据源
  • 使用Spring容器配置数据源

数据源的作用

数据源(连接池)是提高程序性能如出现的
事先实例化数据源,初始化部分连接资源
使用连接资源时从数据源中获取
使用完毕后将连接资源归还给数据源
常见的数据源有:DBCP、C3P0、BoneCP、Druid

环境准备

idea中创建一个maven项目,导入如下所需的基本坐标(mysql、Junit、spring-contex) 两种数据池可以看自己情况都导或者导入其中一个,Junit看个人需要可导可不导。

 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.3</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency></dependencies>

在resources目录下下建一个名为jdbc.properties的文件,
properties文件数据配置如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db1
jdbc.username=root
jdbc.password=123456

手动创建c3p0数据源

 //手动测试c3p0数据源@Testpublic void test1() throws Exception {//创建数据源对象ComboPooledDataSource dataSource = new ComboPooledDataSource();//设置数据源的基本连接数据dataSource.setDriverClass("com.mysql.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db1");dataSource.setUser("root");dataSource.setPassword("123456");//使用数据源获取连接资源Connection connection = dataSource.getConnection();System.out.println(connection);//关闭连接资源connection.close();}

封装抽取关键信息,手动创建c3p0数据源

第一种加载配置文件方式:

//用文件流的方式进行读取Properties properties = new Properties();properties.load(new FileReader("src/main/resources/jdbc.properties"));String driver = properties.getProperty("jdbc.driver");String url = properties.getProperty("jdbc.url");String username = properties.getProperty("jdbc.username");String password = properties.getProperty("jdbc.password");

第二种加载配置文件方式:

//用resourceBundle进行读取配置ResourceBundle rb=ResourceBundle.getBundle("jdbc");String driver = rb.getString("jdbc.driver");String url = rb.getString("jdbc.url");String username = rb.getString("jdbc.username");String password = rb.getString("jdbc.password");

任选上面两种方式,读取文件信息

 //手动测试c3p0数据源   加载配置文件@Testpublic void test4() throws Exception {/*任选上面两种方式,读取文件信息读取配置文件....*/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();}

使用Spring容器配置数据源

把数据源的创建权交给Spring容器去完成,在resource目录下创建一个SQLConfiguration.xml的Spring配置文件

<?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><property name="url" value="jdbc:mysql://localhost:3306/db1"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean>
</beans>

对应的测试代码如下:

   //spring容器创建@Testpublic void test5() throws Exception {ApplicationContext app= new ClassPathXmlApplicationContext("SQLConfiguration.xml");
//        Object dataSource = app.getBean("dataSource");DataSource dataSource = app.getBean(DataSource.class);Connection connection = dataSource.getConnection();System.out.println(connection);connection.close();}

上面spring的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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--    加载properties配置文件--><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" ><property name="driverClass" value="${jdbc.driver}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean>
</beans>

xmlns="http://www.springframework.org/schema/beans"中的beans改成context,命名空间和约束路径都要进行修改。
修改关键信息

注意细节:
spring容器加载properties配置文件方式如下:

<!--    加载properties配置文件--><context:property-placeholder location="classpath:jdbc.properties"/><property name="" value="${key}" />

配置完成后,即可使用。

参考:https://blog.csdn.net/weixin_59654772/article/details/122549314
视频资料:黑马程序员spring教程第二天
链接地址:视频地址

相关文章:

Spring配置数据源

Spring配置数据源数据源的作用环境准备手动创建c3p0数据源封装抽取关键信息&#xff0c;手动创建c3p0数据源使用Spring容器配置数据源数据源的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源&#xff0c;初始化部分连接资源 使用连接资源时从数据源中获取 使用完…...

【前端之旅】Vue入门笔记

一名软件工程专业学生的前端之旅,记录自己对三件套(HTML、CSS、JavaScript)、Jquery、Ajax、Axios、Bootstrap、Node.js、Vue、小程序开发(Uniapp)以及各种UI组件库、前端框架的学习。 【前端之旅】Web基础与开发工具 【前端之旅】手把手教你安装VS Code并附上超实用插件…...

WPF教程(二)--Application WPF程序启动方式

1.Application介绍 WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作&#xff0c;并且每个 Domain &#xff08;应用程序域&#xff09;中仅且只有一个 Application 实例存在。和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.…...

snmp 自定义子代理mib库

测试环境&#xff1a;centos8 1、安装软件 yum install -y net-snmp net-snmp-utils yum install -y net-snmp-perl net-snmp-devel net-snmp-libs 2、创建用户 net-snmp-create-v3-user 输入用户名 soft 输入密码 123456 输入密码 654321 service snmpd restart 3、创建…...

一文说透安全沙箱技术

在数字经济的东风中&#xff0c;数据安全至关重要。目前已经颁布了包括《数据安全法》、《个人信息保护法》和《数据安全管理办法》在内的国家政策&#xff0c;以促进整个数据要素的发展。 而近年来&#xff0c;随着移动应用程序的普及和小程序技术的崛起&#xff0c;安全沙箱…...

Java多线程基础面试总结(二)

创建三种线程的方式对比 使用实现Runnable、Callable接口的方式创建多线程。 优势 Java的设计是单继承的设计&#xff0c;如果使用继承Thread的方式实现多线程&#xff0c;则不能继承其他的类&#xff0c;而如果使用实现Runnable接口或Callable接口的方式实现多线程&#xf…...

NS32F407VGT6 NS32F407VET6软硬件通用STM32F407VGT6 407VET6

NS32F407VGT6 NS32F407VET6 器件基于高性能的 ARM Cortex-M4 32 位 RISC 内核&#xff0c;工作频率高达 168MHz 。 Cortex-M4 内核带有单精度浮点运算单元 (FPU) &#xff0c;支持所有 ARM 单精度数据处理指令和数据类型。它还 具有一组 DSP 指令和提高应用安全性的一…...

Openstack: network: ovs: dpif/show 实例分析:interface

[TOC 实例 [cbis-adminovercloud–13 (overcloudrc) ~]$ sudo ovs-appctl dpif/show systemovs-system: hit:75198007884 missed:109924265 br-ex: br-ex 65534/3: (internal) ,65534 是port number; OpenFlow port number&#xff1b; 3 是 ofp_port_to_odp_port(ofproto, o…...

必要的项目管理软件因素

什么样的项目管理软件好&#xff1f;对于一个项目团队来说&#xff0c;从项目开始到项目结束&#xff0c;需要多个部门的配合。每个成员可能会参与一个以上的项目&#xff0c;这通常需要并行的多个项目。据介绍&#xff0c;国外90%以上的项目是用软件管理的&#xff0c;而中国只…...

大学刚毕业,用10000小时,走进字节跳动拿了offer

前言&#xff1a; 没有绝对的天才&#xff0c;只有持续不断的付出。对于我们每一个平凡人来说&#xff0c;改变命运只能依靠努力幸运&#xff0c;但如果你不够幸运&#xff0c;那就只能拉高努力的占比。 2020年7月&#xff0c;我有幸成为了字节跳动的一名测试开发&#xff0c…...

docker 安装 redis

搜索镜像 docker search redis 拉取最新版本 Docker pull redis Docker挂载配置文件 docker run --restartalways --log-opt max-size100m --log-opt max-file2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf -v /opt/myredis/data:/d…...

Ceph常见问题

1. CephFS问题诊断 1.1 无法创建 创建新CephFS报错Error EINVAL: pool ‘rbd-ssd’ already contains some objects. Use an empty pool instead&#xff0c;解决办法&#xff1a; ceph fs new cephfs rbd-ssd rbd-hdd --force1.2 mds.0 is damaged 断电后出现此问题。MDS进…...

Android---Jetpack之Paging

目录 Paging 组件的意思 Paging 支持的架构类型 Paging 的工作原理 PositionalDataSource PagekeyedDataSource ItemKeyedDataSource BoundaryCallback Paging 组件的意思 分页加载是在应用程序开发过程中十分常见的需求&#xff0c;Paging 就是 Google 为了方便 Andr…...

gensim.models.word2vec() 参数详解

1. Word2vec简介 Word2vec是一个用来产生词向量的模型。是一个将单词转换成向量形式的工具。 通过转换&#xff0c;可以把对文本内容的处理简化为向量空间中的向量运算&#xff0c;计算出向量空间上的相似度&#xff0c;来表示文本语义上的相似度。 2.Word2vec参数详解 class…...

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…...

阿里云的客服 锻炼你心性的 一种方式 !!!

阿里云的产品&#xff0c;非常棒&#xff0c;开发的同学非常棒&#xff0c;专家们更棒&#xff0c;但&#xff0c;一切的开始就怕一个但字&#xff0c;但我还的说&#xff0c;但&#xff0c;阿里云的客服&#xff0c;OMG &#xff0c;我已经忍耐了 1年了&#xff0c;是在忍不住…...

Linux常用的网络命令有哪些?快速入门!

在Linux系统中&#xff0c;有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能&#xff0c;并且可以快速诊断和解决网络问题。在本文中&#xff0c;我们将介绍一些常用的Linux网络命令&#xff0c;并提供一些案例来帮助您更好地理…...

PMP认证价值在哪?这个证书有什么用?

PMP证书是全球最权威的项目管理证书之一&#xff0c;获得该证书可以证明持证者具备高水平的项目管理知识和技能&#xff0c;拥有广泛的项目管理经验&#xff0c;并且符合全球项目管理行业的标准和规范。PMP证书的作用主要体现在以下几个方面&#xff1a; 1. 提升竞争力 在全球…...

一条更新语句的执行流程又是怎样的呢?

当一个表上有更新的时候&#xff0c;跟这个表有关的查询缓存会失效&#xff0c;所以这条语句就会把表T上所有缓存结果都清空。这也就是我们一般不建议使用查询缓存的原因。 接下来&#xff0c;分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用ID这个索引。然…...

promise异步编程指南

promise 是什么 Promise 是异步编程的一种解决方案&#xff0c;可以替代传统的解决方案–回调函数和事件。ES6 统一了用法&#xff0c;并原生提供了 Promise 对象。作为对象&#xff0c;Promise 有以下两个特点&#xff1a; (1)对象的状态不受外界影响。 (2)一旦状态改变了就不…...

3分钟上手Upscayl:免费AI图像放大工具的终极使用指南

3分钟上手Upscayl&#xff1a;免费AI图像放大工具的终极使用指南 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 想要将模糊的…...

用Proteus玩转Arduino?别忘了这些电阻的‘潜规则’(附光敏电阻模拟方案)

用Proteus玩转Arduino&#xff1f;别忘了这些电阻的‘潜规则’&#xff08;附光敏电阻模拟方案&#xff09; 在虚拟原型开发领域&#xff0c;Proteus与Arduino的结合为创客们提供了无限可能。但许多开发者往往忽略了电路仿真中最基础的元件——电阻的巧妙运用。本文将揭示那些鲜…...

【LLM推理加速】Lookahead:无损加速新范式,如何用Trie树与多分支策略突破IO瓶颈

1. 为什么我们需要无损推理加速&#xff1f; 大语言模型在实际应用中面临的最大痛点之一就是推理速度慢。想象一下&#xff0c;当你向AI助手提问时&#xff0c;每次等待回复都要花上好几秒&#xff0c;这种体验有多糟糕。传统的加速方法比如量化&#xff08;把模型参数从16位压…...

Excel VBA编程实例(150例):助你轻松掌握办公自动化利器

Excel VBA编程实例(150例)&#xff1a;助你轻松掌握办公自动化利器 【下载地址】ExcelVBA编程实例150例资源下载 本仓库提供了一个名为“Excel VBA编程实例(150例)”的资源文件下载。该资源文件包含了150个Excel VBA编程实例&#xff0c;旨在帮助用户通过实际案例学习和掌握Exc…...

探索Artisan:用开源软件解码咖啡烘焙的数据科学

探索Artisan&#xff1a;用开源软件解码咖啡烘焙的数据科学 【免费下载链接】artisan artisan: the worlds most trusted roasting software 项目地址: https://gitcode.com/gh_mirrors/ar/artisan 在咖啡烘焙的世界里&#xff0c;每一次烘焙都是一次精确的化学反应。从…...

OpenPnP玩家必看:深度解析松下DP102传感器与贴片机真空系统的联动原理与调优

OpenPnP系统集成实战&#xff1a;DP102负压传感器与真空控制回路的科学调优 在DIY贴片机的世界里&#xff0c;OpenPnP系统就像一位不知疲倦的指挥家&#xff0c;而DP102负压传感器则是这支精密乐队中的关键乐手。当吸嘴与元器件相遇的瞬间&#xff0c;背后是一场由气压数据驱动…...

终极网盘直链下载助手完整使用指南:如何高效获取八大网盘文件直链

终极网盘直链下载助手完整使用指南&#xff1a;如何高效获取八大网盘文件直链 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动…...

3大核心功能解析:LilToon如何让Unity卡通渲染变得简单又专业

3大核心功能解析&#xff1a;LilToon如何让Unity卡通渲染变得简单又专业 【免费下载链接】lilToon Feature-rich shaders for avatars 项目地址: https://gitcode.com/gh_mirrors/li/lilToon 如果你正在Unity中寻找一个既能满足专业需求又容易上手的卡通渲染解决方案&am…...

高性能Go Web框架Volo:设计原理、核心功能与生产实践

1. 项目概述&#xff1a;一个高性能的Go语言Web框架最近在折腾一个需要处理高并发请求的API服务&#xff0c;选型时又一次把目光投向了Go生态。说实话&#xff0c;Go的Web框架选择不少&#xff0c;从轻量级的Gin、Echo&#xff0c;到功能更全的Beego、Iris&#xff0c;各有各的…...

用Python和罗技驱动DLL实现《穿越火线》红名自动检测与开枪(保姆级避坑指南)

Python游戏自动化开发实战&#xff1a;基于颜色识别的智能交互系统设计 在数字娱乐领域&#xff0c;自动化技术正悄然改变着用户的交互体验。本文将深入探讨如何利用Python构建一套安全、高效的屏幕元素识别与自动化交互系统&#xff0c;重点解析颜色识别算法的核心实现与硬件接…...