java - jooQ spring boot 多模式(读写分离)

标签 java sql spring-boot jooq

我想在 Spring Boot 中使用 jooQ。我有主从架构,所以我想将 jooQ 与主从架构一起使用(主用于写入,从用于读取)。

我应该如何进行。现在我使用 pom.xml 来配置 jooQ

<configuration>
    <jdbc>
        <driver>com.mysql.jdbc.Driver</driver>
        <url>${datasource.primary.url}</url>
        <user>${datasource.primary.username}</user>
        <password>${datasource.primary.password}</password>
    </jdbc>
    <generator>
        <name>org.jooq.util.DefaultGenerator</name>
        <database>
            <name>org.jooq.util.mysql.MySQLDatabase</name>
            <includes>.*</includes>
            <excludes/>
            <inputSchema>jpa</inputSchema>
        </database>
        <generate>
            <deprecated>false</deprecated>
        </generate>
        <target>
            <packageName>com.gensrc.model</packageName>
            <directory>src/main/java</directory>
        </target>
    </generator>
</configuration>

然后 Autowiring DSLContext

但是我现在如何更改我的代码。

最佳答案

来自您的评论:

I want to route all my write queries to master & all my read queries to slave.

我不太确定 write=master 和 read=slave 之间的这种硬区分是个好主意。有时,您可能需要在相同的事务边界内从主设备读取数据(即读回未提交的数据),在这种情况下,将读取查询发送到从设备会产生错误的结果。

因此,实现此路由的最佳位置是拥有单独的 DataSource 实例,并将它们相应地注入(inject)到 jOOQ 中。然后,您将在服务层中显式地、透明地分离 jOOQ 的主从服务器。

当然,您可以使用 jOOQ ExecuteListener 来实现您最初的要求。并根据查询类型 ( ExecuteContext.type() ) 为 jOOQ 提供正确的 JDBC Connection,但同样,我认为这很快就会中断。

关于java - jooQ spring boot 多模式(读写分离),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255491/

相关文章:

MYSQL更新具有不同值的单列

php - 如何防止 PHP 中的 SQL 注入(inject)?

c# - 在 C# 中过滤 SQL 后值为零

java - 如何在 Spring 中发布用户列表

java - JAXB 编码器无参数默认构造函数

java - Android Fatal : Error java. 创建 Socket 时单击按钮时出现 lang.IllegalStateException

spring-boot - 创建后立即删除RabbitMQ队列。为什么?

java - 如何在 Spring Boot 中使存储库 findBy() 具有多个字段?

输入一百万时 Java 卡住

java - Proguard injars 和 libraryjars