数据库连接配置tomcat_Tomcat到Wildfly:配置数据库连接

数据库连接配置tomcat

该摘录摘自《 从Tomcat到WildFly 》一书,您将在其中学习如何将现有的Tomcat体系结构移植到WildFly,包括服务器配置和在其顶部运行的应用程序。

WildFly是完全兼容的Java Enterprise Edition 7容器,与Tomcat相比,它具有更多的可用服务和选项集。

该书还将使您了解迁移期间可能发生的最常见的陷阱和弊端。

目录

1.简介 2.将JDBC驱动程序作为模块安装 3.在应用程序服务器上注册JDBC驱动程序 4.配置使用JDBC驱动程序的数据源 5.配置输出 6.将数据源参数移植到WildFly
6.1。 最小和最大池大小 6.2。 处理空闲连接 6.3。 在获取连接时设置超时 6.4。 处理连接泄漏 6.5。 配置语句缓存

1.简介

问题 :我在Tomcat上有一个数据源配置,该配置用于从池中收集数据库连接。 我需要在WildFly上移植我的配置。

在Apache Tomcat上,数据源配置可以包含在server.xml文件的global部分中。 例如,这是流行MySQL数据库的配置:

<Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000"username="tomcat" password="tomcat"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydatabase"/>

另外,对于特定于应用程序的内容,应在WEB-INF / web.xml上放置以下几行。

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"><description>Tomcat DB</description><resource-ref><description>Database Connection</description><res-ref-name>jdbc/mysqlds</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref>
</web-app>

为了能够加载MySQL JDBC驱动程序,您需要在CATALINA_HOME / lib文件夹中包含JAR库:

image001

让我们看看如何在WildFly中配置数据源配置。 这可以通过多种方式完成,但是所有可能的解决方案都涉及以下步骤:

  1. 将JDBC驱动程序安装为模块
  2. 在应用程序服务器上注册JDBC驱动程序
  3. 配置使用JDBC驱动程序的数据源

我们将看到推荐的方法,该方法需要使用命令行界面,尽管我们将提到一些可用的替代方法。

2.将JDBC驱动程序作为模块安装

WildFly基于每个库本身都是模块的假设。 因此,我们首先将JDBC驱动程序转换为模块。 这可以通过在JBOSS_HOME / modules目录下创建文件路径结构来完成。 例如,为了安装MySQL JDBC驱动程序,请创建如下的目录结构: JBOSS_HOME / modules / com / mysql / main

  1. 将JDBC驱动程序JAR复制到子目录中。
  2. 子目录中,创建一个包含以下定义的module.xml文件(只需根据您的情况调整JDBC驱动程序名称):
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql"><resources><resource-root path="mysql-connector-java-5.1.24-bin.jar"/></resources><dependencies><module name="javax.api"/><module name="javax.transaction.api"/></dependencies></module>

也可以使用命令行界面通过一个命令来完成上述过程,该命令将创建文件系统结构,将JDBC驱动程序复制到主文件夹中,并根据提供给CLI的选项来配置module.xml

假设MySQL JDBC驱动程序在/ home / wildfly文件夹中可用,请按以下步骤操作

module add --name=com.mysql --resources=/home/wildfly/mysql-connector-java-5.1.24-bin.jar --dependencies=javax.api,javax.transaction.api

3.在应用程序服务器上注册JDBC驱动程序

现在您MySQL可以作为应用服务器上的模块使用,我们将其注册为JDBC驱动程序。 使用CLI时,这是一步操作:

/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql)

现在,您可以检查您MySQL驱动程序是否已通过可用的JDBC驱动程序注册。 这是实现它的方法:

[standalone@localhost:9990 /] /subsystem=datasources:installed-drivers-list
{. . . . . . . . . . ."driver-name" => "mysql","deployment-name" => undefined,"driver-module-name" => "com.mysql","module-slot" => "main","driver-datasource-class-name" => "","driver-xa-datasource-class-name" => "","driver-class-name" => "com.mysql.jdbc.Driver","driver-major-version" => 5,"driver-minor-version" => 1,"jdbc-compliant" => false        }]
}

