@RefreshScope побочные эффекты - автоконфигурация, автоматическое подключение - PullRequest
0 голосов
/ 10 июня 2019

Я использую аннотацию @RefreshScope для обновления бобов после изменения в Spring Config Server. Это отлично работает, но в некоторых случаях имеет побочные эффекты.

Первый случай: у меня есть компонент CustomPermissionEvaluator, который реализует PermissionEvaluator (spring-security), чтобы переопределить реализацию по умолчанию (DenyAllPermissionEvaluator).

import org.springframework.security.access.PermissionEvaluator;

@Component
public class CustomPermissionEvaluator implements PermissionEvaluator {

    @Override
    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {

Если я аннотирую CustomPermissionEvaluator с помощью @RefreshScope, Spring больше не принимает его во внимание, и реализация по умолчанию выбирается для этой пользовательской реализации.

Второй случай: у меня есть следующий компонент:

@Bean
@Profile("enable_mongo_ssl")
public MongoClientOptions mongoClientOptions() {
    return getMongoClientOptionsBuilder()
            .build();
    }

Если я аннотирую его с помощью @RefreshScope, MongoAutoConfiguration не принимает его при сборке MongoClient, и вместо него используется стандартная mongoClientOptions без сертификата.

Последний случай: У меня определен объект сопоставления:

@Bean
@Primary
public ObjectMapper defaultObjectMapper() {
    return ObjectMapperProvider.defaultObjectMapper();
}

Если я аннотирую это с помощью @RefreshScope, я получаю следующую ошибку:

more than one 'primary' bean found among candidates: [defaultObjectMapper, jacksonObjectMapper]

Полагаю, что эти примеры связаны с тем фактом, что аннотация @RefreshScope вызывает прокси-компонент. Но есть ли чистый способ продолжать использовать эту аннотацию и заставить эти функции работать?

...