我发现我可以使用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
,但是出现错误:
Could not set unknown property 'systemProperties' for task ... of type org.gradle.api.DefaultTask
如何在构建时将值传递给
application.properties
?我们希望在构建时传递它们的原因是,我们可以重新启动项目几次,而我们只能构建一次。我们不想每次重启项目时都设置它们。这就是为什么我们要在构建时间上设置它们。
最佳答案
本地解决方案的工作示例here(如果我理解这个问题)。
考虑一个模板文件,例如src/main/resources/template.application.properties
:
server.port=__SERVER_PORT
spring.datasource.url=__SPRING_DATASOURCE_URL
然后作为build
任务的一部分,执行 token 替换以生成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
任务的执行。 (最好将替换代码放在自己的任务中。)
关于spring-boot - 在构建时从application.properties设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64662549/