4.配置使用JDBC驱动程序的数据源

最后一步实际上将创建一个供您的应用程序使用的数据源。 为此,我们将使用CLI 数据源快捷方式命令,该命令要求输入池名称,JNDI绑定,JDBC连接参数以及最后的安全设置(用户名和密码)作为输入:

data-source add --jndi-name=java:/jdbc/mysqlds --name=MySQLPool --connection-url=jdbc:mysql://localhost:3306/mydatabase --driver-name=mysql --user-name=jboss --password=jboss
请注意,数据源的JNDI名称必须使用前缀java:/才能被接受为有效。 因此,tomcat中使用的绑定(“ jdbc / mysqlds”)已更改为“ java:/ jdbc / mysqlds”。

5.配置输出

如果已执行上述步骤,则“数据源”部分中应具有以下数据源配置:

<datasources><datasource jndi-name="java:/jdbc/mysqlds" pool-name="MySQLPool" enabled="true"><connection-url>jdbc:mysql://localhost:3306/mydatabase</connection-url><driver>mysql</driver><security><user-name>jboss</user-name><password>jboss</password></security></datasource><drivers><driver name="mysql" module="com.mysql"/></drivers></datasources>

6.将数据源参数移植到WildFly

在应用程序服务器上配置数据源是在WildFly上移植应用程序的第一个里程碑。 但是,可能您正在使用某些特定的连接池设置,这需要在应用程序服务器上进行移植。 其中一些参数在WildFly上具有相同的匹配项,其他一些则基于不同的合并策略。 因此,在将它们移植到应用程序服务器时,您需要调整配置。 让我们看看如何将最常见的池选项移植到WildFly:

最小和最大池大小

选择正确的池大小是应用程序性能的必要条件。 Tomcat的最小池大小由minIdle参数确定,最大池大小通过maxActive配置。 另一方面,池的初始大小是使用initialSize参数配置的。 这是一个示例配置:

<Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource"maxActive="100" minIdle="30" initialSize=”15” username="tomcat" password="tomcat"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydatabase"/>

移植到WildFly时,参数分别命名为min-pool-sizemax-pool-size,并且可以使用任何管理工具进行设置。 以下是更改默认数据源的方式:

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=min-pool-size,value=30)
/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=max-pool-size,value=100)

另一方面,可以使用以下方法设置初始池大小

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=initial-pool-size,value=5)

另外请注意,WildFly还有一个名为pool- prefill的属性,该属性确定是否尝试将连接池预填充到最小连接数:

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=pool-prefill,value=true)

处理空闲连接

已创建但应用程序未使用的连接被分类为空闲连接。 WildFly和Tomcat具有处理空闲连接的不同方法。 更详细地,Tomcat使用minIdlemaxIdle参数分别确定应保留在池中的空闲连接的最小和最大。 我们已经讨论过minIdle参数,可以将其设置为WildFly min-pool-size 。 另一方面,在WildFly上,maxIdle参数没有相应的匹配项。 最接近的匹配是第i DLE-超时分钟 ,这之后,未使用的连接被关闭分钟(缺省15分钟)的数量。 您实际上可以将这个参数更改为10分钟,如下所示:

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=idle-timeout-minutes,value=10)

在获取连接时设置超时

如果池中的所有连接都忙,则您的应用程序显然必须等待释放连接。 可以想象,这种情况存在超时,由Tomcat中的maxWait参数处理。 在以下示例中,超时设置为30秒:

<Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource"maxWait="30000" . . . . />

WildFly有一个对应的参数,名为blocking-timeout-wait-millis ; 在以下CLI命令中,我们将其设置为1秒(1000毫秒):

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=blocking-timeout-wait-millis,value=1000)

处理连接泄漏

