2012-04-20 83 views
3

我正在使用弹簧&休眠。我的应用程序有3个模块。每个模块都有特定的数据库。所以,应用程序处理3个数据库。在服务器启动时,如果任何一个数据库关闭,则服务器不启动。 我的要求是,即使其中一个数据库关闭,服务器应该启动,因为其他模块的数据库已启动,用户可以在其他两个模块上工作。请建议我如何实现这一目标? 我使用spring 3.x和hibernate 3.x.此外,我正在使用c3p0连接池。应用服务器是Tomcat如何使App服务器即使在数据库关闭的情况下启动?

谢谢!

+0

什么是粗体文本? – adarshr 2012-04-20 10:42:22

+0

你试过了吗?在连接数据库之前,您不知道数据库是否处于关闭状态,因此除非c3p0预先验证其所有连接,否则直到您尝试使用它时才会知道某个特定数据库处于关闭状态。那时你的应用程序已经开始了。 – beny23 2012-04-20 10:43:40

+0

嗨贝尼,谢谢你的回复。如果c3p0的预失效失败,我的意思是如果其中一个数据库关闭,服务器将无法正确启动?如果我错了,请纠正我。谢谢! – user1016403 2012-04-20 10:52:32

回答

3

我会使用@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; 
    } 
    } 
} 
+0

嗨BruceLowe,谢谢你的回复。一些如何使应用程序服务器即使其中一个数据库已启动。但一旦用户开始使用其他模块,如果数据库已启动,并且用户试图访问它,如何才能为该数据库配置池?谢谢 – user1016403 2012-04-23 14:40:31

1

这本来是一个注释:

你试过了吗?在连接数据库之前,您不知道数据库是否处于关闭状态,因此除非c3p0预先验证其所有连接,否则直到您尝试使用它时才会知道某个特定数据库处于关闭状态。那时你的应用程序已经开始了。

相关问题