admin管理员组

文章数量:1307835

I created an example project to try vibur DBCP support in the Spring 3.5.0-M1, it adds Web, JDBC API, TestContainers, Postgres as dependencies, and use Java 21 and Maven to build the project.

The example project can be found here,

Currently, vibur support only exists in the DataSourceBuilder, there is no autoconfiguration like other db pools.

There is a generated Postgres test containers config file which configured a Postges docker instance for dev/test stages.

The DemoApplication class is a startup entry for the application with the generated Postgres instance and empty configuration of connection details(url/username/password), it picked up the default Hiariku pool, and worked well.

@TestConfiguration(proxyBeanMethods = false)
class TestcontainersConfiguration {

    @Bean
    @ServiceConnection
    PostgreSQLContainer<?> postgresContainer() {
        return new PostgreSQLContainer<>(DockerImageName.parse("postgres:latest"))
                .withExposedPorts(5432);
    }

}

And ViburDataSourceTest use traditional Testcontainers annotations and setup the connection details by Spring DynamicPropertyRegistry, also worked well.

My problem is switching to the newly configured vibur-based DataSource configured with DataSourceBuilder, there is an example for testing Repository - ProductRepository, without the connection URL, etc, it should start the postgres and configure the connection details, but it does not work at all.

# application-test.properties
#spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
#spring.datasource.username=user
#spring.datasource.password=password
spring.datasource.driver-class-name=.postgresql.Driver
logging.level.vibur=DEBUG

The Postgres test containers service did not configure the connection details as expected, the following items failed with null values.

 @Test
 void testDataSource() {
        log.debug("Test dataSourceProperties: url={}, username={}, password={}, driverClassName={}",
                dataSourceProperties.getUrl(),
                dataSourceProperties.getUsername(),
                dataSourceProperties.getPassword(),
                dataSourceProperties.getDriverClassName());
        assertThat(dataSourceProperties.getUrl()).isNotNull();
        assertThat(dataSourceProperties.getUsername()).isNotNull();
        assertThat(dataSourceProperties.getPassword()).isNotNull();
 }

Compared to the DemoApplication which used the same Postgres test containers config but used the default HiariKu pool, it started successfully.

本文标签: DataSourceBuilder and Spring TestcontainersStack Overflow