Я использую аннотацию @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 вызывает прокси-компонент.
Но есть ли чистый способ продолжать использовать эту аннотацию и заставить эти функции работать?