使用Gradle将Spring Boot应用程序构建为war并激活配置文件

7

我希望可以将我的Spring Boot应用程序打包成特定配置文件的war文件。这可以通过在应用程序的application.properties文件中设置spring.profiles.active=配置文件名称来实现。

是否可能在构建war文件时设置它作为参数,例如gradle build --spring.profiles.active=配置文件名称


你可以使用 -P 开关将参数传递给 Gradle 构建。然后通过项目实例引用传递的属性。 - Opal
1个回答

12

看起来你想在构建war时将spring.profiles.active的值嵌入其中。你可以使用Gradle对资源过滤的支持来实现。像这样配置你的application.properties

spring.profiles.active=@activeProfiles@

然后在你的build.gradle中应用过滤器,将@activeProfiles@替换为属性的值:

processResources {
    filter org.apache.tools.ant.filters.ReplaceTokens, tokens: [
        activeProfiles: activeProfiles
    ]
}
在这个例子中,我使用了一个名为 activeProfiles 的属性。然后在运行构建时,您需要提供一个值:
./gradlew -PactiveProfiles=foo build

Andy,这个解决方案对我有效。但是问题在于当我切换配置文件时,processResources不会再次执行。 - rakpan
也许是因为Gradle认为任务已经是最新的而跳过了它?尝试使用clean命令:./gradlew -PactiveProfiles=switched clean build - Andy Wilkinson
1
我在我的一个项目中使用了这种方法,但存在一个问题,即二进制文件被过滤掉了,这导致应用程序部署后例如字体未能正确显示。如此定义的处理资源任务处理所有文件,这可能会导致二进制文件最终损坏。解决方案是将被过滤的文件限制为确实需要被过滤的文件。我在这篇博客文章中详细描述了这个问题:http://blog.codeleak.pl/2015/1... - Rafal Borowiec
这个错误意味着您还没有设置activeProfiles属性。您尝试如何设置它? - Andy Wilkinson
@JigneshM.Khatri 可能最好将其作为一个单独的问题来处理,因为它取决于您想要做什么。一种方法是配置您的IDE,以使用 spring.profiles.active=yourProfile 作为系统属性启动应用程序。 - Andy Wilkinson
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接