最近客户现场的测试环境连的数据库极不稳定,经常会出现需要重新启动数据库的情况, 但是一旦重启数据库 则会出现 提示 ,执行sql错误,原因就是datasource 没有获取新的连接!

那么解决办法就是怎样让jboss每次提供连接的时候都给我们可用的最新的连接!

文章目录

一、环境配置

应用服务器

jboss 7

数据库

oracle

二、配置文件路径

在数据源standalone.xml配置文件中添加此标签即可
/app/wildfly-10.1.0.Final/standalone/configuration/standalone.xml

三、添加重连标签

<validation>  
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
</validation>

四、配置截图

jboss连接池,断开后自动重连功能_sql

五、配置后的文件总览

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jndi-name="java:/comp/env/siniteksirm" pool-name="siniteksirm" enabled="true" use-java-context="true">
<connection-url>jdbc:oracle:thin:@localhost:1521:orcl</connection-url>
<driver>oracle</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
</pool>
<security>
<user-name>broker</user-name>
<password>broker</password>
</security>
<validation>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
</validation>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<driver name="oracle" module="com.oracle.jdbc">
<xa-datasource-class>oracle.jdbc.xa.OracleXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>

六、其他解决办法

6.1. Jboss数据库连接断开自动重连

应用服务器

jboss

数据库

oracle

Jboss默认配置是数据库连接端口后,服务就会出现异常,无法访问,此时必须重启Jboss服务才能重新连接上数据库。

在​ ​jboss/server/defult/deploy/oracle-ds.xml​ ​中加入:

<new-connection-sql>select 1 from dual</new-connection-sql>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>

配置后的文件总览

<?xml version="1.0" encoding="utf-8"?>

<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@172.30.26.44:1521:orcl</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>hadiandev</user-name>
<password>hadiandev</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>1</idle-timeout-minutes>
<track-statements/>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
<new-connection-sql>select 1 from dual</new-connection-sql>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
</metadata>
</local-tx-datasource>
</datasources>

6.2. Jboss配置自动重连数据库

应用服务器

jboss

数据库

mysql

<validation> 
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>