连接泄漏在Tomcat中被称为“ 遗弃的连接 ”,它是在创建Statement或PreparedStatement或CallableStatement时丢失的,而您却错过了关闭连接或语句的机会(或更常见的是,您不包括Connection) 最后 关闭 )。

您可以通过启用removeAbandoned参数来处理Tomcat中的废弃连接。 如果设置为true,则如果连接的使用时间未超过removeAbandonedTimeout (默认为300秒),则该连接将被视为可以删除。

<Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource"removeAbandoned ="true"  removeAbandonedTimeout=”300”. . . . />

在WildFly方面,没有任何针对突然关闭合格(已废弃)的连接的调整。 另一方面,有一些有用的参数可用于检测或跟踪问题。

如果您担心语句(和PreparedStatements),则可以使用track-statements参数,该参数在连接返回到池时检查未关闭的语句,并在语句关闭/返回到准备好的语句缓存时关闭结果集。 有效值为:

  • false:不跟踪语句和结果
  • true:跟踪语句和结果集并在未关闭时发出警告
  • nowarn:跟踪语句,但不警告它们未关闭

这是设置此参数以使用NOWARN的方法:

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=track-statements,value=NOWARN)

另外,您可以启用缓存层的调试 ,这是在WildFly中由连接器子系统(JCA)的一部分“ 缓存连接管理”来处理的。

/subsystem=jca/cached-connection-manager=cached-connection-manager/:write-attribute(name=debug,value=true)

您还应该启用error参数,该参数将使您检测与缓存的连接管理器有关的任何错误:

/subsystem=jca/cached-connection-manager=cached-connection-manager/:write-attribute(name=error,value=true)

启用日志记录后,对于从池中获取的每个连接,您将看到以下信息:

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: getConnection(null, null) [1/100]

另一方面,当连接返回到池时,您将阅读以下消息:

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: returnConnection(607e334, false) [1/99]

如果要调试应用程序发出的语句,则可以轻松找出连接泄漏的位置。

最后,如果您想了解有关JDBC级别的详细信息,可以通过将名为spy的属性设置为true来记录JDBC语句:

/subsystem=datasources/data-source=MySQLPool/:write-attribute(name=spy,value=true)

为了调试服务器日志中的JDBC语句,您需要创建一个logger元素,该元素跟踪jboss.jdbc.spy包。 您可以按照以下步骤进行操作:

/subsystem=logging/logger=jboss.jdbc.spy/:add(level=TRACE)

重新加载服务器配置并检查服务器日志,这些日志默认包含在JBOSS_HOME / standalone / log / server.log (独立模式)或JBOSS_HOME / domain / [服务器名称] /log/server.log (域模式)中。

配置语句缓存

“ Prepared Statement”是数据库上的预编译对象,其访问计划将被重用以比正常查询更快地执行更多查询。 当需要在不同请求中发出相同的语句时,应用程序服务器本身也可以缓存准备好的语句。 Tomcat的jdbc-pool功能可以使用JDBC拦截器来管理Prepared Statement缓存,该拦截器在创建池时被设置为JDBC属性。 例如:

<Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource"jdbcInterceptors="StatementCache(prepared=true,callable=false,max=50)"
</Resource>

在WildFly上运行时,您可以通过编写prepare -statements-cache-size属性来设置PreparedStatement缓存大小,如以下示例所示,该属性将其大小设置为25条语句:

/subsystem=datasources/data-source=ExampleDS/:write-attribute(name=prepared-statements-cache-size,value=25)

http://www.itbuzzpress.com/ 该摘录摘自《 从Tomcat到WildFly 》一书,您将在其中学习如何将现有的Tomcat体系结构移植到WildFly,包括服务器配置和在其顶部运行的应用程序。 您还将了解迁移过程中可能发生的最常见的陷阱和弊端。

Apache Tomcat是Apache软件基金会自1999年以来作为开源项目开发的流行Web服务器和Servlet容器。今天,它是在简单站点和大型网络中运行Web应用程序的最广泛使用的平台之一。

