如何使用 ActiveJDBC 处理重新连接到数据库
How to handle re-connects to the DB with ActiveJDBC
我在生产中有一个 Spring 启动 Java 应用程序,它使用 ActiveJDBC 访问 MariaDB 数据库。
如果启动时应用程序在数据库服务器之前启动,或者如果数据库服务器崩溃并重新启动,则应用程序不会重新建立与数据库的连接。
ActiveJDBC 的版本是 1.4.13,如果可能的话我不想升级它,以避免可能的损坏。数据库参数使用 database.properties
文件配置,通常使用模式为:
try {
Base.open();
...
} finally {
Base.close();
}
有没有办法在不监视和重新启动应用程序的情况下规避这个问题?也许使用连接池?如果是这种情况,是否有任何文档或示例?
如果您在 database.properties
文件中使用直接 JDBC 连接,则每次执行 Base.open()
时都会打开一个新连接。这意味着任何断开的旧连接都不再相关。如果您使用 JDNI 池,例如:
production.jndi=java:comp/env/jdbc/acme
然后您要配置容器的池以确保池提供的每个连接在池提供与您的应用程序的连接之前有效。如何做到这一点取决于您 container/pool 的实施和文档。
无论如何,我认为您不会有问题。
我在生产中有一个 Spring 启动 Java 应用程序,它使用 ActiveJDBC 访问 MariaDB 数据库。
如果启动时应用程序在数据库服务器之前启动,或者如果数据库服务器崩溃并重新启动,则应用程序不会重新建立与数据库的连接。
ActiveJDBC 的版本是 1.4.13,如果可能的话我不想升级它,以避免可能的损坏。数据库参数使用 database.properties
文件配置,通常使用模式为:
try {
Base.open();
...
} finally {
Base.close();
}
有没有办法在不监视和重新启动应用程序的情况下规避这个问题?也许使用连接池?如果是这种情况,是否有任何文档或示例?
如果您在 database.properties
文件中使用直接 JDBC 连接,则每次执行 Base.open()
时都会打开一个新连接。这意味着任何断开的旧连接都不再相关。如果您使用 JDNI 池,例如:
production.jndi=java:comp/env/jdbc/acme
然后您要配置容器的池以确保池提供的每个连接在池提供与您的应用程序的连接之前有效。如何做到这一点取决于您 container/pool 的实施和文档。
无论如何,我认为您不会有问题。