【问题标题】:Grails 2.3.11 ERROR pool.ConnectionPool - Unable to create initial connections of poolGrails 2.3.11 错误 pool.ConnectionPool - 无法创建池的初始连接
【发布时间】:2018-10-06 17:03:52
【问题描述】:
2018-04-19 20:57:38,504 [localhost-startStop-1] ERROR pool.ConnectionPool  - Unable to create initial connections of pool.
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host MY-PC, port 1433 has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".

我在启动时收到此错误 3 次。我猜这是因为 Grails 在启动时尝试连接数据库三次,基于Burt Beckwith'sNo Fluff Just Stuff's Delayed SessionFactory Creation in Grails

在三个错误提示之后,Grails 在创建 bean(transactionManager、transactionManagerPostProcessor 等)时继续失败。

根据我的理解,这里的问题是创建池。我假设 Hibernate 在 Grails 上处理这个问题。由于数据库仍未在线,因此无法创建池。

为了让您了解问题的背景,Grails 应用程序正在连接到数据库。数据库和 Grails 服务器位于不同的服务器上。两台服务器同时重启。然后 Grails 应用程序在数据库服务器之前首先在线的服务器。这会导致提到的错误,因为 Grails 应用程序尝试连接到尚未在线的数据库。

有没有办法配置 Grails 在创建池时发生错误或异常时重新连接到数据库服务器?我目前使用 MSSQL 作为我的数据库。我希望你能在这方面帮助我。谢谢。

【问题讨论】:

    标签: hibernate grails grails-orm datasource


    【解决方案1】:

    如果没有后备数据库,您的应用程序将无法有效启动或运行,因此即使您稍后可以重新连接,您也会错过很多启动事件,例如 GORM 更新。

    既然您的应用程序在数据库启动之前无法运行,您能否延迟启动 Grails 应用程序,直到数据库启动之后?有多种方法可以做到这一点,这样做似乎会给你一个更好、更清晰的初始化过程。

    【讨论】:

    • 我想我可以延迟 Grails 应用程序上线。但是,由于数据库位于不同的服务器中,因此即使存在延迟,仍不能保证 Grails 应用程序可以连接到数据库,因为我不确定数据库何时会在线。我不确定如何处理延迟。我还需要调查一下。你有什么可以参考的吗?
    • 这当然取决于您的环境和权限,但您可以使用sp_procoption 之类的东西来执行存储过程,然后使用 xp_cmdshell 执行系统命令。或者,如果一切都作为服务运行(我猜是 Linux 或 Windows,但我肯定对 Linux 更有信心),那么应该可以让一个服务在启动后触发另一个(甚至是远程)服务。或者你可以只说“数据库永远不会花费超过 120 秒”或类似的话,然后延迟那么长的时间......更简单,但可能没有那么精确。
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2019-06-19
    • 2018-08-08
    • 1970-01-01
    • 2018-10-23
    • 2017-02-02
    相关资源
    最近更新 更多