diff --git a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java index 6e446e38f7..006d733b7a 100644 --- a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java +++ b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java @@ -140,6 +140,8 @@ public class DevToolsDataSourceAutoConfiguration { BeanDefinition dataSourceDefinition = context.getRegistry() .getBeanDefinition(dataSourceBeanNames[0]); if (dataSourceDefinition instanceof AnnotatedBeanDefinition + && ((AnnotatedBeanDefinition) dataSourceDefinition) + .getFactoryMethodMetadata() != null && ((AnnotatedBeanDefinition) dataSourceDefinition) .getFactoryMethodMetadata().getDeclaringClassName() .startsWith(DataSourceAutoConfiguration.class.getName())) { diff --git a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java index 61d341cb92..0d7a29c454 100644 --- a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java +++ b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java @@ -26,6 +26,7 @@ import javax.sql.DataSource; import org.junit.Test; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -72,6 +73,20 @@ public class AbstractDevToolsDataSourceAutoConfigurationTests { } } + @Test + public void emptyFactoryMethodMetadataIgnored() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + + DataSource dataSource = mock(DataSource.class); + AnnotatedGenericBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition( + dataSource.getClass()); + context.registerBeanDefinition("dataSource", beanDefinition); + context.register(DataSourcePropertiesConfiguration.class); + context.register(DevToolsDataSourceAutoConfiguration.class); + context.refresh(); + context.close(); + } + protected final Statement configureDataSourceBehaviour(DataSource dataSource) throws SQLException { Connection connection = mock(Connection.class);