ssm中使用两个数据库,通过注解方式切换数据源

1、在配置文件jdbc.properties中,配置两个数据库例如:


jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.0.154:1433;DatabaseName=PenalizeAPI_UP
jdbc.username=chn
jdbc.password=ChangNeng!2369

jdbc.driverClassName_test=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url_test=jdbc:sqlserver://192.168.0.160:1433;databaseName=Penalize20170416
jdbc.username_test=chn
jdbc.password_test=Changneng12369


druid.initialSize=50
druid.maxActive=100
druid.minIdle=15

2、在spring-Mybatis.xml中加载jdbc文件,配置datasource。








       
       
       
       
       
       
       
        
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
         
       
       

 
     
      
     
       
       
       
       
       
       
       
        
         
         
         
         
         
         
  
   
 



















       





















3、自定义数据库切换类

public class MultipleDataSource extends AbstractRoutingDataSource {


private static final ThreadLocal dataSourceKey = new InheritableThreadLocal();

public static void setDataSourceKey(String dataSource){
dataSourceKey.set(dataSource);
}

@Override
protected Object determineCurrentLookupKey() {
return dataSourceKey.get();
}

}

4、设置注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@Documented
public @interface DataSwitch {
String dataSource() default "";
}

5、编写AOP类

@Aspect
@Component
public class DataSwitchAop {
//@Pointcut()
//@Pointcut("execution(public * com.changneng.penalize.business.service.impl.*(..))")
public void execute(){
}

@Before("@annotation(com.changneng.penalize.business.aop.DataSwitch)")
public void dataSwitch(JoinPoint joinPoint){
Signature signature = joinPoint.getSignature();

MethodSignature methodSignature =(MethodSignature) signature;
   Method method = methodSignature.getMethod();
   DataSwitch data = null;
   if(method!=null){
    data = method.getAnnotation(DataSwitch.class);
   }
   String dataSource = data.dataSource();
System.out.println("datasource...."+dataSource);
if(dataSource!=null){
MultipleDataSource.setDataSourceKey(dataSource);
}
}
}

6、在哪个需要切换数据库的Service中加上注解例如:

//切换数据库
@DataSwitch(dataSource="dateSource_second")
public int getBaseID(String areaCode,String enterPriseID){
//MultipleDataSource.setDataSourceKey("dateSource_second");
return dbUtilMapper.selectBaseID(areaCode,enterPriseID);
}


你可能感兴趣的:(java)