使用 Jooq 配置 2 个数据源的最佳实践

Sni*_*oti 5 jooq spring-boot

我们正在拆分数据库查询的读写端。实现了如提到的jooQ spring boot 多重架构(读写分离)

我们的配置:

  • 我们正在使用 2 dslContext是SpringBoot 自动配置Writer提供的默认 dslContext 。
  • Reader我们通过使用不同数据源派生默认上下文的现有配置来创建 dslContext。
public DSLContext getReaderContext(@Qualifier("readerDataSource") DataSource readerDataSource, DSLContext dslContext) {
    return DSL.using(dslContext.configuration().derive(readerDataSource));
}
Run Code Online (Sandbox Code Playgroud)

因此,Reader 上下文在配置中使用相同的ExecuteListener,TransactionListener实例。Settings这是为了减少手动配置。

我们尝试过的其他配置:

public DSLContext getReaderContext(@Qualifier("readerDataSource") DataSource readerDataSource, JooqProperties jooqProperties, Settings settings) {
    return DSL.using(readerDataSource, jooqProperties.determineSqlDialect(readerDataSource), settings)
}
Run Code Online (Sandbox Code Playgroud)

这里所有的配置实例都是不同的。但手工工作是存在的。就像阅读器上下文中没有ExecuteListener(Default JooqExceptionTranslator) 一样,因此如果需要,我们必须添加手动配置。

  1. 配置 2 个或更多 dslContext 是否有最佳实践?
  2. 此外,我们的读取器数据源无法执行事务(AWS Read Replica),因为我们使用与写入器相同的配置,可以为读取器使用 SpringTransactionProvider 吗?