我有application-prod.yml application-dev.yml和application.properties,其中仅包含如下一行代码
spring.profiles.active=dev
对于Maven生产构建,应使用spring.profiles.active = prod,然后将与application-prod.yml进行构建,对于开发构建,应使用spring.profiles.active = dev,然后使用maven 将使用application-dev.yml进行构建 我可以使用pom.xml的其他配置文件在applicaiton.properties中对此值进行切换吗?
答案 0 :(得分:0)
您可以为此使用Maven属性,在yml文件中(使用${...}
引用它,并使用maven资源插件过滤资源(即yml文件)。
答案 1 :(得分:0)
您似乎想要的是“外部配置”。根据出色的12factor指南,最好不要将这样的配置保留在代码存储库中。
请参阅Spring Boot手册中的the relevant部分,以查看您拥有哪些选项(并且有很多)。最终的结果是,您在文件系统上提供了application.yml/properties
文件,您的应用程序将从那里读取文件,而不是从类路径读取文件。
还请注意,spring-profile并不是用来区分开发环境,而是将应用程序置于不同的功能模式(例如,启用或禁用特定功能)。
答案 2 :(得分:0)
如果要在构建时更改属性文件的内容,则可以使用Maven过滤。 Maven过滤允许用Maven属性中的值替换属性(或Yaml)文件中的占位符。
假设您的POM中有一个名为targetEnv
的属性,该属性可能具有值dev
或prod
(取决于活动的Maven概要文件),则可以在其中引用它。通过使用以下语法,您的属性文件(或yaml文件):
spring.profiles.active=@targetEnv@
但是,如果您想遵循Spring Boot的建议,最好通过目标环境中的环境变量来启用和禁用Spring配置文件。例如,您可以使用具有所需值的环境变量spring.profiles.active
,它将覆盖属性文件中的值。
答案 3 :(得分:0)
您需要在每个Maven概要文件中定义一个自定义属性,并将其值设置为与要随特定概要文件一起加载的相应属性文件的后缀相匹配。
So, example: T = double;
Set<double> s0 = [0,5,1]
Set<double> s1 = [1,7.5,3.1];
Set<double> s2 = [2,8.75,4.31];
Set<double> s3 = [3,9,6];
Set<Set<int>> result = Sum(f si) .
接下来,在同一文件的build部分中,为资源插件配置过滤。这样,您就可以将上一步中定义的属性插入到资源目录中的任何文件中,这是后续步骤。
<profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>release</id>
<properties>
<activatedProperties>release</activatedProperties>
</properties>
</profile>
最后,将以下行添加到application.properties。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
…
</build>
有关更多详细信息,请参见spring boot properties per maven profile
有关从外部配置加载的官方指南Load from external Config