我正在使用spring&冬眠。我的应用程序有3个模块。每个模块都有一个特定的数据库因此,应用程序处理3个数据库。在服务器启动时,如果任何一个数据库关闭,则服务器不会启动。 我的要求即使其中一个数据库关闭,服务器应该启动,因为其他模块的数据库已启动,用户可以使用其他两个模块。请建议我如何实现这一目标? 我正在使用spring 3.x和hibernate 3.x.我也在使用 c3p0连接池。 应用服务器 Tomcat 。
谢谢!
答案 0 :(得分:4)
我会使用@Configuration批注来创建一个对象,它的工作就是构造bean并处理DB down场景。构造bean时,测试数据库连接是否已启动,如果没有,则返回bean的虚拟版本。这将被注入相关对象。这个虚拟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;
}
}
}
答案 1 :(得分:1)
这最初是评论:
你试过吗?在连接到数据库之前,您不知道数据库是否已关闭,因此除非c3p0预先验证其所有连接,否则在尝试使用它之前,您不会知道特定数据库已关闭。到那时你的申请已经开始了。