原本的项目的多数据源切的是mapper 然后用的多数据源 十几个数据源 用的mysql oracle sqlserver
我要做的就是在mysql的一个数据源上分表
因为项目是springboot1.5.10的 所以还用3.0.0M sharding包
项目数据源配置和精确分表算法在以前的文章里 大家可以自行查看 这里只记录重要的
package com.*.*.config;
import io.shardingsphere.core.api.ShardingDataSourceFactory;
import io.shardingsphere.core.jdbc.core.datasource.ShardingDataSource;
import io.shardingsphere.jdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties;
import io.shardingsphere.jdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.Map;
@Configuration
@MapperScan(basePackages = {"com.*.*.dao.*"}, sqlSessionTemplateRef = "testSqlSessionTemplate") //扫描mapper 引用sqlSessionTemplate
@EnableConfigurationProperties({SpringBootShardingRuleConfigurationProperties.class, SpringBootMasterSlaveRuleConfigurationProperties.class}) //配置里配的规则会被读到这些class里面 当然也可以配读写分离 我这没必要配
public class DataSourceConfig {
@Autowired
private SpringBootShardingRuleConfigurationProperties shardingProperties;
@Bean
@ConfigurationProperties(prefix = "配置里数据源前缀")
public DataSource testdataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory);
return template;
}
@Bean(name = "shardingDataSource")
public DataSource shardingDataSource() throws SQLException {
Map<String,DataSource> dataSourceMap = new LinkedHashMap<>();
dataSourceMap.put("分表规则中的库名", testdataSource());
return ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingProperties.getShardingRuleConfiguration(), shardingProperties.getConfigMap(), shardingProperties.getProps());
}
@Bean(name = "testTransactionManager")
public DataSourceTransactionManager testTransactionManager() {
return new DataSourceTransactionManager(testdataSource());
}
@Bean
public SqlSessionFactory testSqlSessionFactory(@Qualifier("shardingDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath*:/mapper/包名/*.xml"));
return bean.getObject();
} catch (Exception e) {
logger.error("异常信息:"+e);
throw new RuntimeException(e);
}
}
}
测试就不贴了 涉及隐私