前几篇关于Java连接池的介绍都是基于Java应用的,而我们常用的场景是与Spring和ORM框架结合,下面就利用实例学习一下这方面的配置。
1.下载相关内容:
c3p0下载地址:http://sourceforge.net/projects/c3p0/
Proxool下载地址:http://proxool.sourceforge.net/
Druid下载地址:http://code.alibabatech.com/mvn/releases/com/alibaba/druid/
Spring下载地址:http://www.springsource.org/download/community
Hibernate下载地址:http://www.hibernate.org/downloads.html
ibatis(mybatis)下载地址:http://code.google.com/p/mybatis/
这里我们下载并采用的版本是:c3p0-0.9.2.1,proxool-0.9.1,druid-0.2.23,spring-framework-3.2.2,hibernate-4.2.3,mybatis-3.2.2.
2.新建一个web项目,这里以之前举例项目为例,将所需要的相关jar包复制到项目的WEB-INF/lib下,这里就不详细说明各框架的jar包依赖关系了,可以自己百度查下。
3.新建接口C3P0DAO,DruidDAO,ProxoolDAO,并且添加相同的方法:
- /**
- * 获取用户信息
- * @param usrId
- * @return
- */
- Object getUsrInfo(Integer usrId);
4.在resource目录下新建c3p0.properties,druid.properties,proxool.properties这三个属性文件,他们分别是几种连接池的详细配置信息。
5.在resource目录下新建Spring配置文件applicationContext-dataSource.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:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- <!-- spring加载资源文件 -->
- <bean name="propertiesConfig"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath:c3p0.properties</value>
- <value>classpath:proxool.properties</value>
- <value>classpath:druid.properties</value>
- <value>classpath:hibernate.properties</value>
- </list>
- </property>
- </bean>
- <!-- c3p0数据源配置 -->
- <bean id="dataSource_c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <!-- 数据库驱动 -->
- <property name="driverClass" value="${c3p0.driverClass}" />
- <!-- 数据库连接url -->
- <property name="jdbcUrl" value="${c3p0.jdbcUrl}" />
- <!-- 数据库用户 -->
- <property name="user" value="${c3p0.user}" />
- <!-- 数据库密码 -->
- <property name="password" value="${c3p0.password}" />
- <!-- 初始化时获取连接数 -->
- <property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
- <!-- 连接池中保留的最小连接数 -->
- <property name="minPoolSize" value="${c3p0.minPoolSize}" />
- <!-- 连接池中保留的最大连接数 -->
- <property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
- </bean>
- <!-- Proxool数据源配置 -->
- <bean id="dataSource_proxool" class="org.logicalcobwebs.proxool.ProxoolDataSource">
- <!-- 别名 -->
- <property name="alias" value="${proxool.alias}" />
- <!-- 数据库驱动 -->
- <property name="driver" value="${proxool.driver}" />
- <!-- 数据库连接url -->
- <property name="driverUrl" value="${proxool.driverUrl}" />
- <!-- 数据库用户 -->
- <property name="user" value="${proxool.user}" />
- <!-- 数据库密码 -->
- <property name="password" value="${proxool.password}" />
- <!-- 最少保持的空闲连接数 -->
- <property name="prototypeCount" value="${proxool.prototypeCount}" />
- <!-- 最大连接数 -->
- <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}" />
- <!-- 最小连接数 -->
- <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}" />
- </bean>
- <!-- Druid数据源配置 -->
- <bean id="dataSource_druid" class="com.alibaba.druid.pool.DruidDataSource"
- init-method="init" destroy-method="close">
- <!-- 数据库连接url -->
- <property name="url" value="${druid.url}" />
- <!-- 数据库用户 -->
- <property name="username" value="${druid.username}" />
- <!-- 数据库密码 -->
- <property name="password" value="${druid.password}" />
- <!-- 配置连接池初始化大小 -->
- <property name="initialSize" value="${druid.initialSize}" />
- <!-- 最小空闲连接数 -->
- <property name="minIdle" value="${druid.minIdle}" />
- <!-- 最大连接数 -->
- <property name="maxActive" value="${druid.maxActive}" />
- <!-- 获取连接等待超时的时间,单位:毫秒 -->
- <property name="maxWait" value="${druid.maxWait}" />
- </bean>
- </beans>
6.配置Hibernate与Spring集成,新建Spring配置文件applicationContext-hibernate.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:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- <!-- c3p0 sessionFactory配置,注意是版本为Hibernate4 -->
- <bean id="sessionFactory_c3p0"
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
- <!-- 将c3p0的数据源注入给hibernate使用 -->
- <property name="dataSource" ref="dataSource_c3p0" />
- <property name="mappingResources">
- <list>
- <value>com/test/jdbc/model/User.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">${hibernate.dialect}</prop>
- <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
- <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
- <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
- <prop key="hibernate.connection.characterEncoding">${hibernate.connection.characterEncoding}</prop>
- <prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
- <prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
- <prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop>
- <prop key="hibernate.cglib.use_reflection_optimizer">${hibernate.cglib.use_reflection_optimizer}</prop>
- </props>
- </property>
- </bean>
- <!-- Druid sessionFactory配置,注意是版本为Hibernate4 -->
- <bean id="sessionFactory_druid"
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
- <!-- 将c3p0的数据源注入给hibernate使用 -->
- <property name="dataSource" ref="dataSource_druid" />
- <property name="mappingResources">
- <list>
- <value>com/test/jdbc/model/User.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">${hibernate.dialect}</prop>
- <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
- <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
- <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
- <prop key="hibernate.connection.characterEncoding">${hibernate.connection.characterEncoding}</prop>
- <prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
- <prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
- <prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop>
- <prop key="hibernate.cglib.use_reflection_optimizer">${hibernate.cglib.use_reflection_optimizer}</prop>
- </props>
- </property>
- </bean>
- <!-- Proxool sessionFactory配置,注意是版本为Hibernate4 -->
- <bean id="sessionFactory_proxool"
- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
- <!-- 将c3p0的数据源注入给hibernate使用 -->
- <property name="dataSource" ref="dataSource_proxool" />
- <property name="mappingResources">
- <list>
- <value>com/test/jdbc/model/User.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">${hibernate.dialect}</prop>
- <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
- <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
- <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
- <prop key="hibernate.connection.characterEncoding">${hibernate.connection.characterEncoding}</prop>
- <prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
- <prop key="hibernate.connection.release_mode">${hibernate.connection.release_mode}</prop>
- <prop key="hibernate.autoReconnect">${hibernate.autoReconnect}</prop>
- <prop key="hibernate.cglib.use_reflection_optimizer">${hibernate.cglib.use_reflection_optimizer}</prop>
- </props>
- </property>
- </bean>
- </beans>
7.实现我们之前定义的三个DAO接口,实现类代码比较简单我拿DruidDAOImpl为例,其他类代码相同:
- package com.test.jdbc.dao.impl;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import com.test.jdbc.dao.DruidDAO;
- import com.test.jdbc.model.User;
- /**
- * DruidDAO实现
- * @author g21121
- *
- */
- public class DruidDAOImpl extends HibernateDaoSupport implements DruidDAO {
- /**
- * 获取用户信息
- */
- public Object getUsrInfo(Integer usrId) {
- return getHibernateTemplate().get(User.class, usrId);
- }
- }
8.新建spring配置文件applicationContext-dao.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" xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
- <!-- 将c3p0作为数据源的sessionFactory注入 -->
- <bean class="com.test.jdbc.dao.impl.C3P0DAOImpl">
- <property name="sessionFactory" ref="sessionFactory_c3p0" />
- </bean>
- <!-- 将Druid作为数据源的sessionFactory注入 -->
- <bean class="com.test.jdbc.dao.impl.DruidDAOImpl">
- <property name="sessionFactory" ref="sessionFactory_druid" />
- </bean>
- <!-- 将Proxool作为数据源的sessionFactory注入 -->
- <bean class="com.test.jdbc.dao.impl.ProxoolDAOImpl">
- <property name="sessionFactory" ref="sessionFactory_proxool" />
- </bean>
- </beans>
这里我们将之前配置的三个数据源注入到了三个不同命名的sessionFactory,然后将三个sessionFactory分别注入到各自的DAO实现类中,这样就实现了利用不同的数据源来访问数据库。
9.新建一个测试用Servlet,代码如下:
- package com.test.jdbc;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import com.test.jdbc.dao.C3P0DAO;
- import com.test.jdbc.dao.DruidDAO;
- import com.test.jdbc.dao.ProxoolDAO;
- /**
- * 测试Servlet
- * @author g21121
- *
- */
- public class UserServlet extends HttpServlet {
- /**
- * 此处利用Spring注解自动注入属性
- */
- @Autowired
- private C3P0DAO c3P0DAO;
- @Autowired
- private DruidDAO druidDAO;
- @Autowired
- private ProxoolDAO proxoolDAO;
- /**
- * 处理Get请求
- */
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
- out
- .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
- out.println("<HTML>");
- out.println(" <HEAD><TITLE>User Servlet</TITLE></HEAD>");
- out.println(" <BODY>");
- out.println("Druid:"+druidDAO.getUsrInfo(1));
- out.println("c3p0:"+c3P0DAO.getUsrInfo(1));
- out.println("Proxool:"+proxoolDAO.getUsrInfo(1));
- out.println(" </BODY>");
- out.println("</HTML>");
- out.flush();
- out.close();
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doGet(request, response);
- }
- public UserServlet() {
- super();
- }
- }
这里采用注解方式注入,可以在spring文件中添加以下内容来支持注解注入:
相关推荐
微信视频号大风口项目,多赛道选择,可矩阵,玩法简单轻松上手.mp4
电子科技大学图书馆微信小程序_中国电子科技大学
2023-04-06-项目笔记-第三百七十二阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.370局变量的作用域_370- 2025-01-08
期末课设-Python和Django实现音乐推荐系统(含源码+课设报告+答辩PPT).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载
FlexiFed实验初学者学生复制品_ FlexiFed留级生.zip
sTM32 ADC采集滤波算法,卡尔曼 中位值 同步对比输出源程序,芯片采用STM32f103c8t6.算法采用卡尔曼滤波算法中位值滤波算法, 波形输出正常采集的卡尔曼 中位值三个波形输出,程序注释详细。
详细介绍及样例数据:https://blog.csdn.net/T0620514/article/details/145019667
三相两电平逆变器模型预测控制(MPC)simulink仿真,内有坐标变和MPC代码,可修改电流参考值,~~可用作电力电子方向入门学习
25混合A星算法路径规划Hybrid-Astar 以车辆的运动学模型为节点,以当前点到终点的Astar距离和RS距离两者最大的距离作为H(n)函数的估计代价,使用matlab实现(2016a以上版本)
考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化 关键词:碳交易 电制氢 阶梯式碳交易 综合能源系统 热电优化 参考文档:《考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化》基本复现 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一个考虑阶梯式碳交易机制的电热综合能源系统优化调度研究,考虑综合能源系统参与碳交易市场,引入引入阶梯式碳交易机制引导IES控制碳排放,接着细化电转气(P2G)的两阶段运行过程,引入电解槽、甲烷反应器、氢燃料电池(HFC)替传统的P2G,研究氢能的多方面效益;最后提出热电比可调的热电联产、HFC运行策略,进一步提高IES的低碳性与经济性。 目标函数为以购能成本、碳排放成本、弃风成本最小,将原问题转化为混合整数线性问题,运用CPLEX商业求解器进行求解。
并离网逆变器仿真模型 逆变器PQ控制,Vf控制,无功能量发生器SVG,有源电力滤波器APF仿真模型
springboot176基于Spring Boot的装饰工程管理系统,含有完整的源码和报告文档
一、项目简介 本项目是一套基于SSM框架实现的生活缴费系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值 二、技术实现 jdk版本:1.8 及以上 ide工具:IDEA或者eclipse 数据库: mysql5.5及以上 后端:spring+springmvc+mybatis+maven+mysql 前端:vue,css,js 三、系统功能 系统角色主要包括:管理员、用户 系统主要功能包括: 用户登录 用户注册 首页 个人中心 修改密码 个人信息 用户管理 电表管理 电表缴费管理:查看缴费详情,缴费 ETC管理 ETC缴费管理 供暖管理 供暖缴费管理 固话管理 固话缴费管理 宽带管理 宽带缴费管理 燃气表管理 燃气表缴费管理 油卡管理 油卡缴费管理 水表管理 水表缴费管理 帮助中心类型管理 油卡所属公司管理 客服管理 轮播图管理等功能
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
多智能体、一致性、时滞 含通信时滞和输入时滞的多智能体一致性仿真 简单的多智能体一致性性仿真图,包含状态轨迹图和控制输入图。 适用于初学者。
内容概要:本文介绍了一种新的智能对比度增强技术——动态直方图均衡化(DHE)。该方法通过对输入图像的直方图进行分割并分别进行直方图均衡化来克服传统全局直方图均衡化(GHE)和其他方法存在的局限性,从而实现更好的图像细节保护及显著的整体对比度增强效果。具体来说,DHE基于局部极小值将图像直方图划分为子直方图,并重新调整各分区以避免高灰度频率部分对低频区域的影响。同时,在进行均衡时限制每种子直方图的灰度级范围,防止过度拉伸导致细节丢失等问题。 适用人群:从事计算机视觉和图像处理研究的专业人员,特别是关注对比度增强算法及其实际应用的研究学者和技术开发者。 使用场景及目标:可用于医疗影像处理、指纹识别等多个领域的前期预处理步骤;主要目的是改善低对比度图像的质量,提升后续图像识别或其他处理任务的效果。 其他说明:相比于现有技术如全球均值变换、局部直方图均衡以及特定直方图规格化等方式,本提出的DHE能有效避免因增强处理而引起的严重副作用如棋盘效应等,提供更加平滑自然的视觉体验。此外文中还展示了多个实验结果以验证新方法的有效性和优越性能表现。
我的超迷你机械臂机器人项目。_Dummy-Robot
实体单元椭圆主体扭转分析,着重分析扭矩的施加方式
OKR计划表 自我管理
用于微信小程序的ProtoBuffer库