Recuperar valores del file `.properties` | la propiedad lateinit no se ha inicializado

Intento crear una aplicación de inicio de spring en la que mi class leerá un file src/main/resources/application.properties . Pero, por alguna razón, no puedo hacer que mi Kotlin trabaje con estos valores ( lateinit property url has not been initialized devolución de una lateinit property url has not been initialized .

src / main / resources / application.properties (nota, no se llama explícitamente a ninguna parte?)

 spring.datasource.url=someUrl spring.datasource.username=root spring.datasource.password=root spring.datasource.driverClassName=org.postgresql.Driver 

Kotlin

 @Component open class BaseDAO() { @Autowinetworking lateinit var datasource: DataSource; } 

nuevo error

 kotlin.UninitializedPropertyAccessException: lateinit property datasource has not been initialized at quintor.rest.persistence.BaseDAO.getDatasource(BaseDAO.kt:18) ~[classes/:na] at quintor.rest.persistence.EventDAO.getMultipleEvents(EventDAO.kt:45) ~[classes/:na] at quintor.rest.persistence.EventDAO.getComingOpenEvents(EventDAO.kt:98) ~[classes/:na] at quintor.rest.persistence.EventService.getComingEvents(EventService.kt:23) ~[classes/:na] at quintor.rest.spring.EventsController.getEvents(EventsController.kt:37) ~[classes/ 

Solicitud

 @SpringBootApplication open class Application : SpringBootServletInitializer(){ companion object { @JvmStatic fun main(args: Array<String>) { SpringApplication.run(Application::class.java, *args); } @Override protected fun configure(app:SpringApplicationBuilder):SpringApplicationBuilder{ return app.sources(Application::class.java); } } } 

EventDAO (mencionado en el error) simplemente extiende el BaseDAO y usa el datasource

La forma más común de hacerlo en nuestro proyecto es mediante la inyección del constructor con @Value (funciona con Spring> = 4.3):

 @PropertySource("classpath:config.properties") @Component open class BaseDAO( @Value("\${jdbc.url}") private val url: String, @Value("\${jdbc.username}") private val username: String, @Value("\${jdbc.password}") private val password: String ) { val config: HikariConfig = HikariConfig() init { Class.forName("org.postgresql.Driver").newInstance() config.jdbcUrl = url config.username = username config.password = password config.minimumIdle = 2 config.maximumPoolSize = 20 config.idleTimeout = 60000 } } 

Creo que no necesita este companion object para crear un grupo, solo use una propiedad dentro de su DAO.