我目前正在使用gradle作为构建工具构建Kotlin
,Spring Boot
服务。我正在尝试使用此处的步骤自动展开application.properties
文件中的属性:
我的版本如下:
- 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阶段失败。
答案 0 :(得分:0)
所以,我的build.gradle中有一小部分我没有包含在上面,因为我不知道它:
bootRun {
addResources = true
}
根据将addResources标志设置为true的Spring Boot Docs,将忽略在processResources步骤中创建的application.properties文件,而是使用项目源中的文件。这是为了允许您动态更改文件,而无需重新启动应用程序。
对此的正确修复(如果在使用bootRun
任务运行时需要变量扩展)是设置:
bootRun {
addResources = false
}
否则,如果您在构建jar时只需要扩展,则将此标记保留为true
应该没问题。