在第一篇文章(spring boot开发web api应用实践(一)入门),简单介绍了如何利用spring boot搭建一个web应用,第二篇文章(spring boot开发web api应用实践(二)操作数据库)介绍了如何引入DAO层数据库操作,本篇将介绍如何将spring boot默认的tomcat-jdbc连接池换成proxool连接池。
proxool连接池的初始化,可以单独写个listener来初始化,正好说说spring boot如何初始化servlet、filter和listener等(虽然很简单)。
一、编辑pom.xml文件:
引入proxool的依赖:
<dependency> <groupId>org.logicalcobwebs</groupId> <artifactId>com.springsource.org.logicalcobwebs.proxool</artifactId> <version>0.9.1</version> </dependency>
修改spring-boot-starter-jdbc依赖,排除tomcat-jdbc的连接池引用:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </exclusion> </exclusions> </dependency>
二、编写proxool连接池初始化的listener(ProxoolLoaderListener.java):
package com.zweichxu.springboot.proxool; import java.io.InputStream; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; //import javax.servlet.annotation.WebListener; import javax.servlet.annotation.WebListener; import org.logicalcobwebs.proxool.ProxoolException; import org.logicalcobwebs.proxool.ProxoolFacade; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.InputSource; import com.zweichxu.platform.util.Util; /** * @author huangzw * */ @WebListener public class ProxoolLoaderListener implements ServletContextListener { public static final String PROXOOL_CONFIG_LOCATION = "proxoolConfigLocation"; private static Logger log = LoggerFactory.getLogger(ProxoolLoaderListener.class); @Override public void contextDestroyed(ServletContextEvent event){ // do nothing } @Override public void contextInitialized(ServletContextEvent event){ proxoolLoaderInit(event.getServletContext()); } private void proxoolLoaderInit(ServletContext sc){ String xmlpath = sc.getInitParameter(PROXOOL_CONFIG_LOCATION); log.info("proxoolLoaderInit, the initParam config path: {}", xmlpath); if(xmlpath == null){ xmlpath = "classpath:proxool.xml"; } xmlpath = xmlpath.trim().toLowerCase(); InputStream is = null; try{ if(xmlpath.startsWith("classpath:")){ is = this.getClass().getClassLoader().getResourceAsStream(xmlpath.split(":")[1]); org.logicalcobwebs.proxool.configuration.JAXPConfigurator.configure(new InputSource(is), false); }else{ String appDir = sc.getRealPath("/"); try{ org.logicalcobwebs.proxool.configuration.JAXPConfigurator.configure(appDir + "/" + xmlpath, false); }catch(ProxoolException e){ log.error("loadding proxool config error: {}/{}", appDir, xmlpath, e); is = this.getClass().getClassLoader().getResourceAsStream(xmlpath.split(":")[1]); org.logicalcobwebs.proxool.configuration.JAXPConfigurator.configure(new InputSource(is), false); } } //对连接池增加监控:监控连接的创建与释放、sql的执行时长等 //ProxoolSqlListener类为自定义的继承自org.logicalcobwebs.proxool.ConnectionListenerIF的普通类 String[] aliasArr = ProxoolFacade.getAliases(); ProxoolSqlListener sqlListener = new ProxoolSqlListener(); if (Util.isNotEmpty(aliasArr)){ for (String alias: aliasArr){ if (alias.startsWith("proxool.")){ alias = alias.substring(alias.indexOf('.') + 1); } ProxoolFacade.addConnectionListener(alias, sqlListener); } } }catch(ProxoolException e){ log.error("loadding proxool config error form classpath: {}", xmlpath, e); }finally{ org.apache.commons.io.IOUtils.closeQuietly(is); } } }
注意:该类使用了@WebListener注解,这是Servlet3.0+新增的注解
要想ProxoolLoaderListener.java生效,还需要修改应用启动类(参看spring boot开发web api应用实践(一)入门),增加@ServletComponentScan注解,该注解将自动扫描应用中的@WebFilter、@WebServlet以及@WebListener注解标注的类
package com.zweichxu.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * * @author zweichxu * @date 2017年3月30日 16:40:41 * @version 1.0 */ @SpringBootApplication @ServletComponentScan public class AppMain { public static void main(String[] args){ SpringApplication.run(AppMain.class, args); } }
三、数据源配置
1.在工程的src\main\resources目录下面创建proxool.xml文件,配置proxool的连接池参数
<?xml version="1.0" encoding="UTF-8"?> <!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. --> <something-else-entirely> <proxool> <alias>proxool_dbpool</alias> <driver-url>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false</driver-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <driver-properties> <property name="user" value="root" /> <property name="password" value="root" /> </driver-properties> <!-- 最大连接数 --> <maximum-connection-count>20</maximum-connection-count> <!-- 最小连接数 默认值:5个 --> <minimum-connection-count>5</minimum-connection-count> <!-- 最少保持的空闲连接数 --> <prototype-count>5</prototype-count> <!-- 同时创建新的最大并发连接数 --> <simultaneous-build-throttle>30</simultaneous-build-throttle> <!-- 最大连接生命周期(毫秒数) 默认值:4小时,此处配为15分钟 --> <maximum-connection-lifetime>900000</maximum-connection-lifetime> <!-- 最大活动时间(毫秒数) 默认值:5分钟 --> <maximum-active-time>300000</maximum-active-time> <!-- 自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 --> <house-keeping-sleep-time>30000</house-keeping-sleep-time> <!-- 保持连接的测试SQL语句 --> <house-keeping-test-sql> select now() </house-keeping-test-sql> <test-before-use>true</test-before-use> </proxool> </something-else-entirely>
2.修改application.properties里的数据库配置
注释掉原先的数据源配置,增加spring.datasource.type、spring.datasource.driver-class-name以及spring.datasource.url,其中spring.datasource.type设置为org.springframework.jdbc.datasource.DriverManagerDataSource类,spring.datasource.driver-class-name设置为org.logicalcobwebs.proxool.ProxoolDriver类,spring.datasource.url设置为proxool连接池的别名(proxool.连接池别名alias)
#spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false #spring.datasource.username=root #spring.datasource.password=root #spring.datasource.driver-class-name=com.mysql.jdbc.Driver #spring.datasource.max-idle=20 #spring.datasource.min-idle=5 #spring.datasource.initial-size=5 #spring.datasource.max-wait=10000 #spring.datasource.validation-query=SELECT 1 #spring.datasource.test-on-borrow=false #spring.datasource.test-while-idle=true #spring.datasource.time-between-eviction-runs-millis=18800 #spring.datasource.jdbc-interceptors=ConnectionState;SlowQueryReport(threshold=3) spring.datasource.type=org.springframework.jdbc.datasource.DriverManagerDataSource spring.datasource.driver-class-name=org.logicalcobwebs.proxool.ProxoolDriver spring.datasource.url=proxool.proxool_dbpool
四、启动应用,查看控制台日志,可以看到“Proxool 0.9.1 (23-Aug-2008 11:10) [org.logicalcobwebs.proxool.ProxoolFacade.registerConnectionPool(ProxoolFacade.java:86)] ”的提示。
相关推荐
标题 "Spring+Hibernate+Proxool连接池" 涉及到的是在Java Web开发中,如何使用Spring框架集成Hibernate ORM框架,并结合Proxool作为数据库连接池的技术实践。这通常是为了提高应用性能,有效管理和复用数据库连接,...
Proxool连接池是数据库连接管理的一种解决方案,它允许应用程序高效地管理和复用数据库连接,以提高系统的性能和响应速度。下面将详细讲解Proxool连接池的使用方法及其核心概念。 1. **Proxool简介** Proxool是...
Proxool是一个开源的、轻量级的Java数据库连接池实现,它提供了一种高效、灵活的方式来管理数据库连接。在某些场景下,为了保护敏感信息,如数据库的用户名和密码,我们需要对这些数据进行加密处理。"proxool连接池...
Spring2.5配置proxool连接池
Proxool连接池使用方法 首先, 你要把下载 proxool 的 lib 下面所有的 jar 文件, 放到 WEB-INF/lib 下面, 另外, 把你的 jdbc driver 也放到相同的 lib,
项目实用的proxool连接池配置文件,每个标签都有注释,可以直接拿来使用
在Java开发中,使用Hibernate作为持久层框架时,为了提高数据库操作的性能和资源利用率,通常会引入连接池技术。Proxool是Apache的一个开源项目,它提供了一个轻量级的数据库连接池实现。本篇将详细介绍如何在...
`proxool-cglib.jar`:这个文件包含了CGLIB(Code Generation Library)库,它是Java动态代理和代码生成的工具,常用于AOP(面向切面编程)框架,如Spring,Proxool可能使用它来实现某些功能的动态代理,如连接池的...
Proxool的核心功能是创建一个池化的数据库连接集合,当应用需要连接时,可以从池中获取,使用完毕后归还,而不是每次操作数据库都创建新的连接。这种方式减少了频繁创建和关闭连接的开销,提高了系统资源利用率。...
标题中的"spring+dwr+proxool连接池"指的是一个整合了Spring框架、Direct Web Remoting (DWR)和Proxool数据库连接池技术的应用程序。这个应用可能用于创建一个能够实时交互的Web应用程序,其中Spring提供了依赖注入...
5. **透明性**:对应用程序来说,使用Proxool 连接池几乎无需修改原有代码,因为它的API设计与JDBC接口兼容。 ### Proxool 的基本配置: 在使用Proxool之前,需要进行必要的配置,通常通过XML文件来完成。配置文件...
总结起来,这个案例涵盖了SSH2安全通信、Java注解简化配置、Proxool连接池优化数据库访问,以及SF4J的日志记录,这些都是Java开发中不可或缺的技术组件。通过学习和理解这个案例,开发者可以提升在构建安全、高效、...
-- 连接池的别名 --> <alias>DBPool</alias> - <!-- proxool只能管理由自己产生的连接 --> <driver-url>jdbc:sqlserver://localhost:1433;dataBaseName=books</driver-url> - <!-- JDBC驱动程序 --> ...
**JSP与Proxool连接池的深度解析** 在Java Web开发中,数据库连接管理是一项重要的...在提供的压缩包文件中,`Tomcat连接池文件`可能包含了更具体的配置示例和使用指南,有助于深入理解和实践`JSP`与`Proxool`的整合。
### Proxool连接池配置详解 #### 一、概述 Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,...
在Java的Web开发中,数据库连接管理是一个至关重要的环节,特别是在处理高并发场景时,合理的数据库连接池配置能显著提高系统性能。本篇文章将详细讲解如何配置Hibernate框架以使用Proxool连接池。 首先,我们需要...
Proxool连接池是数据库连接管理的一个开源工具,它提供了一种高效且灵活的方式来管理和复用数据库连接,以提升应用程序的性能和响应速度。在Java应用程序中,尤其是在高并发环境下,数据库连接池扮演着至关重要的...