springboot和mybtais 多数据源使用BATCH方法进行批量新增
@Configuration@MapperScan(basePackages = "com.jumper.medical.nt.mapper", sqlSessionFactoryRef = "ntSessionFactory",sqlSessionTemplateRef="sqlSessionTemplateNt")public class NtDataSourceConfigurer {@Be
·
写这篇文章的原因也是进行数据批量新增的时候报错了,大体报错是说检查定义的接口和实体类映射的接口名是否一致,因为配置的是多数据源,所以使用batch方法进行新增的时候,SqlSessionTemplate 必须标明具体的数据源头。
@Configuration
@MapperScan(basePackages = "com.jumper.medical.nt.mapper", sqlSessionFactoryRef = "ntSessionFactory",sqlSessionTemplateRef="sqlSessionTemplateNt")
public class NtDataSourceConfigurer {
@Bean
public SqlSessionFactory ntSessionFactory(@Qualifier("nt") DataSource slaveDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(slaveDataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:mapper/nt/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager ntTransactionManager(@Qualifier("nt") DataSource slaveDataSource) {
return new DataSourceTransactionManager(slaveDataSource);
}
@Bean(name = "sqlSessionTemplateNt")
public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("ntSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
public class DatasourceConfigurer {
@Bean
@Primary
@ConfigurationProperties(prefix = "hikari.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean
@Qualifier("nt")
@ConfigurationProperties(prefix = "hikari.nt")
public DataSource ntDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
}
hikari:
master:
# driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/aa?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: root
nt:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc-url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=bb;allowMultiQueries=true
username: sa
password: 123456
@Service 实现
// 确定具体的数据源,不然多数据源的时候会出问题。
@Qualifier("sqlSessionTemplateNt")
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
@Override
public void insetBatchAA(String Date) {
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
List<AA> list = hisqlcMapper.getList(Date);
NtMapper mapper = sqlSession.getMapper(NtMapper.class);
try {
int num =0;
for (int i = 0; i <list.size();i++){
mapper.insertAA(list.get(i));
if (i % 500 == 0 || i == list.size()-1){
num ++;
System.out.println("时间:" +Date +",第"+num+"次进入,第"+i+"条" + LocalDateTime.now().toString());
sqlSession.commit();
sqlSession.clearCache();
}
}
} catch (Exception e) {
e.printStackTrace();
sqlSession.rollback();
} finally {
sqlSession.close();
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)