有没有办法在运行时更新/修改 MongoDB 连接的密码?

问题描述

请求是在spring boot项目运行时修改mongodb连接的密码。例如,假设在使用密码“xyz”启动应用程序时建立了 mongodb 连接。我想在运行时修改密码,比如点击 api。 到目前为止,我已尝试使用以下解决方案来解决此问题:

  • 在运行时替换 mongoTemplate bean:尝试在运行时使用新密码创建新的 mongoTemplate Bean,并使用以下 link 中给出的方法在上下文中替换它。这种方法的问题是 bean 只刷新一次。理想情况下,每次调用更新密码的 api 时它都应该工作。
  • 在 mongoCredentials 中更新密码: 一种显而易见的方法是直接在 mongoCredentials 中更新密码,因为 mongoTemplate 使用 mongoCredential 类来存储凭据信息。但问题在于 MongoCredentials 类中的密码字段是 'final static' 所以即使使用反射我们也无法更新它。尽管有一些技巧可以更新最终静态字段,但我正在寻找更可接受的解决方案。

解决方法

Spring Cloud 项目中有 @RefreshScope 正是为了您的目的。以下是 Spring 关于其工作原理的文档:https://cloud.spring.io/spring-cloud-static/spring-cloud.html#_refresh_scope

因此,您需要做的就是更新 Environment 并在需要刷新上下文时调用 org.springframework.cloud.context.scope.refresh.RefreshScope#refreshorg.springframework.cloud.context.scope.refresh.RefreshScope#refreshAll

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...