在构建时从application.properties设置值

时间:2020-11-03 12:08:28

标签: spring-boot gradle build.gradle

我发现使用bootRun运行应用程序时可以设置属性,但是我想在构建应用程序时设置属性。

假设我在application.properties中有一个变量,我想在构建时设置其值。

application.properties

spring.datasource.url=${db}

如果我在bootRun { systemProperties = System.properties }中设置了build.gradle,则可以使用application.properties将值传递到./gradlew bootRun -Ddb=foo

是否可以在构建时执行此操作?我基本上将bootRunbootRun { systemProperties = System.properties }更改为build,但出现错误:

无法为org.gradle.api.DefaultTask类型的任务...设置未知属性'systemProperties'

如何在构建时将值传递给application.properties

我们希望在构建时传递它们的原因是,我们可以重新启动项目几次,而我们只能构建一次。我们不想每次重启项目时都设置它们。这就是为什么我们要在构建时间上设置它们。

1 个答案:

答案 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任务的执行。 (最好将替换代码放在自己的任务中。)

相关问题