1、主配置
生成各个数据源的datasource注入到spring
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableConfigurationProperties
@EnableTransactionManagement(proxyTargetClass = true)
public class DruidDatasourceConfig {
/**
* 添加 DruidDataSource 组件到容器中,并绑定属性
*/
@Bean("druidMysql")
@ConfigurationProperties(prefix = "spring.datasource.druid.mysql")
// @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource")
public DataSource druidMysql() {
return DruidDataSourceBuilder.create().build();
}
@Bean("druidOracle")
@ConfigurationProperties(prefix = "spring.datasource.druid.oracle")
// @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource")
public DataSource druidOracle() {
DruidDataSource oracleDataSource = DruidDataSourceBuilder.create().build();
oracleDataSource.setConnectionProperties("oracle.net.CONNECT_TIMEOUT=600000;oracle.jdbc.ReadTimeout=600000");
oracleDataSource.setKeepAlive(true);
oracleDataSource.setMinEvictableIdleTimeMillis(180000);
// return DruidDataSourceBuilder.create().build();
return oracleDataSource;
}
@Bean("druidCms")
@ConfigurationProperties(prefix = "spring.datasource.druid.cms")
public DataSource druidCms() {
return DruidDataSourceBuilder.create().build();
}
}
使用datasource
创建 sqlSeessionTemplate、trasactionManager sqlSeessionFactory 来指定mybatis xml文件路径
import com.test1.xxx.timer.common.constant.CommonDataBaseConstants;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* cms数据源配置类,修改扫描包的格式
*/
@Configuration
@MapperScan(basePackages = {"com.test1.xxx.timer.xxx.syncPresoDataPositionMapping.dao",
"com.test1.xxx.timer.xxx.syncPresoDataMapping.dao",
"com.test1.xxx.timer.xxx.syncPresoDataConfig.dao",
"com.test1.xxx.timer.xxx.syncPresoAttachConfig.dao",
"com.test1.xxx.timer.xxx.syncPresoAttachRecord.dao",
"com.test1.xxx.timer.xxx.syncPresoDataLog.dao",
"com.test1.xxx.timer.xxx.syncdatabase.dao"}, sqlSessionFactoryRef = CommonDataBaseConstants.CMS_SQLSESSION_FACTORY)
public class CmsDatasourceConfiguration {
@Autowired
@Qualifier("druidCms")
DataSource druidCms;
@Bean("cmsSpringSqlSessionTemplate")
public SqlSessionTemplate cmsSpringSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(cmsSqlSessionFactory());
}
@Bean
public SqlSessionFactory cmsSqlSessionFactory() throws Exception {
String location = "classpath*:mapper/cms/**/*.xml";
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(druidCms);
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(location);
factoryBean.setMapperLocations(resources);
return factoryBean.getObject();
}
@Bean("cmsTransactionManager")
public DataSourceTransactionManager cmsTransactionManager() {
return new DataSourceTransactionManager(druidCms);
}
}
import com.test1.xxx.timer.systemconfig.redis.TempRedisCache;
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.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.test1.xxx.timer.**.mysql"}, sqlSessionFactoryRef = "msSqlSessionFactory")
public class MysqlDatasourceConfiguration {
@Autowired
@Qualifier("druidMysql")
DataSource druidMysql;
// @Autowired
// @Qualifier("redisTemplate_default")
// private RedisTemplate<String, Object> redisTemplate;
@Bean("mysqlSpringSqlSessionTemplate")
@Primary
public SqlSessionTemplate mysqlSpringSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(msSqlSessionFactory());
}
@Bean
@Primary
public SqlSessionFactory msSqlSessionFactory() throws Exception {
String location = "classpath*:mapper/mysql/**/*.xml";
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(druidMysql);
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(location);
factoryBean.setMapperLocations(resources);
// String keyIdPart = "so-timer-mysql";
// TempRedisCache tempRedisCache = new TempRedisCache(keyIdPart, redisTemplate);
// factoryBean.setCache(tempRedisCache);
return factoryBean.getObject();
}
@Bean("msTransactionManager")
public DataSourceTransactionManager msTransactionManager() {
return new DataSourceTransactionManager(druidMysql);
}
}
业务使用
可以用@MapperScan指定,也可以用@Qualifier指定使用哪个数据源
@Mapper
@Qualifier("msSqlSessionFactory")
public interface DocBusinessTripExDao {
int deleteByPrimaryKey(Long id);
int insert(DocBusinessTripEx record);
int insertSelective(DocBusinessTripEx record);
DocBusinessTripEx selectByPrimaryKey(Long id);
int updateByPrimaryKeySelective(DocBusinessTripEx record);
int updateByPrimaryKey(DocBusinessTripEx record);
List<DocBusinessTripEx> getBusinessTripByDocCode(String docCode);
}
|