MyBatis3, 在spring里面配的, 在一个线程池里面加任务, 任务会去查数据库, 然后, 就抛这样的错了: 
  如果单线程的话就没有问题 
Exception in thread "pages-0" java.lang.IllegalArgumentException: Mapped Statements collection already contains value for  
  
com.rcom.fastcap.dao.mapper.TemplateMapper.insert 
  
          at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:576) 
  
          at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:551) 
  
          at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:376) 
  
          at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:215) 
  
          at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:64) 
  
          at org.apache.ibatis.session.Configuration.parseStatementNodes(Configuration.java:513) 
  
          at org.apache.ibatis.session.Configuration.buildStatementsForNamespace(Configuration.java:502) 
  
          at org.apache.ibatis.session.Configuration.buildStatementsFromId(Configuration.java:467) 
  
          at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:391) 
  
          at org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:160) 
  
          at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) 
  
          at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:37) 
  
          at $Proxy16.select(Unknown Source) 
  
          at com.rcom.fastcap.dao.wrapper.TemplateWrap.select(TemplateWrap.java:25) 
  
          at com.rcom.fastcap.dao.wrapper.TemplateWrap$$FastClassByCGLIB$$8fb3aa54.invoke(<generated>) 
  
          at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
  
          at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) 
  
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
  
          at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
  
          at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
  
          at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
  
          at com.rcom.fastcap.dao.wrapper.TemplateWrap$$EnhancerByCGLIB$$7f2cdd3c.select(<generated>) 
  
          at com.rcom.fastcap.service.TemplateService.getTemplateById(TemplateService.java:72) 
  
          at com.rcom.fastcap.createhtml.PagesCreateThread.getMethodName(PagesCreateThread.java:35) 
  
          at com.rcom.fastcap.createhtml.PagesCreateThread.run(PagesCreateThread.java:40) 
  
          at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651) 
  
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676) 
  
          at java.lang.Thread.run(Thread.java:595) 

解决方案 »

  1.   


    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.zto.pojo.TraceError">
    <resultMap type="com.zto.pojo.TabTraceError" id="errorResponse">
    <result column="ID" property="id" />
    <result column="TRACEJSON" property="traceJson" />
    <result column="TYPE" property="type" />
    <result column="POST_NUM" property="sendNum" />
    <result column="CREATE_DATE" property="createDate" />
    </resultMap> <insert id="insertPostalErrorBatch" parameterType="com.zto.pojo.TabTraceError">
    INSERT INTO
    TAB_TRACE_ERROR(ID,TRACEJSON,TYPE)
    VALUES(TAB_trace_error_sequence.Nextval,#{traceJson,jdbcType=VARCHAR},#{type,jdbcType=NUMERIC})
    </insert>
    <insert id="insertTaobaoErrorBatch" parameterType="com.zto.pojo.TabTraceError">
    INSERT INTO
    TAB_TRACE_ERROR(ID,TRACEJSON,TYPE)
    VALUES(TAB_trace_error_sequence.Nextval,#{traceJson,jdbcType=VARCHAR},#{type,jdbcType=NUMERIC})
    </insert> <insert id="insertTabTraceErrorCount" parameterType="com.zto.pojo.TabTraceErrorCount">
    INSERT INTO
    TAB_TRACE_ERROR_COUNT(TYPE,SEND_COUNT,ERROR_COUNT)
    VALUES(#{type,jdbcType=NUMERIC},#{sendCount,jdbcType=NUMERIC},#{errorCount,jdbcType=NUMERIC})
    </insert>
    <update id="updateTaobaoErrorBatch" parameterType="com.zto.pojo.TabTraceError">
    UPDATE TAB_TRACE_ERROR SET
    TRACEJSON=#{traceJson,jdbcType=VARCHAR},
    CREATE_DATE=#{createDate,jdbcType=DATE},
    POST_NUM=#{sendNum,jdbcType=NUMERIC}
    WHERE ID=#{id,jdbcType=NUMERIC}
    </update> <delete id="deleteTaobaoErrorBatch" parameterType="list">
    DELETE FROM TAB_TRACE_ERROR WHERE ID IN
    <foreach collection="list" item="a" open="(" close=")"
    separator=",">
    #{a.id,jdbcType=NUMERIC}
    </foreach>
    </delete> <select id="searchTaobaoErrorBatch" resultMap="errorResponse">
    SELECT ID,TRACEJSON,TYPE,POST_NUM,CREATE_DATE FROM TAB_TRACE_ERROR T
    WHERE T.CREATE_DATE&lt;=SYSDATE
    AND ROWNUM &lt;
    1000
    </select></mapper>