java - 如何在禁用 MongoDB 但仍安装的情况下运行 Spring?

标签 java spring mongodb spring-boot spring-data

我正在阅读这个 Git 问题: https://github.com/spring-projects/spring-boot/issues/7589 关于 Java Spring boot,我正试图找出一种方法来绕过启动时的崩溃。

简短的版本是,如果您包含创建 mongo 客户端的代码:

@Bean
public MongoOperations mongoOperations() {
    try {
        //This runs an operation which uses my credentials to login to the db
        return new MongoTemplate(mongoDbFactory());
    } catch (Exception e){
        e.printStackTrace();
        return null;
    }
}

并且 MongoDB 正在运行,它将连接并且没有任何问题,但如果 MongoDB 正在运行,Spring 将重试并在再次失败后崩溃并停止所有启动序列。

我的问题是:除了注释掉引用它的所有代码之外,有没有办法绕过这个初始崩溃/检查正在启动和运行的数据库?我可以在底层捕获异常并让它通过吗?

最佳答案

如果您的应用程序以 MongoDB 可选的方式运行,您有多种选择。

如果您要迁移现有应用程序,最简单的方法是从一开始就迁移到 exclude the auto-configuration并自己创建基础设施。不是您所指出的从 @Bean 方法返回 null 的方式非常讨厌。相反,您可以拥有一些可以延迟创建客户端的服务,并且您可以更新 MongoDB 的可选用法以通过该服务。无论如何都会创建服务,但只会在必要时创建底层基础设施。

另一种选择是使用配置文件。如果主要用例是 MongoDB 可用,则创建一个 application-nomongo.properties(类似的东西),您可以在其中使用 spring.autoconfigure.exclude属性。当应用程序在没有 mongo 的情况下启动时,您可以启用 nomongo 配置文件,自动配置将退避。未启用时,Mongo bean 将由 Spring Boot 创建。

关于java - 如何在禁用 MongoDB 但仍安装的情况下运行 Spring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51312291/

相关文章:

mongodb - mgo 查询为大型数据集返回 "EOF"

java - Datanucleus 警告 : Class was specified in persistence-unit but not annotated, 所以忽略

java - 具有 2 个不同数据库名称的 MySQL JDBC URL 故障转移

java - 按 JPA 标准查询中的聚合字段过滤

java - spring ldap内存不足无法创建新的 native 线程

mongodb - 如何在任意深度查找 MongoDB 字段名称

java - fragment 元素中的 fragment onClick 方法

java - sbt 添加 java 项目

java - 将 String 转换为 java bean 类型

javascript - 使用 MEAN 堆栈从 MongoDB 删除数据