真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

springmvc無法支持事務控制如何解決

這篇文章將為大家詳細講解有關spring mvc無法支持事務控制如何解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

成都網站建設哪家好,找創(chuàng)新互聯公司!專注于網頁設計、成都網站建設公司、微信開發(fā)、小程序開發(fā)、集團企業(yè)網站設計等服務項目。核心團隊均擁有互聯網行業(yè)多年經驗,服務眾多知名企業(yè)客戶;涵蓋的客戶類型包括:紗窗等眾多領域,積累了大量豐富的經驗,同時也獲得了客戶的一致贊揚!

spring-mybatis.xml 配置


  
   
    classpath:spring/db.properties
   
  
  
 

 
  
  
  
  

  
  
  
  
  
 


 
 
  
  
  
  

  
  
  
  
  
  
  
  

  
  
  
  

  
  
  
  

  
  
  
  
  
  

  
  
 


 
  
  
   
    
    
   
  
 

 
 
  
  
  
 

 
  
  
 


 
 
  
 

 
 


 
 
  
   
  
 

 
 

 
  
  

  
  
 

注解切換,默認使用oracle數據源

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})

public @interface DataSource {
  String name() default DataSource.oracleDataSource;
  String mySqlDataSource = "mySqlDataSource";
  String oracleDataSource = "oracleDataSource";
}

注解方式實現切換數據源,搜索注釋,更換注釋上面的數據源,支持類注釋和方法注釋

/**
 * Created by eastday on 2017/9/21.
 */
public class DataSourceAspect implements MethodBeforeAdvice,AfterReturningAdvice
{

 @Override
 public void afterReturning(Object returnValue, Method method,
        Object[] args, Object target) throws Throwable {

  MultipleDataSource.clearDataSource();
 }

 @Override
 public void before(Method method, Object[] args, Object target)
   throws Throwable {

  //首先取類上的數據源
  if(method.getDeclaringClass().isAnnotationPresent(DataSource.class) && !method.isAnnotationPresent(DataSource.class)) {

   DataSource datasource = method.getDeclaringClass().getAnnotation(DataSource.class);
   MultipleDataSource.setDataSource(datasource.name());

   //方法上的數據源 優(yōu)先級高于類上的
  } else if (method.isAnnotationPresent(DataSource.class)) {

   DataSource datasource = method.getAnnotation(DataSource.class);
   MultipleDataSource.setDataSource(datasource.name());
  }
  else
  {
   MultipleDataSource.setDataSource(DataSource.oracleDataSource);
  }
 }
}

繼承AbstractRoutingDataSource實現數據源切換

public class MultipleDataSource extends AbstractRoutingDataSource {
 private static final ThreadLocal dataSources = new InheritableThreadLocal();

 public static void setDataSource(String dataSource) {
  dataSources.set(dataSource);
 }

 //清除數據源
 public static void clearDataSource() {
  dataSources.remove();
 }

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

使用demo

@DataSource(name = DataSource.mySqlDataSource)
public class ContentServiceImpl implements IContentService {

 @Autowired
 private IContentDao contentDao;

 @Override
 public Content queryOne(String type) {
  return contentDao.queryOne(type);
 }
}

關于spring mvc無法支持事務控制如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網站標題:springmvc無法支持事務控制如何解決
分享網址:http://weahome.cn/article/iejgds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部