我有mysql数据库,我在application.properties文件中配置了数据库属性。 现在,如果我确实更改了数据库连接属性,我希望动态地将这些更改反映到我的应用程序中,意味着无需重新启动服务器
这可能与spring cloud配置服务器和执行器一起使用吗?
答案 0 :(得分:1)
我已经对此进行了相当多的测试,这是我的发现。
它也适用于数据库属性,前提是您自己创建数据源对象并且使用@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
端点刷新范围。它工作得很好。
使用springboot,您无需像这样进行手动配置。 Spring Boot具有自动配置功能。继续上面的相同示例,如果你要输入类似这样的配置属性
spring.data.mongodb.uri=mongodb://localhost:27017/phani
spring-boot将为您配置MongoTemplate(您不需要像第二点那样创建自己)。 这是打嗝 现在,如果更改数据库名称并刷新范围,则它不起作用。因为在这种情况下,MongoTemplate是由spring-boot自动配置(MongoAutoConfiguration)配置的
总而言之,在将它用于生产之前需要进行大量的测试(特别是对于像数据源,MongoTemplates这样的复杂bean),因为没有足够的文档来讨论这个...但我想说,值得尝试