在Spring JDBC中添加C3PO连接池

连接池是一种操作,其中系统会预先初始化将来要使用的连接。 这样做是因为在使用时创建连接是一项昂贵的操作。 在本文中,我们将学习如何在Spring JDBC中创建C3P0连接池(某人未使用休眠)。



Pom.xml

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

Spring上下文文件(applicaitonContext-persistance.xml)

现在,我们需要为spring准备一个JDBC上下文文件。 我们需要使用所有凭据为数据库定义一个数据源。

<?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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd"><!-- Employee DB data source. --><bean id="employeeDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"><property name="driverClass" value="${jdbc.driverClassName}" /><property name="jdbcUrl" value="${jdbc.employee_db_url}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxPoolSize" value="${jdbc.maxPoolSize}" /><property name="minPoolSize" value="${jdbc.minPoolSize}" /><property name="maxStatements" value="${jdbc.maxStatements}" /><property name="testConnectionOnCheckout" value="${jdbc.testConnection}" /></bean><context:component-scan base-package="com.javapitshop.dao"></context:component-scan>
</beans>

在上面的示例中,我们为Employee DB创建了一个C3P0数据源,其中包含所有凭据和适当的参数。 上下文文件中未提及所有凭据和设置。 我一直在使用专用的属性文件。 现在,可以在任何DAO类中自动将此bean作为DataSource对象连接。

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.employee_db_url=jdbc:mysql://localhost:3306/employee
jdbc.username=root
jdbc.password=root
jdbc.maxPoolSize=50
jdbc.minPoolSize=10
jdbc.maxStatements=100
jdbc.testConnection=true

BaseDao类

DAO基础类将定义我们需要在所有子类中使用的任何抽象方法或任何常用功能。 我们可以根据需要将其抽象化或根据需要添加任何内容。 另请注意,我已经重载了其构造函数以实现Logging。 现在,每个子类都需要提供其类定义。

