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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:
我比较倾向于直接在 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/
   
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 Java 应用服务中间件
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
722 0
SpringBoot 存储图片 tomcat服务器存图片 数据库图片路径
|
4月前
|
存储 监控 安全
阿里云数据库(ADB)的多租户秘籍:资源隔离的魔法如何施展?
【8月更文挑战第27天】多租户系统在云计算与大数据领域日益重要,它让不同用户或组织能在共享基础设施上独立运行应用和服务,同时确保资源隔离与安全。ADB(如阿里云数据库)通过资源组及标签实现高效多租户隔离。资源组作为一种软隔离策略,允许为不同租户分配独立的计算和存储资源,并设置资源上限;资源标签则支持更细粒度的硬隔离,可为每个数据库表或查询指定特定标签,确保资源有效分配。此外,ADB还提供了资源监控与告警功能,帮助管理员实时监控并调整资源分配,避免性能瓶颈。这种灵活且高效的资源隔离方案为多租户环境下的数据处理提供了强大支持。
166 0
|
2月前
|
应用服务中间件 数据库
Tomcat 的数据库连接池设置与应用
Tomcat 的数据库连接池设置与应用
45 3
|
7月前
|
关系型数据库 MySQL 应用服务中间件
tomcat 搭建博客 及破解数据库密码
tomcat 搭建博客 及破解数据库密码
|
4月前
|
缓存 Java 应用服务中间件
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
在Linux中,Tomcat和Resin有什么区别,工作中怎么选择?
|
4月前
|
数据库连接 数据库
实现加载驱动、得到数据库对象、关闭资源的代码复用,将代码提取到相应的工具包里边。优化程序
该博客文章展示了如何通过创建工具类`Connectiontools`实现数据库连接、语句执行以及资源关闭的代码复用,以优化程序并提高数据库操作的效率和安全性。
|
3月前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
54 0
|
5月前
|
负载均衡 Oracle 关系型数据库
关系型数据库Oracle 资源共享
【7月更文挑战第10天】
42 1
|
7月前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
5月前
|
存储 SQL 关系型数据库
MySQL数据库学习指南与学习资源推荐
MySQL数据库学习指南与学习资源推荐