【问题标题】:Setting the Transaction Isolation Level through Spring Boot properties通过 Spring Boot 属性设置事务隔离级别
【发布时间】:2018-04-30 07:03:36
【问题描述】:

我有一个 Spring Boot 应用程序,我通过属性文件配置了大部分属性。但是,我正在寻找是否有办法通过 Spring 引导属性设置 TRANSACTION_ISOLATION_LEVEL。有人可以帮我解决这个问题。

我正在通过以下方式初始化数据源 bean:

@Bean
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource() {
    return buildDataSource("spring.datasource");
}

private DataSource buildDataSource(String propPrefix) {
 Stirng driverClassName = env.getProperty(propPrefix + ".driver-class-name");
 return DataSourceBuilder.create()
        .driverClassName(driverClassName)
        .build();
}

有人可以帮助我了解如何通过属性或在数据源初始化期间指定 TRANSACTION_ISOLATION_LEVEL。

【问题讨论】:

  • AFAIK,这取决于您使用的具体连接池。如果使用 HikariCP,请参阅github.com/brettwooldridge/HikariCP(并搜索 transactionIsolation)。
  • 我正在使用 Spring JDBC 连接池。
  • Spring 没有连接池。如果您的意思是您使用的是 Spring-Boot 所依赖的默认连接池,请查看 Spring-Boot 的文档以了解它是什么,然后查看其文档。

标签: java spring spring-boot datasource transactional


【解决方案1】:

因此,javax.sql.DataSource 没有提供设置默认事务隔离级别的方法。 仍然,您可以做到,但您必须严格执行特定的操作。让我举几个例子:

  1. 如果您使用 DataSource 的 Apache BasicDataSource 实现,那么您可以使用this这是为 DBCP 准备的。
  2. 如果您使用的是 Apache BasicDataSource,但对于 DBCP2,您可以执行this 之类的操作。
  3. 但在大多数情况下,如果我们谈论 Spring,我们会使用 Hikari Connection Pool。因此,对于 HikariCP,您可以使用this 方法。

同样适用于 Spring Boot。让我解释一下 - 使用 Spring Boot 属性文件,您可以设置默认的事务隔离级别,但对于特定的 DataSource,我的意思是这个属性:

spring.datasource.hikari.transaction-isolation

你可能已经注意到了,让你为 HikariCP 设置默认的事务隔离级别(如果你正在使用的话)还有这个属性:

spring.datasource.dbcp2.default-transaction-isolation

允许您为 DBCP2 配置默认隔离级别。

希望对您有所帮助,祝您有美好的一天! :)

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2019-03-17
    • 2013-11-20
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多