【问题标题】:SQLServerDataSource in spring boot app with connection pool带有连接池的 Spring Boot 应用程序中的 SQLServerDataSource
【发布时间】:2020-01-13 08:05:04
【问题描述】:

如果我理解这个答案,我正在尝试使用SQLServerDataSource 设置池 https://stackoverflow.com/a/25573035/1262568

public DataSource dataSource() {
    DataSourceBuilder factory = DataSourceBuilder
            .create(this.properties.getClassLoader())
            .driverClassName(this.properties.getDriverClassName())
            .url(this.properties.getUrl())
            .username(this.properties.getUsername())
            .password(this.properties.getPassword());
    return factory.build();
}

从以这种方式创建的DataSource 获取连接将使用可用连接池之一返回池连接。 但是,如果我想使用 SQLServerDataSource 而不是 SQLServerDataSource 它还会自动使用其中一个可用的连接池吗?

public DataSource dataSource() {
SQLServerDataSource sqlServerDataSource = new SQLServerDataSource();
        sqlServerDataSource.setUser(UserName);
        sqlServerDataSource.setPassword(Password);
        sqlServerDataSource.setURL(Url);
        return sqlServerDataSource;
}

【问题讨论】:

    标签: java sql-server spring-boot tomcat


    【解决方案1】:

    它还会自动使用一个可用的连接池吗?

    不,不会的。 SQLServerDataSource 是 SQL Server(驱动程序)特定类,而 DataSourceBuilder 是 Spring 类。只有后者知道 Spring 及其配置及其配置的连接池。

    您是否有理由需要使用SQLServerDataSource

    要从池中访问本机连接,请使用

    SQLServerConnection conn = connection.unwrap(SQLServerConnection.class);
    

    记得在connection而不是conn上调用close(),这样连接就可以返回到池中。

    【讨论】:

    • 不知道有没有原因。这是一个遗留代码,将尝试更改它。
    • 使用 JDBC,您几乎总是只使用规范的接口(@98​​7654328@、DataSourceResultSet 等)。仅当您尝试执行无法通过常规 J​​DBC 实现的复杂操作(即非常特定于数据库的操作)时,才需要深入了解实际的驱动程序类。
    • 因为使用了 bulkinsert 连接必须从 SQLServerDataSource 选择
    • 在这种情况下,您应该能够使用connection.unwrap(SQLConnection.class)(或任何实现类)在您需要的地方获取本机连接。
    猜你喜欢
    • 2019-08-05
    • 2020-02-05
    • 2019-12-16
    • 1970-01-01
    • 2017-06-22
    • 2018-04-16
    • 2019-12-14
    • 1970-01-01
    • 2018-10-05
    相关资源
    最近更新 更多