实现数据库读写分离步骤
1 mysql数据库 设置 主从 日志同步
2 spring配置文件配置 2个数据源 然后放到一个datasource, 其他的txmanager和sessionfactory直接使用datasource
3 新建一个类 继承 AbstractRoutingDataSource 重写determineCurrentLookupKey方法
4 写一个 dbhelper类, 用来 设置 和获取 数据源
5 在controller层 需要使用数据库的地方 手工设置 数据源 DBContextHolder.setDbType(DBContextHolder.DB_RW 或者 DB_R);
读写分离最好不要用注解的方案, 应该在CONTROLLER层 手动 切换
因为 比如更新信息, 更新到主库,更新完后 为了防止数据延迟,读到旧数据,所以应该接着读主库, 而不是去读从库。
1 MAVEN 配置文件
<properties>
<!-- spring版本号 -->
<spring.version>4.2.1.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.3.0</mybatis.version>
<!-- spring mybatis融合包 版本号 -->
<mybatis_spring.version>1.2.3 </mybatis_spring.version>
<!-- log4j日志文件管理包版本 -->
<slf.version>1.7.10</slf.version>
</properties>
<dependencies>
<!-- mybatis逆向工程 需要使用的包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--test 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>compile</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId>
<version>${spring.version}</version> </dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>