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.

  • Java Wildcard-types vs Kotlin Star-projection
  • Carga GIF usando la versión 4.2.0 de deslizamiento en Kotlin
  • Habilitar y deshabilitar una transmisión en kotlin
  • Cómo usar KeyEvent en Kotlin
  • Ordenar colección por múltiples campos en Kotlin
  • JUnit, @ControllerAdvice y la falta de excepciones marcadas en Kotlin
  • Verificación de nulidad de Kotlin si el enfoque es funcional ... ¿Cómo?
  • Referencia no resuelta: kotlinx - Kotlin 1-0-0-rc-1036
  • Tengo dos methods de extensión de Kotlin para la misma class, pero con una firma genérica diferente y el comstackdor se queja
  • ¿Cuál es la diferencia entre properties y parameters en Kotlin?
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin