【问题标题】:How to make App server to start even if database is down?即使数据库关闭,如何使应用服务器启动?
【发布时间】:2012-04-20 10:37:48
【问题描述】:

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

谢谢!

【问题讨论】:

  • 这些粗体字是怎么回事?
  • 你试过了吗?在连接到数据库之前,您不会知道数据库是否已关闭,因此除非 c3p0 预先验证其所有连接,否则您在尝试使用特定数据库之前不会知道该数据库已关闭。到那时,您的应用程序将已经启动。
  • 您好贝尼,感谢您的回复。如果 c3p0 的预验证失败,我的意思是如果其中一个数据库关闭,服务器将无法启动对吗?如果我错了,请纠正我。谢谢!
  • @beny23 您的回答也是一个不错的选择。它帮助了我。请把它作为一个正确的答案,以便能够对此进行投票。

标签: java spring hibernate tomcat appserver


【解决方案1】:

我会使用@Configuration 注释来创建一个对象,该对象的工作是构造bean 并处理DB 宕机情况。构建 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;
   }
  }
}

【讨论】:

  • 您好 BruceLowe,感谢您的回复。即使其中一个数据库已启动,我也可以建立一些应用服务器。但是一旦用户开始使用其他模块,如果数据库在中间并且用户尝试访问它,我如何仅为该数据库配置池?谢谢
【解决方案2】:

这原本是一条评论:

你试过了吗?在连接到数据库之前,您不会知道数据库是否已关闭,因此除非 c3p0 预先验证其所有连接,否则您在尝试使用特定数据库之前不会知道该数据库已关闭。到那时,您的应用程序将已经启动。

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 2021-06-02
    • 2014-02-28
    • 1970-01-01
    • 2020-10-16
    • 2020-08-22
    • 1970-01-01
    • 2020-12-07
    • 2019-01-05
    相关资源
    最近更新 更多