springboot整合mycat
动态数据源项目整合
Maven依赖信息
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.23</version> </dependency> </dependencies>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
application.yml
spring: datasource: ###可读数据源 select: jdbc-url: jdbc:mysql://192.168.212.204:8066/TESTDB1 driver-class-name: com.mysql.jdbc.Driver username: user password: user ####可写数据源 update: jdbc-url: jdbc:mysql://192.168.212.204:8066/TESTDB1 driver-class-name: com.mysql.jdbc.Driver username: user password: user type: com.alibaba.druid.pool.DruidDataSource |
DataSourceContextHolder
@Lazy(false) public class DataSourceContextHolder { // 采用ThreadLocal 保存本地多数据源 private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
// 设置数据源类型 public static void setDbType(String dbType) { contextHolder.set(dbType); }
public static String getDbType() { return contextHolder.get(); }
public static void clearDbType() { contextHolder.remove(); }
} |
DataSourceConfig
@Configuration public class DataSourceConfig {
// 创建可读数据源 @Bean(name = "selectDataSource") @ConfigurationProperties(prefix = "spring.datasource.select") // application.properteis中对应属性的前缀 public DataSource dataSource1() { return DataSourceBuilder.create().build(); }
// 创建可写数据源 @Bean(name = "updateDataSource") @ConfigurationProperties(prefix = "spring.datasource.update") // application.properteis中对应属性的前缀 public DataSource dataSource2() { return DataSourceBuilder.create().build(); }
} |
DynamicDataSource
//在Spring 2.0.1中引入了AbstractRoutingDataSource, 该类充当了DataSource的路由中介, 能有在运行时, 根据某种key值来动态切换到真正的DataSource上。
@Component @Primary public class DynamicDataSource extends AbstractRoutingDataSource { @Autowired @Qualifier("selectDataSource") private DataSource selectDataSource;
@Autowired @Qualifier("updateDataSource") private DataSource updateDataSource;
/** * 这个是主要的方法,返回的是生效的数据源名称 */ @Override protected Object determineCurrentLookupKey() { System.out.println("DataSourceContextHolder:::" + DataSourceContextHolder.getDbType()); return DataSourceContextHolder.getDbType(); }
/** * 配置数据源信息 */ @Override public void afterPropertiesSet() { Map<Object, Object> map = new HashMap<>(); map.put("selectDataSource", selectDataSource); map.put("updateDataSource", updateDataSource); setTargetDataSources(map); setDefaultTargetDataSource(updateDataSource); super.afterPropertiesSet(); } } |
SwitchDataSourceAOP
@Aspect @Component @Lazy(false) @Order(0) // Order设定AOP执行顺序 使之在数据库事务上先执行 public class SwitchDataSourceAOP { // 这里切到你的方法目录 @Before("execution(* com.mayikt.service.*.*(..))") public void process(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); if (methodName.startsWith("get") || methodName.startsWith("count") || methodName.startsWith("find") || methodName.startsWith("list") || methodName.startsWith("select") || methodName.startsWith("check")) { DataSourceContextHolder.setDbType("selectDataSource"); } else { // 切换dataSource DataSourceContextHolder.setDbType("updateDataSource"); } } } |
(adsbygoogle = window.adsbygoogle || []).push({});
- Spring Boot整合spring-ws开发web service
- springboot+rabbitmq整合示例程
- spring-boot 整合mybatis
- spring boot 整合 thymeleaf
- SpringBoot(十二)-- 整合Redis
- Spring boot + mysql +mybatis 配置整合实例
- Spring Boot整合Kafka的简单用例
- springboot整合mybatis
- spring boot整合JMS(ActiveMQ实现)
- springboot整合shiro
- springboot整合dubbo+zookeeper
- 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- (指定分词器)
- Spring boot+ Mybatis 完美整合之注解版
- thymeleaf :springboot整合mybatis的web项目中使用html而不是jsp当页面渲染
- springboot整合jd freemarker
- Spring-Boot整合mybatis(二),使用阿里的druid包,进行监控SQL执行速度
- spring boot整合cxf发布webservice服务和spring boot整合cxf客户端调用webservice服务
- Spring-boot整合Swagger 实现前后端分离,前后端分离测试
- spring boot + jta + druid整合demo
- Springboot整合swagger2项目的部署问题