尽管如此,Apache Tomcat上可用的库数量通常仅够用于仅需HTTP协议和有限数量的服务的非常简单的体系结构。 这自然导致了通过新扩展或模块(例如Spring,Hibernate,JDO或Struts)增加其功能的趋势。 尽管本书的目的并不是要对这些体系结构产生负面影响,但我们确实相信,对其他解决方案的比较知识可以帮助您为项目选择最佳方案。

翻译自: https://www.javacodegeeks.com/2014/11/tomcat-wildfly-configuring-database-connectivity.html

数据库连接配置tomcat

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

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

相关文章

左值、右值、左值引用、右值引用

【导读】&#xff1a;本文主要详细介绍了左值、右值、左值引用、右值引用以及move、完美转发。左值和右值左值&#xff08;left-values&#xff09;&#xff0c;缩写&#xff1a;lvalues右值&#xff08;right-values&#xff09;&#xff0c;缩写&#xff1a;rvalues直接上官网…

itex将html转成pdf加水印,itext操作PDF文件添加水印

功能描述&#xff1a;添加图片和文字水印/**** 【功能描述&#xff1a;添加图片和文字水印】 【功能详细描述&#xff1a;功能详细描述】* param srcFile 待加水印文件* param destFile 加水印后存放地址* param text 加水印的文本内容* param textWidth 文字横坐标* param tex…

wxpython界面切换_wxpython实现按钮切换界面的方法

本文实例为大家分享了wxpython按钮切换界面的具体实现代码&#xff0c;供大家参考&#xff0c;具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u登陆,size(370,280),stylewx.MINIMIZE_BOX| wx.…

jboss 4.3.0_JBoss BPM Suite 6.0.3版本的5个实用技巧

jboss 4.3.0上周&#xff0c;红帽发布了JBoss BPM Suite的下一个版本&#xff0c;标记为6.0.3 &#xff0c;已订阅的用户可以在其客户门户中使用。 如果您对本发行版中的新增功能感到好奇&#xff0c;请在客户门户网站上在线查看发行说明和其余文档 。 我们正在寻找一些简单的…

C 条件变量使用详解

condition_variable介绍在C 11中&#xff0c;我们可以使用条件变量&#xff08;condition_variable&#xff09;实现多个线程间的同步操作&#xff1b;当条件不满足时&#xff0c;相关线程被一直阻塞&#xff0c;直到某种条件出现&#xff0c;这些线程才会被唤醒。其主要成员函…

HTML5新布局元素布局,HTML5新的布局元素

HTML5相对于HTML4新增了一些布局元素新增布局标签的优点&#xff1a;⒈更加注重文档的结构内容而不是以什么形式展现出来⒉对人的友好&#xff0c;更加语义化&#xff0c;增加代码的可读性⒊对计算机友好&#xff0c;浏览器更容易解析新增布局标签的内容&#xff1a;新增的布局…

pannel添加的子窗体很大_超简单的地瓜粉焖子做法全解,零失败

总以为做焖子是一项很大的工程&#xff0c;如果朋友知道你会做焖子定会用惊叹的语气崇拜你&#xff0c;想多一项厨艺吗&#xff0c;想让家人吃上自己亲手做的焖子吗&#xff1f;使用艺琳农场的地瓜粉一定让你出手不凡的&#xff0c;超简单&#xff0c;往下看哦新手为了担心霍霍…

swagger api文档_带有Swagger的Spring Rest API –创建文档

swagger api文档使REST API易于使用的真正关键是好的文档。 但是&#xff0c;即使您的文档做得很好&#xff0c;您也需要设置公司流程的权利以正确&#xff0c;及时地发布它。 确保利益相关者按时收到是一回事&#xff0c;但是您也要负责API和文档中的更新。 自动完成此过程可轻…

多线程队列的算法优化

【导读】&#xff1a;本文主要讲解多线程队列的优化。多线程队列&#xff08;Concurrent Queue&#xff09;的使用场合非常多&#xff0c;高性能服务器中的消息队列&#xff0c;并行算法中的Work Stealing等都离不开它。对于一个队列来说有两个最主要的动作&#xff1a;添加&am…

