package org.whm.appcore;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.interceptor.TransactionInterceptor;
@Component
public class TxConfig {
// 创建事务管理器
@Bean(name = "txManager")
public DataSourceTransactionManager getTx(@Autowired DataSource ds) {
DataSourceTransactionManager dsTx = new DataSourceTransactionManager(ds);
return dsTx;
}
// 创建事务通知。。
@Bean(name = "txAdvice")
public TransactionInterceptor getAdvisor(@Qualifier("txManager") DataSourceTransactionManager txManager)
throws Exception {
TransactionInterceptor tsi = new TransactionInterceptor();
Properties properties = new Properties();
properties.setProperty("get*", "PROPAGATION_REQUIRED,-Exception,readOnly");
properties.setProperty("add*", "PROPAGATION_REQUIRED,-Exception,readOnly");
properties.setProperty("save*", "PROPAGATION_REQUIRED,-Exception,readOnly");
properties.setProperty("update*", "PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception,readOnly");
tsi.setTransactionAttributes(properties);
return tsi;
}
@Bean
public BeanNameAutoProxyCreator txProxy() {
BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();
creator.setInterceptorNames("txAdvice");
creator.setBeanNames("*Service", "*ServiceImpl");
creator.setProxyTargetClass(true);
return creator;
}
}