Back off DevTools' JDBC and R2DBC support when modules are missing

DevToolsDataSourceAutoConfiguration and DevToolsR2dbcAutoConfiguration
were only guarded by classes from the JDK and r2dbc-spi respectively.
When a single user-defined DataSource or ConnectionFactory bean was
present, their conditions went on to reference classes from
spring-boot-jdbc or spring-boot-r2dbc. Both are optional dependencies
of spring-boot-devtools, so startup failed with a NoClassDefFoundError
when they were absent.

This commit adds a class from each module to the class conditions.
Without the modules the conditions could never match, so this only
turns the failure into a back-off.

See gh-51872

Signed-off-by: Kosuke Yanagihara <11373191+ksky8864@users.noreply.github.com>
This commit is contained in:
Kosuke Yanagihara
2026-09-28 12:44:47 +02:00
committed by Stéphane Nicoll
parent 8c7c372dcb
commit f0987da4bb
4 changed files with 105 additions and 2 deletions
@@ -61,7 +61,7 @@ import org.springframework.util.Assert;
* @author Andy Wilkinson
* @since 1.3.3
*/
@ConditionalOnClass(DataSource.class)
@ConditionalOnClass({ DataSource.class, DataSourceProperties.class })
@ConditionalOnEnabledDevTools
@Conditional(DevToolsDataSourceCondition.class)
@AutoConfiguration(afterName = "org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration")
@@ -51,7 +51,7 @@ import org.springframework.util.Assert;
* @author Phillip Webb
* @since 2.5.6
*/
@ConditionalOnClass(ConnectionFactory.class)
@ConditionalOnClass({ ConnectionFactory.class, R2dbcAutoConfiguration.class })
@ConditionalOnEnabledDevTools
@Conditional(DevToolsConnectionFactoryCondition.class)
@AutoConfiguration(afterName = "org.springframework.boot.r2dbc.autoconfigure.R2dbcAutoConfiguration")