繁体   English   中英

当数据库连接中断时,如何对 Oracle 和 grails 项目进行自动池重新连接?

[英]How to do an automatic pooled reconnection on an Oracle and a grails project when a database connection is interrupted?

我有一个项目使用了 grails 框架 3.X 和 Oracle DB,该项目部署在 tomcat 9.0.X 上。

项目存在DB连接问题,当项目与DB之间的连接、防火墙或任何网络配置发生变化时,DB连接中断,项目无法自动重新连接DB; 或 DB 的设置已更改或 DB 已重新启动。 因此,如今,当发生此问题时,我在 tomcat 服务器上手动重新部署项目。

为了解决这个问题,我尝试了很多改变,但问题还没有消失。 例如,我在 application.yml 上更改了 dataSource 配置的属性,并尝试了不同版本的 OJDBC 驱动程序。

当我在 application.yml 上将“pool”的值从 true 更改为 false 时,中断的连接可以自动重新连接。 但是,我认为“pool:false”配置会产生负面影响,因为数据库连接操作很昂贵。 例如,要达到最大连接限制,...

所以,我的问题是,当数据库连接中断时,如何对 Oracle 数据库和 grails 项目进行自动池重新连接?

我在 application.yml 上的当前配置(可能因为测试而改变了一些属性):

dataSources:
    dataSource:
        pooled: true
        jmxExport: true
        driverClassName: oracle.jdbc.OracleDriver

environments:
    development:
        dataSources:
            dataSource:
                logSql: false
                dbCreate: update
                url: jdbc:oracle:thin:@localdomain:1521/test
                username: test
                password: test
                properties:
                    maxActive: 50
                    maxIdle: 25
                    minIdle: 1
                    initialSize: 5
                    numTestsPerEvictionRun: 3
                    maxWait: 1000
                    testOnBorrow: true
                    testWhileIdle: true
                    testOnReturn: true
                    minEvictableIdleTimeMillis: 1000
                    timeBetweenEvictionRunsMillis: 1000
                    validationQuery: SELECT 1 FROM DUAL
                    validationQueryTimeout: 5
                    validationInterval: 5
                    removeAbandoned: true
                    removeAbandonedTimeout: 5
    production:
        dataSources:
            dataSource:
                dbCreate: none
                jndiName: "java:comp/env/testDs"
                properties:
                    maxActive: 50
                    maxIdle: 25
                    minIdle: 1
                    initialSize: 5
                    numTestsPerEvictionRun: 3
                    maxWait: 1000
                    testOnBorrow: true
                    testWhileIdle: true
                    testOnReturn: true
                    minEvictableIdleTimeMillis: 1000
                    timeBetweenEvictionRunsMillis: 1000
                    validationQuery: SELECT 1 FROM DUAL
                    validationQueryTimeout: 5
                    validationInterval: 5
                    removeAbandoned: true
                    removeAbandonedTimeout: 5

您可以尝试设置validationQuery 属性为null,检查validationQuery 属性是否与其他属性冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM