【问题标题】:Spring + R2DBC: How to close DatabaseClient and TransactionalOperator?Spring + R2DBC:如何关闭 DatabaseClient 和 TransactionalOperator?
【发布时间】:2020-01-02 03:15:38
【问题描述】:

我可以使用以下方法在我的 Spring Boot 应用程序中创建 DatabaseClient 和 TransactionalOperator:

@Autowired public App(ConnectionFactory factory) {
    DatabaseClient dc = DatabaseClient.create(factory);
    TransactionalOperator to = TransactionalOperator.create(new R2dbcTransactionManager(factory));
}

但是如何关闭 DatabaseClient 和 TransactionalOperator 并释放连接/资源?

这是在 Spring Boot 应用程序中为 R2DBC 创建数据库连接的最佳方式吗?

【问题讨论】:

    标签: java spring spring-data r2dbc spring-data-r2dbc


    【解决方案1】:

    TL;DR:除非您使用 connection pool,否则没有什么可关闭的。

    Spring Data R2DBC 的DatabaseClient 为每个调用的操作分配一个连接。它类似于JdbcTemplate 要求其DataSource 为您调用的每个方法创建一个Connection。一旦方法调用完成,它就会释放(关闭)连接。

    同样适用于DatabaseClient。操作完成后,底层连接将关闭。

    当使用TransactionalOperator@Transactional 时,行为会略有变化,但类似于 JDBC:R2DBC 连接在活动事务期间绑定到事务本身,这使得DatabaseClient 可以重用相同的连接,直到事务完成.事务完成后,释放绑定的连接。

    【讨论】:

    • 为什么要关闭池中的连接?我认为它已被DatabaseClient 关闭为常规连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2019-08-18
    • 2022-07-30
    • 2021-03-17
    • 2021-02-15
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多