可以通过druid去实现多数据源配置
具体的实现方法可以通过java配置类和自定义注解配合切点去实现
1、java配置类实现
@Configuration
@MapperScan(basePackages = "our.world.mapper",sqlSessionFactoryRef = "mallSysSlSessionFactory")
public class DataSourceConfig implements EnvironmentAware {
private Environment env;
private Logger log=LoggerFactory.getLogger(this.getClass());
@Override
public void setEnvironment(Environment environment) {
this.env=environment;
}
/**
* 创建数据源 Primary在有多个实例时 默认选择当前注入
* @return
* @throws Exception
*/
@Bean(name="mallSysDataSource")
@Primary
public DataSource getDataSource() throws Exception{
Properties ps=new Properties();
ps.put("driverClassName",env.getProperty("datasource.driverClassName"));
ps.put("url",env.getProperty("datasource.url"));
ps.put("username",env.getProperty("datasource.username"));
ps.put("password",env.getProperty("datasource.password"));
ps.put("maxActive","8");
ps.put("minIdle","0");
return DruidDataSourceFactory.createDataSource(ps);
}
/**
* 根据数据源创建SqlSessionFactory
* @param dataSource
* @return
*/
public SqlSessionFactory sqlSessionFactory(@Qualifier("mallSysDataSource") DataSource dataSource){
SqlSessionFactoryBean fb=new SqlSessionFactoryBean();
fb.setDataSource(dataSource);
//fb.setTypeAliasesPackage(env.getProperty("mybatis.type-aliases-package"));
fb.setConfigLocation(new DefaultResourceLoader().getResource(env.getProperty("mybatis.config-location")));
//添加xml目录
ResourcePatternResolver resolver=new PathMatchingResourcePatternResolver();
try{
fb.setMapperLocations(resolver.getResources(env.getProperty("mybatis.mapperLocations")));
return fb.getObject();
}catch(Exception e){
log.error("SqlSessionFactory创建失败: "+e.getMessage());
throw new RuntimeException(e);
}
}
@Bean(name="mallSysDataSourceTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("mallSysDataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}