package cn.com.demo.config; import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.PropertySource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl; @Configuration @PropertySource({ "classpath:jdbc.properties" }) @MapperScan(basePackages = "cn.com.demo.dao.yun.*.mapper", sqlSessionTemplateRef = "yunSqlSessionTemplate") public class DataSourceConfig { @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Value("${jdbc.driver}") private String driverClass; @Bean(name = "yunDataSource") public DruidDataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUsername(username); dataSource.setUrl(url); dataSource.setPassword(password); dataSource.setDriverClassName(driverClass); return dataSource; } /* * 分頁插件,自動識別數據庫類型 * 多租戶,請參考官網【插件擴展】 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } @Bean(name = "yunMybatisSqlSessionFactoryBean") public MybatisSqlSessionFactoryBean yunSqlSessionFactoryBean(@Qualifier("yunDataSource") DruidDataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); mybatisSqlSessionFactoryBean.setDataSource(dataSource); mybatisSqlSessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath:/cn/com/demo/dao/*/*/mapper/*/*Mapper.xml")); // List<Interceptor> interceptors = new ArrayList<>(); Interceptor[] interceptorsArr = new Interceptor[1]; interceptorsArr[0] = paginationInterceptor(); // interceptors.add(paginationInterceptor()); mybatisSqlSessionFactoryBean.setPlugins(interceptorsArr); return mybatisSqlSessionFactoryBean; } @Bean public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("yunDataSource") DruidDataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "yunSqlSessionTemplate") public SqlSessionTemplate yunSqlSessionTemplate( @Qualifier("yunMybatisSqlSessionFactoryBean") MybatisSqlSessionFactoryBean yunSqlSessionFactoryBean) throws Exception{ return new SqlSessionTemplate(yunSqlSessionFactoryBean.getObject()); } @Bean public JdbcDaoImpl securityJdbcDao() { JdbcDaoImpl jdbcDao = new JdbcDaoImpl(); jdbcDao.setDataSource(dataSource()); return jdbcDao; } }
2.數據源2java
package cn.com.demo.config; import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.plugin.Interceptor; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; @Configuration @PropertySource({ "classpath:jdbc.properties" }) //value = "cn.com.demo.dao.*.mapper*", // basePackages 必須指定該數據源分配的包路徑,意思就是再該路徑下的全部數據操做都是再指定的數據源下面進行的 @MapperScan( basePackages = "cn.com.demo.dao.oa.*.mapper", sqlSessionTemplateRef = "oaSqlSessionTemplate") public class DataSource2Config { @Value("${jdbc.url2}") private String url; @Value("${jdbc.username2}") private String username; @Value("${jdbc.password2}") private String password; @Value("${jdbc.driver}") private String driverClass; @Bean(name = "oaDataSource") public DruidDataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUsername(username); dataSource.setUrl(url); dataSource.setPassword(password); dataSource.setDriverClassName(driverClass); return dataSource; } @Bean(name = "oaSqlSessionFactory") public MybatisSqlSessionFactoryBean sqlSessionFactoryBean(@Qualifier("oaDataSource") DruidDataSource dataSource) throws Exception{ MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean(); mybatisSqlSessionFactoryBean.setDataSource(dataSource); mybatisSqlSessionFactoryBean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath:/cn/com/demo/dao/*/*/mapper/*/*Mapper.xml")); // List<Interceptor> interceptors = new ArrayList<>(); // Interceptor[] interceptorsArr = new Interceptor[1]; // interceptorsArr[0] = paginationInterceptor(); //// interceptors.add(paginationInterceptor()); // mybatisSqlSessionFactoryBean.setPlugins(interceptorsArr); return mybatisSqlSessionFactoryBean; } @Bean public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("oaDataSource") DruidDataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "oaSqlSessionTemplate") public SqlSessionTemplate yunSqlSessionTemplate( @Qualifier("oaSqlSessionFactory") MybatisSqlSessionFactoryBean oaSqlSessionFactory) throws Exception{ return new SqlSessionTemplate(oaSqlSessionFactory.getObject()); } }
3.測試spring
package cn.com.demo.test; import cn.com.demo.dao.oa.code.entity.OaNoCode; import cn.com.demo.dao.oa.code.mapper.OaNoCodeMapper; import cn.com.demo.dao.yun.user.entity.User; import cn.com.demo.service.IOaNoCodeService; import cn.com.demo.service.IUserService; import com.baomidou.mybatisplus.mapper.EntityWrapper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest @RunWith(SpringRunner.class) public class TestMutiDataSource { @Autowired private IUserService userService; @Autowired private IOaNoCodeService oaNoCodeService; @Autowired private OaNoCodeMapper oaNoCodeMapper; @Test public void test1() { EntityWrapper ew = new EntityWrapper(); ew.setEntity(new User()); ew.eq("user_code", "A001"); System.out.println(ew.getSqlSegment()); System.out.println(userService.selectList(ew).toString()); System.out.println("------------------------------>"); ew = new EntityWrapper(); ew.setEntity(new OaNoCode()); ew.eq("codeid", "1"); System.out.println(ew.getSqlSegment()); System.out.println(oaNoCodeService.selectList(ew).toString()); System.out.println("*************************"); System.out.println(oaNoCodeMapper.getAll()); } }