我正在使用弹簧&休眠。我的应用程序有3个模块。每个模块都有特定的数据库。所以,应用程序处理3个数据库。在服务器启动时,如果任何一个数据库关闭,则服务器不启动。 我的要求是,即使其中一个数据库关闭,服务器应该启动,因为其他模块的数据库已启动,用户可以在其他两个模块上工作。请建议我如何实现这一目标? 我使用spring 3.x和hibernate 3.x.此外,我正在使用c3p0连接池。应用服务器是Tomcat。如何使App服务器即使在数据库关闭的情况下启动?
谢谢!
我正在使用弹簧&休眠。我的应用程序有3个模块。每个模块都有特定的数据库。所以,应用程序处理3个数据库。在服务器启动时,如果任何一个数据库关闭,则服务器不启动。 我的要求是,即使其中一个数据库关闭,服务器应该启动,因为其他模块的数据库已启动,用户可以在其他两个模块上工作。请建议我如何实现这一目标? 我使用spring 3.x和hibernate 3.x.此外,我正在使用c3p0连接池。应用服务器是Tomcat。如何使App服务器即使在数据库关闭的情况下启动?
谢谢!
我会使用@Configuration注释来创建一个对象,它是构建bean并处理数据库关闭场景的工作。在构建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;
}
}
}
嗨BruceLowe,谢谢你的回复。一些如何使应用程序服务器即使其中一个数据库已启动。但一旦用户开始使用其他模块,如果数据库已启动,并且用户试图访问它,如何才能为该数据库配置池?谢谢 – user1016403 2012-04-23 14:40:31
这本来是一个注释:
你试过了吗?在连接数据库之前,您不知道数据库是否处于关闭状态,因此除非c3p0预先验证其所有连接,否则直到您尝试使用它时才会知道某个特定数据库处于关闭状态。那时你的应用程序已经开始了。
什么是粗体文本? – adarshr 2012-04-20 10:42:22
你试过了吗?在连接数据库之前,您不知道数据库是否处于关闭状态,因此除非c3p0预先验证其所有连接,否则直到您尝试使用它时才会知道某个特定数据库处于关闭状态。那时你的应用程序已经开始了。 – beny23 2012-04-20 10:43:40
嗨贝尼,谢谢你的回复。如果c3p0的预失效失败,我的意思是如果其中一个数据库关闭,服务器将无法正确启动?如果我错了,请纠正我。谢谢! – user1016403 2012-04-20 10:52:32