Search code examples
kotlinmicronaut

How to make ConfigurationProperties fields mandatory in Micronaut?


I am using ConfigurationProperties to load properties to my application.

@ConfigurationProperties("foo.properties") 
class WaterStreetProperties {    
 lateinit var fooProp: String  
 lateinit var fooProp2: String   
 lateinit var fooProp3: String   
 lateinit var fooProp4: String 
}

I want to make them mandatory and the application should fail if a property is missing. How can I do this?

  • Micronaut doesn't want to start if I use data classes.
  • It doesn't work if I use final fields to force the properties to be populated.
  • Giving value in the constructor doesn't work either.

Solution

  • You may actually use data class with @NotEmpty constraints like shown below as long all fields are mutable (var generates both getter and setter).

    @Context causes bean to be loaded into application context during startup. If any validation errors, app will fail during startup.

    import io.micronaut.context.annotation.Context
    import io.micronaut.context.annotation.ConfigurationProperties
    import javax.validation.constraints.NotEmpty
    
    @Context
    @ConfigurationProperties("foo.properties") 
    data class WaterStreetProperties(
        @field:NotEmpty var fooProp: String = "",  
        @field:NotEmpty var fooProp2: String = "",   
        @field:NotEmpty var fooProp3: String = "",   
        @field:NotEmpty var fooProp4: String = "" 
    )
    

    Tested with MN 3.8.7