写这篇文章的原因也是进行数据批量新增的时候报错了,大体报错是说检查定义的接口和实体类映射的接口名是否一致,因为配置的是多数据源,所以使用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();
        }
    }
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