我正在使用Java和spring boot。我想知道如何将Property占位符添加到event/data/email_template_data.xml
文件中。我发现了一些清晰的例子但是我不确定Property占位符在哪里被实例化。它是在系统env变量,文件等中吗??
Bootstrap.yml
.yml
用户正在使用Property占位符,但是用户在哪里声明了它? 这个.yml从哪里读取值? (与上述相同的问题) 是否有解释连接的文件?
这个Web应用程序将使用“cf push”推送到云代工厂,它将自动选择要配置的manifest.yml文件。如果可能的话,云代工厂的例子会很棒。
了解
spring:
cloud:
config:
username: ${my.stored.files.username}
password: ${my.stored.files.password}
label: ${spring.cloud.find.label}
uri: ${spring.cloud.config.uri}
enabled: false
failFast: true
用户可以使用$ {app.name},因为它已定义。我对上面的例子很困惑。用户如何以及在何处获得“$ {my.stored.files.username}。 这被定义在哪里?我假设它将在system.properties或环境变量中。任何人都可以确认吗?
答案 0 :(得分:12)
经过深入研究,我发现当我在.yml文件中使用占位符时,它会从环境变量中读取这些值。这是我一开始的理论的一部分,但没有人确认过。
<强>答案强>
spring:
cloud:
config:
username: ${my.stored.files.username}
password: ${my.stored.files.password}
label: ${spring.cloud.find.label}
uri: ${spring.cloud.config.uri}
enabled: false
failFast: true
*在环境变量*
set key as: my.stored.files.username
set value as: UsernameSample
,然后强>
当您运行应用程序时,yml将如此读取。
config:
username: ${my.stored.files.username}
//gets replaced with UsernameSample
这是解决我的问题link
的链接答案 1 :(得分:0)
SpringApplication在以下位置从application.properties文件加载属性,并将其添加到Spring Environment:
列表按优先级排序(在列表较高位置定义的属性会覆盖在较低位置定义的属性)。
您还可以使用YAML(.yml)文件代替.properties。
如果您不喜欢application.properties作为配置文件名,则可以通过指定spring.config.name环境属性来切换到另一个文件名。您还可以通过使用spring.config.location环境属性(这是目录位置或文件路径的逗号分隔列表)来引用显式位置。下面的示例演示如何指定其他文件名:
$ java -jar myproject.jar --spring.config.name=myproject
以下示例显示了如何指定两个位置:
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
spring.config.name和spring.config.location很早就用于确定必须加载的文件。必须将它们定义为环境属性(通常是OS环境变量,系统属性或命令行参数)。
如果spring.config.location包含目录(而不是文件),则它们应以/结尾(并且在运行时,应在加载之前附加从spring.config.name生成的名称,包括特定于配置文件的文件)名称)。在spring.config.location中指定的文件按原样使用,不支持特定于配置文件的变体,并且会被任何特定于配置文件的属性覆盖。
以相反的顺序搜索配置位置。默认情况下,配置的位置是classpath:/,classpath:/ config /,file:./,file:./ config /。产生的搜索顺序如下:
file:./config/
file:./
classpath:/config/
classpath:/
使用spring.config.location配置自定义配置位置时,它们将替换默认位置。例如,如果将spring.config.location配置为值classpath:/ custom-config /,file:./ custom-config /,则搜索顺序如下:
file:./custom-config/
classpath:custom-config/
或者,当使用spring.config.additional-location配置自定义配置位置时,除默认位置外,还会使用它们。在默认位置之前搜索其他位置。例如,如果配置了classpath:/ custom-config /,file:./ custom-config /的其他位置,则搜索顺序变为:
file:./custom-config/
classpath:custom-config/
file:./config/
file:./
classpath:/config/
classpath:/
此搜索顺序使您可以在一个配置文件中指定默认值,然后在另一个配置文件中有选择地覆盖这些值。您可以在默认位置之一的application.properties(或使用spring.config.name选择的其他任何基本名称)中为应用程序提供默认值。然后,可以在运行时使用自定义位置之一中的其他文件覆盖这些默认值。
答案 2 :(得分:0)
经过一些研究和实验,我发现占位符既可以是环境变量又可以是command line arguments。属性文件的语法也可以在YAML文件中使用。 @Jesse已解释了环境变量。如果您说通过命令行参数:
--my.stored.files.username=UsernameSample
或--username=UsernameSample
,配置属性将按预期填充
my:
stored:
files:
username: ${username:defaultUsername}
我希望这可能对遇到类似问题的人有所帮助。
答案 3 :(得分:-1)
对于.yml文件,请使用{{your key}}作为占位符