Skip to content

DataSourceBuilder throws an UnsupportedDataSourcePropertyException when trying to derive a DataSource from an unknown DataSource type #27295

@ghost

Description

In our application (Spring Boot 2.5.2) we are trying to use com.amazonaws.xray.sql.TracingDataSource as the primary DataSource; it's essentially a wrapper around a regular data source to enable AWS X-Ray metrics.
During startup, the application tries to create a derived DataSource from it (DataSourceBuilder.derivedFrom(dataSource), the Liquibase starter is doing this).
The TracingDataSource is not recognized as a source for MappedDataSourceProperties, so we end up with a ReflectionDataSourceProperties, trying to to find the getters for the properties by reflection. However, it is erroneously looking for getter methods with one String parameter (DataSourceProperty:293-294). Even if such getters were to exist, they are later on (ReflectionDataSourceProperties:553) called with no parameters, resulting in an IllegalArgumentException anyway.

Example configuration to trigger the issue:

 @Bean(name = "dataSource") @Primary public DataSource tracingDataSource(HikariDataSource dataSource) { return new TracingDataSource(dataSource) { public String getUrl() { return ((HikariDataSource) delegate).getJdbcUrl(); } ... }; } @Bean public HikariDataSource hikariDataSource(DataSourceProperties properties) { HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; } @Bean public DataSource derived(@Qualifier("dataSource") DataSource dataSource) { DataSourceBuilder<?> builder = DataSourceBuilder.derivedFrom(dataSource).type(SimpleDriverDataSource.class); return builder.build(); // UnsupportedDataSourcePropertyException: Unable to find suitable method for url } 

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions