接
本文介绍使用spring-data-jpa连接mycat实现应用的读写分离.
原文地址:spring-data-jpa连接mycat实现应用的读写分离
系统环境
- spring-boot 1.4.3-RELEASE
- jdk1.8
进入正题
application.yml配置文件
这个很传统,指定mysql以及datasource就可以.
特别说一句:mycat跟应用是相互独立的,mycat后边的mysql集群对于应用来说就相当于一台单独的mysql server,所以,不要纠结与应用该用什么数据库连接工具
spring:
application:
name: mycat-jpa
datasource:
platform: mysql
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:8066/mall?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false
username: root
password: jiabin
jpa:
hibernate:
ddl-auto: none
show-sql: true
JpaTransactionConfig类文件
这个配置类是重点.
在使用mycat时需要关闭spring-data-jpa默认的事务管理机制.
原因如下:
- mycat对于开启了事务的查询,插入等操作,都会走主库
- spring-data-jpa默认的事务管理机制对查询操作执行的是
只读事务
,话说只读事务
也是事务啊
鉴于以上两个原因.我们就得使用enableDefaultTransactions = false
来关闭spring-data-jpa默认的事务管理机制.
好吧,既然我们关闭了默认的事务管理机制,我们就得使用@Transactional
来开启声明式事务处理.哈哈,也就是说,我们需要用添加@Transactional
注解的硬编码方式来实现事务管理.见SalesmanService
package jpa.mycat;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* Created by ssab on 17-1-4.
*/
@EnableJpaRepositories(basePackages = "jpa.mycat", enableDefaultTransactions = false)
@Configuration
public class JpaTransactionConfig {
}
弄懂了这两个配置,剩下的就简单了.
Salesman实体类
package jpa.mycat;
import org.hibernate.annota