购买台式计算机方案,购买电脑的注意事项有哪些?

随着电脑的应用与普及&#xff0c;电脑已经逐渐成为人们学习、工作、生活中不可缺少的工具。同时&#xff0c;电脑的价格在逐渐下降&#xff0c;很多用户开始准备选购自己的电脑。选购电脑要考虑用户的需求、价格承受能力、商家服务质量等。1、明确用户需求购买电脑之前&#x…

linux 文件大小_整理 | Linux下列出目录内容命令

IT服务圈儿有温度、有态度的IT自媒体平台来源&#xff1a;良许Linux(ID&#xff1a;liangxuxiansheng)在 Linux 中&#xff0c;有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时&#xff0c;大家第一时间想到的是 ls 命…

mysql caching_Spring Caching抽象和Google Guava Cache

mysql cachingSpring为缓存昂贵的方法调用提供了强大的现成支持。 这里详细介绍了缓存抽象。 我的目标是使用Spring Guava Cache涵盖Spring现在提供的4.0版本的较新的缓存实现之一。 简而言之&#xff0c;请考虑一种具有几种慢速方法的服务&#xff1a; public class DummyB…

多线程程序中操作的原子性

0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念&#xff0c;它常常用来实现一些同步机制&#xff0c;同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题&#xff1a;1. 多线程程序中对变量的读写操作是否是原子的&#xff1f;2. 多…

2018秋计算机基础在线作业华师,18秋华师《计算机基础》在线作业3(标准答案).doc...

【奥鹏】[华中师范大学]华师《计算机基础》在线作业试卷总分:100 得分:100第1题,控制面板可实现__________。A、对计算机全面控制操作B、对硬件驱动、软件设置及Windows外观设置C、计算机的关闭操作D、删除计算机中的任意文件正确答案:B第2题,页眉和页脚的建立方法相似&#xf…

.net mvc actionresult 返回字符串_ASP.NET Core中的Action的返回值类型

在Asp.net Core之前所有的Action返回值都是ActionResult&#xff0c;Json(),File()等方法返回的都是ActionResult的子类。并且Core把MVC跟WebApi合并之后Action的返回值体系也有了很大的变化。ActionResult类ActionResult类是最常用的返回值类型。基本沿用了之前Asp.net MVC的那…

.jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API

.jdeveloper介绍 最新版本的JDeveloper 12c&#xff08;12.1.3.0&#xff09;和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上&#xff0c;从12.1.2.0版本开始就支持WebSocket协议&#xff08;RFC 645…

为什么程序员需要关心顺序一致性,而不是 Cache 一致性?

本文所讨论的计算机模型是Shared Memory Multiprocessor&#xff0c;即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C 或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子&#xff0c;目的是…

南科大计算机科学与技术专业如何,广州大学、深圳大学、汕头大学、南方科技大学,如何排名?...

广州大学、深圳大学、汕头大学和南方科技大学都是广东省内的一流大学。为了方便各位广东考生在填报志愿的时候有一个更好的了解&#xff0c;顺哥收集整理了这4所学校的一些信息。希望能帮助到大家。深圳大学2021年校友会排名省内第4&#xff0c;全国第57&#xff0c;中国一流大…

canoco5冗余分析步骤_打造高性能的大数据分析平台

大数据时代&#xff0c;大数据的应用与挖掘&#xff0c;大数据的分析和决策&#xff0c;大数据在经济社会的运行轨道上发挥着愈来愈重要的作用。对于大数据分析&#xff0c;现在好多互联网金融公司和传统的商业银行、证券基金公司都非常看重。个个都想在大数据分析中获得重要信…

C 迭代器iterator的实现原理

在经典的设计模式中&#xff0c;有一种迭代器模式&#xff0c;定义为&#xff1a;提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。迭代器的主要优点如下&#xff1a;访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器…