Browsed by
标签: Spring

达梦等国产数据库错误码适配Spring

达梦等国产数据库错误码适配Spring

背景

项目某需求需要通过程序定时将数据从A系统同步至B、C等系统。数据同步过程中常见的一种错误是是唯一索引冲突(主键或者其它唯一索引),开发中一般直接使用org.springframework.dao.DuplicateKeyException判断冲突是否为唯一索引,如果是则忽略该条数据,但是使用国产达梦数据库后该判断方式失效了,默认返回了dm.jdbc.driver.DMExceptio

整体伪代码

String sql="insert into TABLE(EMPLOYEEID, EMPLOYEENAME, IDENTITYCARD) values(?,?,?)";List params = new ArrayList();try {for(int i=0;i<1000;i++){Object param[]={"001", "adaivskenan", "140000202201018888"};params.add(param);}jdbcTemplate.batchUpdate(sql,params);} catch (Exception e) {//判断批量异常,退化为单条处理if(NestedExceptionUtils.getRootCause(e).equals(BatchUpdateException.class)){for(int i=0;i<1000;i++){Object param[]={"001", "adaivskenan", "140000202201018888"};params.add(param);try{jdbcTemplate.update(sql,params);}catch(DuplicateKeyException e){//忽略唯一索引错误}}}

解决办法

在资源目录下放置sql-error-codes.xml文件,增加数据库错误码映射在这里插入图片描述在这里插入图片描述

分析过程

1. DuplicateKeyException产生过程

Spring JDBC模块发生数据库异常时会执

阅读全文 Read More