我正在使用弹簧和休眠。我的应用程序有 3 个模块。每个模块都有一个特定的数据库。因此,应用程序处理 3 个数据库。在服务器启动时,如果任何一个数据库关闭,则服务器不会启动。我的要求是即使其中一个数据库关闭,服务器也应该在其他模块的数据库启动时启动,用户可以在其他两个模块上工作。请建议我如何实现这一目标?我正在使用 spring 3.x 和 hibernate 3.x。我也在使用c3p0 连接池。应用服务器是Tomcat。
谢谢!
我将使用 @Configuration 注释来创建一个对象,该对象的工作是构造 bean 并处理 DB down 场景。构建 bean 时,测试数据库连接是否正常,如果没有,则返回 bean 的虚拟版本。这将被注入到相关对象中。这个 dummy bean 的工作就是在调用时抛出一个不可用的异常。如果您的应用程序可以处理某些功能的这些不可用异常并向用户显示,同时在使用其他数据源时继续运行,那么您应该没问题。
@Configuration
public class DataAccessConfiguration {
@Bean
public DataSource dataSource() {
try {
//create data source to your database
....
return realDataSource;
} catch (Exception) {
//create dummy data source
....
return dummyDataSource;
}
}
}
这原本是一条评论:
你试过了吗?在连接到数据库之前,您不会知道数据库是否已关闭,因此除非 c3p0 预先验证其所有连接,否则您在尝试使用特定数据库之前不会知道该数据库已关闭。到那时,您的应用程序将已经启动。