Неизменная конфигурация Spring boot - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь найти способ использовать библиотеку Immutables для создания классов данных для хранения конфигурации моего приложения Spring Boot.

Мой класс конфигурации данных:

@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
    String domain();
    String clientId();

    @Value.Redacted
    String clientSecret();
}

В то время как основной класс конфигурации настроен как

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
    private ImmutableAuthConfig auth;

    public AuthConfig getAuth() {
        return auth;
    }

    public void setAuth(ImmutableAuthConfig auth) {
        this.auth = auth;
    }
}

Я пробовал несколько вариантов использования ImmutableAuthConfig или просто AuthConfig в качестве поля, но ничто не улучшило ситуацию. Конфигурация не была выбрана, и поле auth конфигурации остается null после запуска приложения.

Замена содержимого класса AuthConfig традиционным POJO решает проблему, но я бы предпочел неизменный объект. Есть ли способ убедить Spring взаимодействовать с классами, сгенерированными библиотекой Immutables?

1 Ответ

0 голосов
/ 28 июня 2018

Поддержка библиотеки для изменяемых классов обеспечивает подход, очень близкий к тому, что я искал.

@Value.Modifiable
public interface AuthConfig {
    String domain();
    String clientId();

    @Value.Redacted
    String clientSecret();
}

Это создает класс ModifiableAuthConfig, который предоставляет интерфейс, удовлетворяющий JavaBeanBinder Spring, который используется для десериализации конфигурации.

Кроме того, необходимо предоставить экземпляр изменяемого класса AuthConfig, который Spring затем может заполнить:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
    private ImmutableAuthConfig auth = ModifiableAuthConfig.create();

    public AuthConfig getAuth() {
        return auth;
    }
}

Любое использование загруженной конфигурации может впоследствии осуществляться через интерфейс AuthConfig, который не обеспечивает методы мутации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...