| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package com.util.BasesSource;
- import com.dao.DataColumnMapper;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.model.bo.ToSql;
- import org.aspectj.lang.JoinPoint;
- import org.aspectj.lang.annotation.After;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.core.annotation.Order;
- import org.springframework.stereotype.Component;
- import java.io.IOException;
- /**
- * @Author caiChaoqi
- * @Description 动态数据源通知
- * @Date 2018-06-23
- */
- @Aspect
- @Order(-1)//保证在@Transactional之前执行
- @Component
- public class DynamicDattaSourceAspect {
- @Autowired
- ObjectMapper objectMapper;
- @Autowired
- DataColumnMapper dataColumnMapper;
- //改变数据源
- @Before("@annotation(TargetDataSource)")
- public void changeDataSource(JoinPoint joinPoint) {
- Object[] arr = joinPoint.getArgs();
- String joinStr = null;
- ToSql toSql = new ToSql();
- // System.out.println("数据源用户名"+baseName);
- try {
- joinStr = objectMapper.writeValueAsString(arr[1]);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
- try {
- toSql = objectMapper.readValue(joinStr, ToSql.class);
- } catch (IOException e) {
- e.printStackTrace();
- }
- int baseId = toSql.getId();
- if (!DynamicDataSourceContextHolder.isContainsDataSource(String.valueOf(baseId))) {
- //joinPoint.getSignature() :获取连接点的方法签名对象
- System.out.println("数据源 " + String.valueOf(baseId) + " 不存在使用默认的数据源 -> " + joinPoint.getSignature());
- } else {
- System.out.println("使用数据源:" + String.valueOf(baseId));
- DynamicDataSourceContextHolder.setDataSourceType(String.valueOf(baseId));
- }
- }
- @After("@annotation(TargetDataSource)")
- public void clearDataSource(JoinPoint joinPoint) {
- System.out.println("清除数据源!");
- DynamicDataSourceContextHolder.clearDataSourceType();
- }
- }
|