spring-boot - 在构建时从application.properties设置值

标签 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,但是出现错误:

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/

相关文章:

java - Spring Boot 和 url 中的参数验证

build - 配置 Gradle 以将主类和测试类包含到我的 .jar 存档中

android - 构建 Android 应用程序时出现问题,LeftShift 错误

java - "Accesing data with MySQL"教程之后的异常 - SpringBoot JPA Hibernate

spring-boot - 如何使用 Spring Cloud Security Oauth2 在单个 Spring 引导应用程序上使用多个 Oauth2 SSO 服务器?

gradle - 在Docker容器中离线运行Gradle构建

android - 如何从主目录访问产品 flavor 类?

android - 如何在 Android Studio 中使用 gradle 实验性插件 0.2.0 将静态库(.a 文件)与 APK 链接

spring-security - Spring Boot,Spring Security 覆盖 UserDetailsS​​ervice

在 Ubuntu 上找不到 Java 应用程序主类