Uso de la expansión de propiedad Gradle en Kotlin / Spring Boot

Actualmente estoy construyendo un service Kotlin , Spring Boot usando gradle como la herramienta de compilation. Estoy intentando expandir automáticamente las properties encontradas en mi file application.properties , usando los pasos que se encuentran aquí:

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

Mis versiones son las siguientes:

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

Cuando ejecuto un ./gradlew bootRun , ./gradlew bootRun el siguiente error:

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

Seguido por:

 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} 

Estos errores aparecen después de que la aplicación ha comenzado y Spring está intentando cargar el file de properties.

Lo interesante es que si cambio la variable que estoy tratando de sustituir en application.properties, por ejemplo, myServiceName123, gradle falla en la etapa processResources.

Entonces, había una pequeña parte de mi build.gradle que no incluí arriba porque no sabía nada al respecto:

 bootRun { addResources = true } 

De acuerdo con los Spring Boot Docs que tengan el indicador addResources establecido en true, ignorará el file application.properties creado en el paso processResources y, en su lugar, usará el que está en las fonts de sus proyectos. Esto es para permitirle cambiar dinámicamente el file sin necesidad de reiniciar la aplicación.

La solución correcta para esto (si necesita expansión variable cuando se ejecuta con la tarea bootRun ) es establecer:

 bootRun { addResources = false } 

De lo contrario, si solo necesita expansión al build su jar, dejar esta bandera como true debería estar bien.

  • Cómo acceder a los miembros de la class con el mismo nombre en la function de extensión en Android Kotlin
  • Activando una interfaz en Kotlin para Android
  • Lectura y procesamiento de HOCON en Kotlin
  • Kotlin, Java, multidex, Dagger 2, Butterknife y Realm: transformClassesWithJarMergingForDebug: input duplicada: org / jetbrains / annotations / NotNull.class
  • Se esperaba Int, se obtuvo IntProgression en su lugar
  • ¿Cómo puedo declarar una list con valores en una sola línea en kotlin?
  • Kotlin comtesting null dos veces en caso de que no
  • Configuración de security de spring de Kotlin
  • Complemento con id `kotlin` no encontrado
  • Enumera y con en Kotlin
  • Anulación de getter de Kotlin + MongoDB