Closed as not planned
Description
It is higher level abstraction of #27834
Currently It's a bit hard to add extra service without back off default one, especially for RedisAutoConfiguration
.
Requirement:
- keep default service
AutoConfiguration
in use - duplicate default service with a prefix applied to beanName, configuration properties can be overriden if prefixed configuration key exists
- mark default service bean as primary (OPTIONAL)
Possible solution:
Provide a dedicated BeanDefinitionRegistryPostProcessor
to duplicate
@RequiredArgsConstructor
public class AutoConfigurationDuplicator implements BeanDefinitionRegistryPostProcessor {
private final Class<?> autoConfigurationClass;
private final String prefix;
private final boolean markDefaultAsPrimary;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
// TODO duplicate all BeanDefinitions belong to autoConfigurationClass with
// prefix, mark default BeanDefinitions as primary if markDefaultAsPrimary is true
}
}
then duplicate service in application configuration
@Configuration
public class MyConfiguration {
@Autowired
@Qualifier("anotherStringRedisTemplate") // anotherStringRedisTemplate is available now
private StringRedisTemplate anotherStringRedisTemplate;
@Bean
static AutoConfigurationDuplicator anotherRedisConfiguration() {
return new AutoConfigurationDuplicator(RedisAutoConfiguration.class, "another", false);
}
}
spring.data.redis:
host: redis.svc.default.cluster.local
database: 1
another.spring.data.redis:
# host: redis.svc.default.cluster.local default to spring.data.redis
database: 2