我发现使用bootRun
运行应用程序时可以设置属性,但是我想在构建应用程序时设置属性。
假设我在application.properties
中有一个变量,我想在构建时设置其值。
application.properties
:
spring.datasource.url=${db}
如果我在bootRun { systemProperties = System.properties }
中设置了build.gradle
,则可以使用application.properties
将值传递到./gradlew bootRun -Ddb=foo
是否可以在构建时执行此操作?我基本上将bootRun
从bootRun { systemProperties = System.properties }
更改为build
,但出现错误:
无法为org.gradle.api.DefaultTask类型的任务...设置未知属性'systemProperties'
如何在构建时将值传递给application.properties
?
我们希望在构建时传递它们的原因是,我们可以重新启动项目几次,而我们只能构建一次。我们不想每次重启项目时都设置它们。这就是为什么我们要在构建时间上设置它们。
答案 0 :(得分:0)
自制解决方案的工作示例here(如果我理解这个问题)。
考虑模板文件,例如src/main/resources/template.application.properties
:
server.port=__SERVER_PORT
spring.datasource.url=__SPRING_DATASOURCE_URL
,然后作为build
任务的一部分,执行令牌替换以生成src/main/resources/application.properties
:
build.doFirst {
def appPropsFilename = "${projectDir}/src/main/resources/application.properties"
ant.delete(file: appPropsFilename)
def appProps = new File(appPropsFilename)
def templateAppProps = new File("${projectDir}/src/main/resources/template.application.properties")
appProps.withWriter { def writer ->
templateAppProps.eachLine { def line ->
def newLine = line.replace("__SERVER_PORT", "6161")
.replace("__SPRING_DATASOURCE_URL", "http://example.com/db")
writer.write(newLine + "\n");
}
}
}
请注意,标记只是示例。可以根据自己的喜好命名它们,并且值可以从任何适合您需要的地方获取。
另外请注意:您将需要针对用例进行全面测试。目前,它取决于build
任务的执行。 (最好将替换代码放在自己的任务中。)