我的朋友和我正在开发一个Spring-Boot应用程序。现在,在运行mvn spring-boot:run
时,Spring-Boot默认情况下会在src/main/resources/config
下加载application.yaml文件。
我的朋友和我有一个名为'DEV'设置的系统环境变量。因此,在命令行中输入echo $DEV
将返回dev.friend
或dev.mmp
。
在src/main/resources/config
下,我们要添加目录/dev/friend
和/dev/mmp
。在这些目录中,将有一个特定的application.yaml
文件。
现在我们有了这个:
我们如何仅使用注释设置Spring配置(我们希望避免再写pom.xml
以外的xml),这样当我们运行mvn spring-boot:run
时,加载的application.yaml
文件将基于在当前计算机的DEV
环境变量上。
我们知道我们可以执行以下操作从DEV
变量创建FileSystemResource:
public FileSystemResource configLoader() throws IOException {
StringBuilder path;
URL propertiesURL;
String hostName = System.getenv("DEV");
path = new StringBuilder("/config");
if (hostName != null && !hostName.isEmpty()) {
String[] hostNameParts = hostName.split("\\.");
for (String s : hostNameParts) {
path.append('/').append(s);
}
}
path.append('/').append("application.yaml");
propertiesURL = getClass().getResource(path.toString());
return new FileSystemResource(propertiesURL.getFile());
}
但是我们不知道如何继续,这是我们的第一个Spring项目。 Google搜索只会导致示例加载位于application.yaml
下的默认config/
(我们已经拥有)并且这不是我们想要的。我们想要扩展它,以便我们的登台服务器将拥有自己的DEV
系统变量,我们可以在config下添加另一个目录(如上所述)和application.yaml
文件。
答案 0 :(得分:3)
除application.yml
个文件外,还可以使用命名约定application-{profile}.yml
定义特定于配置文件的 yamls。因此,最好将三个yaml配置定义如下:application.yml
,application-devfriend.yml
和application-devmmp.yml
。
如果您未激活任何配置文件,默认情况下将加载application.yml
。如果您激活devfriend
个人资料,application-devfriend.yml
的配置值将覆盖application.yml
个。要激活一个配置文件,请使用spring.profiles.active
属性。例如:
java -jar -Dspring.profiles.active=devfriend yourapp.jar
您还可以为spring-profiles-active
添加环境变量。
更新:如果您坚持使用DEV
环境变量切换配置文件,请在application.yml
中添加:
spring:
profiles:
active: ${dev}
答案 1 :(得分:1)
您可以使用:
@ConfigurationProperties(locations = {"yourProperties"}) //create this path as a String above
指定Spring Boot将从配置类加载的位置。
或者,在命令行中,您可以使用属性来提及其他引导配置文件:
--spring.config.name="file:/path/to/application.yaml"