Avoid eager init when evaluating DevToolsDataSourceCondition
Previously, DevToolsDataSourceCondition called getBeanNamesForType(Class) which could trigger unwanted initialization of lazy init singletons and objects created by FactoryBeans. This commit updates DevToolsDataSourceCondition to prohibit eager init when getting the names of the beans of a particular type. Fixes gh-20430
This commit is contained in:
@@ -180,11 +180,11 @@ public class DevToolsDataSourceAutoConfiguration {
|
||||
@Override
|
||||
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||
ConditionMessage.Builder message = ConditionMessage.forCondition("DevTools DataSource Condition");
|
||||
String[] dataSourceBeanNames = context.getBeanFactory().getBeanNamesForType(DataSource.class);
|
||||
String[] dataSourceBeanNames = context.getBeanFactory().getBeanNamesForType(DataSource.class, true, false);
|
||||
if (dataSourceBeanNames.length != 1) {
|
||||
return ConditionOutcome.noMatch(message.didNotFind("a single DataSource bean").atAll());
|
||||
}
|
||||
if (context.getBeanFactory().getBeanNamesForType(DataSourceProperties.class).length != 1) {
|
||||
if (context.getBeanFactory().getBeanNamesForType(DataSourceProperties.class, true, false).length != 1) {
|
||||
return ConditionOutcome.noMatch(message.didNotFind("a single DataSourceProperties bean").atAll());
|
||||
}
|
||||
BeanDefinition dataSourceDefinition = context.getRegistry().getBeanDefinition(dataSourceBeanNames[0]);
|
||||
|
||||
Reference in New Issue
Block a user