【问题标题】:How do I use disable connection pooling in Spring boot app?如何在 Spring Boot 应用程序中使用禁用连接池?
【发布时间】:2017-06-22 02:08:04
【问题描述】:

我在我的 Application.java 中创建了一个这样的数据源:

@Bean
@ConfigurationProperties("datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

但它返回一个带池的托管数据源。由于我正在使用的特定类型的数据库,我想禁用池。

最简单的方法是什么?

【问题讨论】:

标签: spring spring-boot


【解决方案1】:

这是我使用的一个解决方案,它改编自 Liquibase 的 SpringBoot 2.5 自动配置,这里讨论了它的案例:https://github.com/spring-projects/spring-boot/issues/24944 (代码参考:https://github.com/wilkinsona/spring-boot/blob/gh-24944/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration.java

@Bean
@ConfigurationProperties("datasource")
public DataSourceProperties dataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
    String url = dataSourceProperties.determineUrl();
    String user = dataSourceProperties.determineUsername();
    String password = dataSourceProperties.determinePassword();
    String driverClassName = DatabaseDriver.fromJdbcUrl(url).getDriverClassName();    
    return DataSourceBuilder.create().type(SimpleDriverDataSource.class).url(url).username(user)
        .password(password).driverClassName(driverClassName).build();
}

【讨论】:

    【解决方案2】:

    DataSourceBuilder 有一个名为type(Class) 的方法,您可以在其中指定要用作 DataSource 实现的类。因此,在您的情况下,它可能如下所示:

    @Bean
    @ConfigurationProperties("datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().type(SimpleDriverDataSource.class).build();
    }
    

    【讨论】:

    • 我尝试了你的建议,但我有一个例外:java.lang.IllegalArgumentException: Driver must not be null at org.springframework.util.Assert.notNull(Assert.java:193) ~[ spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]。我在 DataSourceBuilder 上设置了 driverName。一些想法?谢谢
    • DataSourceBuilder 方法不起作用,因为 SimpleDriverDataSource 的默认构造函数不会实例化驱动程序。只需使用 SimpleDriverDataSource 的构造函数/设置器,并为 postgresql 等指定驱动程序类,如 org.postgresql.Driver.class 等。
    • @dunni SimpleDriverDataSource 和 DriverManagerDataSource 类都没有提供 close 方法。这是否意味着我们不需要关闭连接?
    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2020-01-13
    • 2019-08-05
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多