数据库连接配置tomcat_Tomcat到Wildfly:配置数据库连接
數據庫連接配置tomcat
該摘錄摘自《 從Tomcat到WildFly 》一書,您將在其中學習如何將現有的Tomcat體系結構移植到WildFly,包括服務器配置和在其頂部運行的應用程序。
WildFly是完全兼容的Java Enterprise Edition 7容器,與Tomcat相比,它具有更多的可用服務和選項集。
該書還將使您了解遷移期間可能發生的最常見的陷阱和弊端。
目錄
1.簡介 2.將JDBC驅動程序作為模塊安裝 3.在應用程序服務器上注冊JDBC驅動程序 4.配置使用JDBC驅動程序的數據源 5.配置輸出 6.將數據源參數移植到WildFly1.簡介
| 問題 :我在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庫:
讓我們看看如何在WildFly中配置數據源配置。 這可以通過多種方式完成,但是所有可能的解決方案都涉及以下步驟:
我們將看到推薦的方法,該方法需要使用命令行界面,盡管我們將提到一些可用的替代方法。
2.將JDBC驅動程序作為模塊安裝
WildFly基于每個庫本身都是模塊的假設。 因此,我們首先將JDBC驅動程序轉換為模塊。 這可以通過在JBOSS_HOME / modules目錄下創建文件路徑結構來完成。 例如,為了安裝MySQL JDBC驅動程序,請創建如下的目錄結構: JBOSS_HOME / modules / com / mysql / main 。
也可以使用命令行界面通過一個命令來完成上述過程,該命令將創建文件系統結構,將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.api3.在應用程序服務器上注冊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-size和max-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使用minIdle和maxIdle參數分別確定應保留在池中的空閑連接的最小和最大。 我們已經討論過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)該摘錄摘自《 從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
總結
以上是生活随笔為你收集整理的数据库连接配置tomcat_Tomcat到Wildfly:配置数据库连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swagger api文档_带有Swag
- 下一篇: 予怎么组词 予的组词有哪些