【发布时间】:2022-01-03 21:48:25
【问题描述】:
我目前在 Spring Boot 中有一个微服务,其中一些属性存储在 application.properties 中。目前,它仅配置为一个商店。但是我想更改逻辑,以便可以动态添加商店而无需更改任何代码。
我为商店创建了一个模型 java 类,它看起来像这样:
public class Store {
private String username;
private String password;
private String hostname;
private int port;
}
我的 application.properties 今天看起来像这样:
system.connection.username=TestUser
system.connection.password=123456
system.connection.hostname=12.34.56.78
system.connection.port=1234
但我希望能够指定它是哪个商店,并且能够通过将它们添加到 application.properties 中来添加更多商店,如下所示:
system.connection.Store1.username=TestUser1
system.connection.Store1.password=123456
system.connection.Store1.hostname=12.34.56.78
system.connection.Store1.port=1234
system.connection.Store2.username=TestUser2
system.connection.Store2.password=859382
system.connection.Store2.hostname=34.34.34.34
system.connection.Store2.port=4444
然后将其添加到一些哈希图中,并能够从我的任何其他类中检查和检索特定商店的变量。
为此,我尝试了以下方法:
@Configuration
@ConfigurationProperties(prefix = "system.connection")
class StoresConfiguration(
val stores: HashMap<String, Store> = HashMap()
) {
fun getStore(storeName: String): Store? {
return stores.get(storeName)
}
}
但是getStore 只返回null,即使我检查stores.size 它也是0。那么我在哪里做错了,我怎样才能有效地做到这一点?我考虑过跳过废话,只创建一个名为“stores”的文件夹并将 json 文件放入其中,然后从那里读取。这样每个 Store 都只是一个 json 文件,因此在启动时应用程序会扫描文件夹并为每个 json 文件创建一个 Store 对象。但我不知道这是否是一个好的解决方案。这是我第一次使用 Spring Boot。感谢您的帮助!
【问题讨论】:
-
我从未尝试过使用 ConfigurationProperties 的地图,但我认为您可以获取对象列表(商店名称、用户名、密码、主机等),然后将其转换为地图。看看这篇文章 - stackoverflow.com/questions/51378768/….
标签: java spring spring-boot kotlin