package com.icsmobile.faadplatform.dao;import org.apache.log4j.Logger;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;/*** Its the parent Dao class of the all the daos defined in the System.** @author JavaPitShop*/
public class BaseDao extends SimpleJdbcDaoSupport {//common logger for all the classes in the dao layerprotected Logger logger;/*** * @param daoClass*/public BaseDao(Class<?> daoClass) {logger = Logger.getLogger(daoClass);}}

EmployeeJdbcDao.Java

EmployeeJdbcDao正在扩展BaseDao,并在其构造函数中自动装配了我们在上下文Bean中定义的“ employeeDataSource”。

@Repository
public class EmployeeJdbcDAO extends BaseDao {/*** Instantiates a new employee jdbc dao.** @param userDataSource the employee data source*/@Autowiredpublic ApplicationJdbcDAO(DataSource employeeDataSource) {super(ApplicationJdbcDAO.class);this.setDataSource(userDataSource);}public EmployeeBO getEmployeeById(final int employeeId) {logger.debug("getEmployeeById(" + employeeId + ")");EmployeeBO employeeBO = null;StringBuilder queryString = new StringBuilder();queryString.append(" SELECT ").append( "*" )	.append(" FROM employee ").append(" WHERE employee_id = ? ");Object[] parameterList = { employeeId };logger.debug(queryString.toString());// execute querySqlRowSet dataRow = getJdbcTemplate().queryForRowSet(queryString.toString(), parameterList);if (dataRow.next()) {// create application objectemployeeBO = getEmployeeBusinessObjectFromRowSet(dataRow);}return employeeBO;}
}

翻译自: https://www.javacodegeeks.com/2014/05/adding-c3po-connection-pooling-in-spring-jdbc.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363221.shtml

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

相关文章

在 CentOS/Fedora 下安装 JAVA 环境

介绍 本文介绍如何在 CentOS 7&#xff08;6/6.5&#xff09;、 Fedora、RHEL 上安装 Java。Java是一个流行的软件平台&#xff0c;允许您运行Java应用程序。 本文涵盖了以下Java版本的安装&#xff1a; OpenJDK 8Oracle Java 8先决条件 在开始之前&#xff0c;您应该有一个能够…

小程序: 在同一个文件夹中配置多个页面

1. 可以在同一个文件夹中配置多个页面&#xff08;即相关的放在一个文件夹中&#xff09; 如&#xff1a; 创建一个首页&#xff1a; 在 app.json中配置 -- pages/index/index创建一个首页中的相关页面&#xff1a; 在 app.json中配置 -- pages/index/detail/detail 博客地址…

[欧拉函数] Bzoj P2186 沙拉公主的困惑

Description 大富翁国因为通货膨胀&#xff0c;以及假钞泛滥&#xff0c;政府决定推出一项新的政策&#xff1a;现有钞票编号范围为1到N的阶乘&#xff0c;但是&#xff0c;政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现…

象素图和向量图

象素图和向量图主要的区别是动态和静态的区别 象素图是固定的图&#xff0c;它在图形生成时就已经是由固定的象素点组成了&#xff0c;不可以再变化&#xff0c;所以大小不一样&#xff0c;清晰度不一样&#xff0c; 向量图是动态的图&#xff0c;每次显示都会根据大小绘制本身…

ActiveMQ –经纪人网络解释–第5部分

在前面的第4部分中&#xff0c;我们已经看到了如何使用网络连接器在队列中平衡远程使用者的负载。 在第5部分中&#xff0c;我们将看到如果在某个主题上有并发远程持久订阅者&#xff0c;则相同的配置将如何工作。 考虑以下配置…。 图1&#xff1a;经纪人网络–主题上的负载…

Unity项目导入的error

5.6.3error 如下&#xff1a;An assembly with the same name UnityEngine.UI has already been imported. Consider removing one of the references or sign the assemblyanswer:I deleted all the c# project files at the root of the folder structure and reloaded the p…

小程序: 域名配置

1. 问题 在小程序中&#xff0c;如果我们没有在微信公众平台: 配置 https开头的、备案过的域名话&#xff0c;调用该域名下的接口&#xff0c;就会报错 当然&#xff1a; 如果只是简单的学习下小程序使用的话&#xff0c;可以不校验域名 — 微信开发者工具中&#xff1a; 详情 …

描述符

描述符描述符也是面向进阶的一种&#xff0c;由于它的涉及比较广&#xff0c;所以单独讲。 一、描述符 描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议。 描述符的作用是用来代理另外一个类的属性&#xf…

C++迭代器简介

迭代器是一种检查容器内元素并遍历元素的数据类型。 标准库为每一种标准容器&#xff08;包括 vector&#xff09;定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法&#xff1a;所有的标准库容器都定义了相应的迭代器类型&#xff0c;而只有少数的容器支持下标…

编写干净的测试-被认为有害的新内容

很难为干净的代码找到一个好的定义&#xff0c;因为我们每个人都有自己的单词clean的定义。 但是&#xff0c;有一个似乎是通用的定义&#xff1a; 干净的代码易于阅读。 这可能会让您感到有些惊讶&#xff0c;但是我认为该定义也适用于测试代码。 使测试尽可能具有可读性是我…

所谓经济现象

随想一下&#xff0c;先举出一些基本认知&#xff0c;后面大家会看到这些认知之间的牵扯&#xff0c;已经人在做决策的时候是如何分配权重的&#xff0c;进而产生后续和当今的局面。经济学一点都不难&#xff0c;只是现在人学的是技术上的操作&#xff0c;而不学背后的运作逻辑…

hdu-1277--字典树坑题

hdu-1227 字典树&#xff0c;坑题&#xff01;&#xff01;当字典树练手 Problem Description 我们大家经常用google检索信息&#xff0c;但是检索信息的程序是很困难编写的&#xff1b;现在请你编写一个简单的全文检索程序。 问题的描述是这样的&#xff1a;给定一个信息流文件…

Do not mutate vuex store state outside mutation handlers.

组件代码&#xff1a; selectItem(item,index) {this.selectPlay({list: this.songs,index}) }, ...mapActions([selectPlay ]) mutation 代码&#xff1a; [types.SET_PLAYLIST](state, list) {// 1、state.playlist JSON.parse(JSON.stringify(list))// 2、state.playlist …

硅谷企業面臨新的反壟斷枷鎖

硅谷的公司正面臨著加強反壟斷審查的新階段﹐這是對奧巴馬政府加強執法和持續不斷的海外壓力所做出的反應。 對在其行業中佔據主導地位的企業採取更嚴格的立場可能會考驗這些科技業巨頭在布什政府時期採取的政府關係策略。Associated Press奧巴馬政府任命的司法部負責反壟斷執法…

Spring Java配置:会话超时

当您可以使用基于Java的配置开发Spring应用程序时&#xff0c;我们生活在一个美好的时光。 不再有多余的XML代码&#xff0c;只有纯Java代码。 在本文中&#xff0c;我想讨论一个关于Spring应用程序中会话管理的热门话题。 更确切地说&#xff0c;我将以Java配置样式讨论会话超…

怎样去掉警告 log4j:WARN No appenders could be found for logger

最近在作项目的时候&#xff0c;用到了 HttpClient&#xff0c;用它向 HTTP server 发送请求并处理返回的页面数据。 我的应用类间接调用 HttpClient。在运行的时候&#xff0c;程序打印出了如下警告信息&#xff1a; log4j:WARN No appenders could be found for logger log…

这首歌【好听】到哭出来

转载于:https://www.cnblogs.com/Agnel-Cynthia/p/10662886.html

Raect Router 4 的使用 (1)

本文来自于官方文档&#xff0c;属于意译而非直译 基本组件 React Router 有三种类型的组件&#xff0c;分别是&#xff1a;react-router、react-router-dom、react-router-native 你在web 程序中使用了路由组件&#xff0c;那你就应该引入 react-router-dom&#xff1a; im…

分而治之思想

当一个问题的规模很大时&#xff0c;直接求解往往比较困难。对于这类问题&#xff0c;很大一部分是可以采取分而治之的思想来处理的。 分治法是把问题划分成多个子问题来进行处理。这些子问题&#xff0c;在结构上跟原来的问题一样&#xff0c;但是规模比原来的问题要小。如果得…

在Java 8中使用Stream API解析文件

Java 8中到处都有流。只需四处看看&#xff0c;可以肯定地找到它们。 它也适用于java.io.BufferedReader 。 使用Stream API在Java 8中解析文件非常容易。 我有一个要读取的CSV文件。 下面的例子&#xff1a; username;visited jdoe;10 kolorobot;4我的阅读器的一项合同是提供…