我们正在使用 Spring Boot 应用程序,其中的属性是从application.yml
文件而不是application.properties
, 位于src/main/resources/
如下所示:
config:
host: localhost:8080
server: 123
他们被拉进一个.java
像这样的文件
@ConfigurationProperties( prefix="config")
public class ConnectionImpl implements Connection{
@Value("${config.host}")
private Stringhost;
}
我可以通过这种方式检索属性。
但我们正在尝试将配置属性从application.yml
到一个不同的.yml
位于不同位置的文件。 (src/main/resources/env-config
).
现在我无法以相同的方式检索属性,即使用@Value
注解。我还需要添加其他注释吗?
来自文档 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files:
SpringApplication
将从中加载属性application.properties
(or application.yml
) 文件位于以下位置并将它们添加到 SpringEnvironment
:
- A
/config
当前目录的子目录。
- 当前目录
- 类路径
/config
package
- 类路径根
如果你不喜欢application.properties
作为配置文件名,您可以通过指定 spring.config.name 环境属性切换到另一个文件名。您还可以使用以下命令引用显式位置spring.config.location
环境属性(以逗号分隔的目录位置列表或文件路径).
默认搜索路径classpath:,classpath:/config,file:,file:config/
总是被使用,无论其值如何spring.config.location
。该搜索路径按优先级从最低到最高的顺序排列(file:config/
获胜)。如果您确实指定了自己的位置,它们将优先于所有默认位置,并使用相同的最低到最高优先级排序。通过这种方式,您可以为您的应用程序设置默认值application.properties
(或者您选择的任何其他基本名称spring.config.name
)并在运行时使用不同的文件覆盖它,保留默认值。
您需要提供一个命令行参数来告诉SpringApplication
具体去哪里看。如果一切都在resources/
添加到类路径根目录中,那么您的命令行将如下所示:
java -jar myproject.jar --Dspring.config.location=classpath:/env-config/service-config.yml
如果你有一个将军application.yml
under resources/
,其中的属性仍将被加载,但优先级低于命令行上指定的属性文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)