gpt4 book ai didi

java - Spring Boot 中的动态数据库属性更改

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:07 25 4
gpt4 key购买 nike

我有 mysql 数据库,并且在 application.properties 文件中配置了数据库属性。现在,如果我确实更改了数据库连接属性,我想即时将更改反射(reflect)到我的应用程序中,这意味着无需重新启动服务器

这可以与 spring cloud 配置服务器和执行器一起使用吗?

最佳答案

我对此进行了大量测试,以下是我的发现。

  1. Spring 配置服务器非常适合简单的键值对。
  2. 如果您自己创建数据源对象并使用 @RefreshScope,它也适用于数据库属性。
    例如,如果您有一个具有这些属性的配置服务器。

    mongodb.feed.database=kiran
    mongodb.feed.host=localhost
    mongodb.feed.port=27017

并且您正在像这样在您的应用程序中配置 MongoTemplate。

@Configuration
@ConfigurationProperties(prefix = "mongodb.feed")
@EnableMongoRepositories(basePackages = "in.phani.springboot.repository", mongoTemplateRef = "feedMongoTemplate")
@Setter
class FeedMongoConfig {

private String host;
private int port;
private String database;

@Primary
@Bean(name = "feedMongoTemplate")
@RefreshScope // this is the key
public MongoTemplate feedMongoTemplate() throws Exception {
final Mongo mongoClient = createMongoClient(new ServerAddress(host, port));
return new MongoTemplate(mongoClient, database);
}

Mongo createMongoClient(ServerAddress serverAddress) {
return new MongoClient(serverAddress);
}
}

如果您在配置属性中更改数据库名称,然后使用 /refresh 端点刷新范围。它工作得很好。

  1. 有了springboot你就不需要像这样手动配置了。 Spring Boot 对大多数东西都有自动配置。继续上面的相同示例,如果您要放入类似这样的配置属性

    spring.data.mongodb.uri=mongodb://localhost:27017/phani

spring-boot 将为您配置 MongoTemplate(您不需要像第二点那样自己创建)。问题来了。
现在,如果您更改数据库名称并刷新范围,则它不起作用。因为在这种情况下,MongoTemplate 是通过 spring-boot Autoconfiguration(MongoAutoConfiguration) 配置的

总而言之,在将其用于生产之前(尤其是对于数据源、MongoTemplates 等复杂的 bean),它需要进行广泛的测试,因为这方面的文档不足。但我想说,值得一试.

关于java - Spring Boot 中的动态数据库属性更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48744320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com