数据源一:
package com.example.zhujie.configure;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.logging.Log4jImpl;
import org.apache.ibatis.logging.slf4j.Slf4jImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.zhujie.dao",sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlProperties {
private String mybatisLocation = "classpath:/mapper/**/*.xml";
@Bean("druidDataSource")
public DataSource getDataSource() {
// 创建 dataSource 接口的实现类
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl("jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false");
datasource.setPassword("111222");
datasource.setUsername("root");
return datasource;
}
@Bean("mysqlSqlSessionFactory")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("druidDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 配置mybatis 的mapper 文件
sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mybatisLocation));
// mybatis 在mapper文件中实体字段映射自动按驼峰命名规则对应实体字段
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
// mybatis映射map的时候,字段值为null情况也返回
sqlSessionFactoryBean.getObject().getConfiguration().setCallSettersOnNulls(true);
return sqlSessionFactoryBean.getObject();
}
@Bean("sqlSessionTemplate")
public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public PlatformTransactionManager txManager(@Qualifier("druidDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
数据源二:
package com.example.zhujie.configure;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.zhujie.daotwo",sqlSessionFactoryRef = "mysqlSqlSessionFactorytwo")
public class MysqlPropertiesTwo {
private String mybatisLocation = "classpath:/mappertwo/**/*.xml";
@Bean("druidDataSourcetwo")
public DataSource getDataSource() {
// 创建 dataSource 接口的实现类
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl("jdbc:mysql://127.0.0.1:3306/nacos?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false");
datasource.setPassword("111222");
datasource.setUsername("root");
return datasource;
}
@Bean("mysqlSqlSessionFactorytwo")
public SqlSessionFactory getSqlSessionFactory(@Qualifier("druidDataSourcetwo") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 配置mybatis 的mapper 文件
sqlSessionFactoryBean.setMapperLocations(resolver.getResources(mybatisLocation));
// mybatis 在mapper文件中实体字段映射自动按驼峰命名规则对应实体字段
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
// mybatis映射map的时候,字段值为null情况也返回
sqlSessionFactoryBean.getObject().getConfiguration().setCallSettersOnNulls(true);
return sqlSessionFactoryBean.getObject();
}
@Bean("sqlSessionTemplatetwo")
public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactorytwo") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean("txManagertwo")
public PlatformTransactionManager txManager(@Qualifier("druidDataSourcetwo") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
切记在使用事物的时候一定要指定具体的某一个bean,比如如下service层,某一个方法上加上transactionManager 指定用的是哪一个数据源,如下的userAdminDao只能是数据源druidDataSource里面的,因为它使用的是txManager
@Transactional(rollbackFor = Exception.class,transactionManager ="txManager")
public void insertUserAdmin(UserAdmin userAdmin) throws TestTxException {
userAdminDao.insertUserAdmin(userAdmin);
try {
UtilsTest.testTx();
} catch (TestTxException e) {
System.out.println(e.getMsg());
throw new TestTxException("405","测试异常");
}
userAdmin.setId(userAdmin.getId() + 2);
userAdminDao.insertUserAdmin(userAdmin);
}