【问题标题】:efficient way to check database connection?检查数据库连接的有效方法?
【发布时间】:2019-09-24 17:42:01
【问题描述】:

grails 中最快的数据库连接检查是什么?我需要创建一个端点,该端点将被脚本一次又一次地调用,因此这需要高效。数据库不时出现故障,此脚本将调用此 api,该 api 将返回状态代码。根据此状态代码,机器人将知道数据库已关闭。如果是 200 则一切正常。

所以我需要以一种非常有效的方式检查数据库连接是否完好。由于调用每隔几秒钟发生一次,因此检查数据库状态的最快方法是什么。我的想法是使用像 Status.read(1) 这样的简单 gorm 查询。如果有异常则返回非 200 状态码。有没有更有效的方法来快速检查数据库状态?

我很欣赏任何见解。我正在使用 Grails 2.2。

【问题讨论】:

    标签: database grails grails-2.2


    【解决方案1】:

    为什么不直接避免一起使用 GORM,而只使用像 SELECT 1 这样的超级简单的数据库查询?将其放入服务中可能如下所示:

    package my.example
    
    class MyService {
    
        def dataSource
        def someTimeoutValue = 1000
    
        boolean isDatabaseThere() {
            try {
                dataSource.connection.isValid(someTimeoutValue)
                return true // everything is okay
            } catch (Exception e) {
                return false // everything is not okay
            }
        }
    }
    

    请原谅任何拼写错误或任何内容。

    【讨论】:

    • 谢谢。一个问题。什么是数据源?它是在服务中注入的吗?请注意我使用的是 grails 2.2。 grails 2.2 支持吗?
    • dataSource 是 Datasource.groovy 中定义的数据库数据源的名称。默认数据源名为dataSource。这应该适用于 Grails 2.x
    • 我认为您不需要为此创建 Sql 实例。 dataSource.connection.isValid(someTimeoutValue) 会更有效率并完成同样的事情吗?
    • @JeffScottBrown 这是一个很好的观点。我想这至少需要更少的资源。您介意我编辑答案以反映这一点吗?
    • 对于这个简单的检查,我正在考虑将检查逻辑放在控制器本身中,所以我想知道在 checkStatus() 方法中使用 def ds = grailsApplication.mainContext.getBean('dataSource') 的效率如何在控制器中。 checkStatus 将每隔几秒调用一次。
    猜你喜欢
    • 2011-12-10
    • 2020-10-18
    • 2021-08-17
    • 1970-01-01
    • 2023-03-12
    • 2011-08-03
    • 1970-01-01
    • 2012-12-09
    • 2023-03-19
    相关资源
    最近更新 更多