在kotlin / spring boot中使用Gradle属性扩展

时间:2017-09-15 01:20:27

标签: spring-boot gradle kotlin

我目前正在使用gradle作为构建工具构建KotlinSpring Boot服务。我正在尝试使用此处的步骤自动展开application.properties文件中的属性:

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-automatic-expansion-gradle

我的版本如下:

- kotlin: 1.1.4-3
- spring boot: 1.5.6.RELEASE
- gradle: 3.5.1

当我运行./gradlew bootRun时,我收到以下错误:

java.lang.IllegalArgumentException: Could not resolve placeholder 'myServiceName' in value "${myServiceName}"

其次是:

java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@510aeb93: startup date [Fri Sep 15 10:59:51 AEST 2017]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@68edf5bb

的build.gradle:

apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'org.springframework.boot'

processResources {
    filesMatching('application.properties') {
        expand(project.properties)
    }
}

gradle.properties:

myServiceName=potato-service

application.properties:

info.app.name=${myServiceName}

应用程序启动后会出现这些错误,而spring正在尝试加载属性文件。

有趣的是,如果我在application.properties中更改我要替换的变量,例如更改为myServiceName123,则gradle会在processResources阶段失败。

1 个答案:

答案 0 :(得分:0)

所以,我的build.gradle中有一小部分我没有包含在上面,因为我不知道它:

bootRun {
    addResources = true
}

根据将addResources标志设置为true的Spring Boot Docs,将忽略在processResources步骤中创建的application.properties文件,而是使用项目源中的文件。这是为了允许您动态更改文件,而无需重新启动应用程序。

对此的正确修复(如果在使用bootRun任务运行时需要变量扩展)是设置:

bootRun {
    addResources = false
}

否则,如果您在构建jar时只需要扩展,则将此标记保留为true应该没问题。