ShardingJDBC不支持批量插入的一种解决办法

最近项目中需要进行分表就使用了ShardingJDBC做数据库中间层操作
之前sql中有写批量插入,而ShardingJDBC不支持insert xxx values(...),(...),(...)语句
故需要手动开启事务,循环插入并提交事务(与之前批量插入语句性能未做比较)

@Component
public class UserManager implements ApplicationContextAware {

    private static ApplicationContext applicationContext;
    @Autowired
    private UserDao UserDao;

    public void createUseres(List<User> UserList) {
        DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
        definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);

        DataSourceTransactionManager transactionManager = (DataSourceTransactionManager)
                applicationContext.getBean("transactionManager");
        TransactionStatus transactionStatus = transactionManager.getTransaction(definition);

        for (User User : UserList) {
            //UserDao有create方法,单条插入
            applicationContext.getBean(UserDao.class).create(User);
        }

        transactionManager.commit(transactionStatus);
    }

    @Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        applicationContext = ac;
    }
}
posted @ 2018-01-24 09:39  CHENV  阅读(7453)  评论(0编辑  收藏  举报