I'm trying to find a way to use the Immutables library to create data classes for holding the configuration of my Spring Boot application.
My data configuration class is:
@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
String domain();
String clientId();
@Value.Redacted
String clientSecret();
}
While the main configuration class is set up as
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
private ImmutableAuthConfig auth;
public AuthConfig getAuth() {
return auth;
}
public void setAuth(ImmutableAuthConfig auth) {
this.auth = auth;
}
}
I've tried some variations of using either ImmutableAuthConfig
or just AuthConfig
as a field, but nothing improved the situation. The configuration did not get picked up, and the auth
field of the configuration remains null
after application start-up.
Replacing the contents of the AuthConfig
class with a traditional POJO solves the issue, but I would prefer an immutable object. Is there any way to convince Spring to interface with the classes generated by the Immutables library?