tomcat/resin使用全局数据库连接池资源

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
我比较倾向于直接在 web应用中配置 数据库连接,例如使用struts或者是Hibernate的连接池,这样的好处是无需了解不同的应用服务器在配置数据源的差别,应用实施的时候比较简单。
  所以我最近的一些项目都是采用这种架构,但是这种方式有一些不足的就是当应用服务器配置了多个应用,而这些应用使用同一个数据库,这就会导致不必要的资源浪费,也就是同一个应用服务器中存在针对同一个数据库的多个连接池。
  也就是说我们希望每个应用服务器只有一个连接池的实例,在这个应用服务器上运行的所有项目都可以使用这个连接池,下面介绍这种方式在Tomcat和Resin下的配置。
  Tomcat使用JNDI Resource来配置各种资源,包括数据库连接池。这些Resource有两种运行范围,第一个就是Context级别,也就是说Context特有的Resource,该Resource只能被其所属的Context访问,显然这不是我们所要的。
  另外一种就是定义全局命名资源,然后在Context中进行引用,下面是一个配置的例子( server.xml):
<Server port="8005" shutdown="SHUTDOWN">
<GlobalNamingResources>
<!-- 全局有效的JDBC资源 -->
<Resource name="jdbc/dlog" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" defaultTransactionIsolation="1" defaultAutoCommit="false"
poolPreparedStatements="true" maxOpenPreparedStatements="1000" initialSize="1"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
</GlobalNamingResources>
<!-- Define the Tomcat Stand-Alone Service -->
<Service name="Catalina">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps">
<Context path="" docBase="C:/PROJECTS/JAVA/DLOG4J_V3/webapp" reloadable="true">
<!-- 在Context引用全局JDBC资源 -->
<ResourceLink name="jdbc/dlog" global="jdbc/dlog"/>
</Context>
</Host>
</Engine>
</Service>
</Server>

 相比较Tomcat来说,Resin更为简单,在Resin2中连接池的配置如下
<caucho.com>
<http-server>
<http port='80'/>
<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
<resource-ref res-ref-name="java:/comp/env/jdbc/dlog" res-type="javax.sql.DataSource">
<init-param driver-name="com.mysql.jdbc.Driver"/>
<init-param url="jdbc:mysql://localhost:3306/dlogcn?autoReconnect=true"/>
<init-param user="root"/>
<init-param password="moabc"/>
<init-param maxConnections="100"/>
</resource-ref>
<!-- default host if no other host matches -->
<host id=''>
<web-app id='' app-dir='C:/PROJECTS/JAVA/DLOG4J_V3/webapp' />
</host>
</http-server>
</caucho.com>
  你可以把这段配置放在web-app中,则该连接池只有对应的webapp才能访问,放在<host>则,host中的所有web-app都可以访问,放在<http-server>中,则整个resin的所有webapp都可以访问。
  (实验过程中发现resin2的文档有误,如果res-ref-name写为jdbc/dlog,则webapp怎么都找不到这个资源,改成java:/comp/env/jdbc/dlog即可。)
  接下来我们就可以在应用中使用如下代码来获取连接池的DataSource实例
  Context initContext = new InitialContext();
  Context envContext  = (Context)initContext.lookup("java:/comp/env");
  DataSource ds = (DataSource)envContext.lookup("jdbc/dlog");
  其他的应用服务器的配置可以按照这个思路参考它的手册进行配置。应该说不管是采用何种方式,性能上不会有太大的区别,如何选择就在于你整个服务器的项目结构。
  另外从上面Tomcat和Resin的配置来看,尽管Resin的配置要简单于Tomcat,但是灵活性和扩展性就相对要差一些   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 Java 应用服务中间件
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
477 0
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
|
3月前
|
数据库 OceanBase
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求
OceanBase数据库是一个分布式集群产品,在部署时对硬件资源有特定的需求【1月更文挑战第12天】【1月更文挑战第56篇】
29 2
|
8月前
|
缓存 数据库 OceanBase
OceanBase数据库资源规格规划
OceanBase数据库资源规格规划
93 1
|
9月前
|
IDE 数据库 开发工具
VS2019连接数据库:未能找到任何适合于指定的区域性或非特定区域性的资源。
VS2019连接数据库:未能找到任何适合于指定的区域性或非特定区域性的资源。
77 0
|
10月前
|
数据库
|
11月前
|
关系型数据库 Serverless 数据库
《Serverless数据库技术研究报告》——三、 Serverless数据库技术趋势——(二)计算资源标准化,统一底层资源
《Serverless数据库技术研究报告》——三、 Serverless数据库技术趋势——(二)计算资源标准化,统一底层资源
|
11月前
|
缓存 资源调度 Serverless
《Serverless数据库技术研究报告》——三、 Serverless数据库技术趋势——(五)资源快速调度,提升资源利用率
《Serverless数据库技术研究报告》——三、 Serverless数据库技术趋势——(五)资源快速调度,提升资源利用率
|
弹性计算 安全 关系型数据库
阿里云部署javaWeb项目依赖软件(jdk、tomcat、Mariadb数据库)的安装
阿里云部署javaWeb项目(jdk、tomcat、Mariadb数据库)的安装 🍅 程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
303 0
阿里云部署javaWeb项目依赖软件(jdk、tomcat、Mariadb数据库)的安装
|
前端开发 Java 关系型数据库
终于让Web前端和Tomcat(Java服务器)和MySQL(数据库)连在一起了
终于让Web前端和Tomcat(Java服务器)和MySQL(数据库)连在一起了
328 0
终于让Web前端和Tomcat(Java服务器)和MySQL(数据库)连在一起了
|
弹性计算 关系型数据库 数据库
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库
本文介绍如何通过ROS部署ECS+RDS+SqlServer资源,以及如何通过PowerShell操作SqlServer数据库。 注意:附录模板和截图中的commandtext部分仅为演示作用,请根据需求修改后使用。
114 0
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库