我有这个@ConfigurationProperties:
@ConfigurationProperties(prefix = "myapp")
public class CustomProperties {
private Map<String, String> namespace = new HashMap<>();
public Map<String, String> getNamespace() {
return namespace;
}
}
在启动应用程序之前,我将以下参数作为程序参数:
--myapp.namespace.namespace1.connection="xxxx"
--myapp.namespace.namespace1.url="yyy"
--myapp.namespace.namespace2.topic="zzz"
--myapp.namespace.namespace2.id="ccc"
并且成功运行,名称空间映射将包含四个条目:
{namespace2.id=ccc, namespace1.connection=xxxx, namespace2.topic=zzz, namespace1.url=yyy}
现在我正在“泊坞窗”应用程序。如何使其与环境变量一起使用?我尝试过:
MYAPP_NAMESPACE_NAMESPACE1.CONNECTION="xxxx"
MYAPP_NAMESPACE_NAMESPACE1.URL="yyy"
MYAPP_NAMESPACE_NAMESPACE2.TOPIC="zzz"
MYAPP_NAMESPACE_NAMESPACE2.ID="ccc"
和
MYAPP_NAMESPACE_NAMESPACE1_CONNECTION="xxxx"
MYAPP_NAMESPACE_NAMESPACE1_URL="yyy"
MYAPP_NAMESPACE_NAMESPACE2_TOPIC="zzz"
MYAPP_NAMESPACE_NAMESPACE2_ID="ccc"
它不起作用。你能帮我吗?
感谢费尔南多。
答案 0 :(得分:0)
您可以使用占位符将这些属性映射到spring概要文件中的环境变量,即应用程序或引导程序属性(例如application.properties/yml或bootstrap.properties/yml文件中)。您可以按以下方式映射到环境变量占位符。这些将解析为相应的环境变量。
myapp.namespace.namespace1.connection=${MYAPP_NAMESPACE_NAMESPACE1_CONNECTION}
myapp.namespace.namespace1.url=${MYAPP_NAMESPACE_NAMESPACE1_CONNECTION}
myapp.namespace.namespace2.topic=${MYAPP_NAMESPACE_NAMESPACE1_CONNECTION}
myapp.namespace.namespace2.id=${MYAPP_NAMESPACE_NAMESPACE2_ID}
如果您事先知道属性名称,并且只知道前缀:
您只需要映射一个占位符并通过附加该占位符和下划线即可提供环境变量:
myapp.namespace=${MYAPP_NAMESPACE}
如果提供env变量,
MYAPP_NAMESPACE_NAMESPACE1_CONNECTION=xxx
Springboot足够聪明,可以解决此问题
myapp.namespace.namespace1.connection==xxx
您只需要遵循约定即可仅使用下划线(_),下划线将被解析为点(。)。
我们正在应用程序中使用它。我还测试了这种特殊情况,以及何时打印如下的命名空间:
{namespace1.connection=xxxx}
希望我能正确理解您想要在这里实现的目标。
答案 1 :(得分:-1)
我认为您可以通过执行@Value(“ $ {MYAPP_NAMESPACE_NAMESPACE1_CONNECTION}”)或环境变量中的任何键来初始化它
然后给它您想要的变量,像这样
@Value("${variable}")
private String variable;