java.lang.IllegalArgumentException: Mapped Statements collection already contains value for

mybatis并发:

今天使用mybatis(使用mybatis jar包:mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar)时发现一个并发问题引起的异常,应用场景:页面向服务端发送了三个请求,同时请求一个方法,结果抛出异常:

java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.bayss.parameter.dao.ParameterDAO.getBusicodeById
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.(MapperMethod.java:48)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:37)
.......

经过一翻折腾,终于搞定了改问题,问题原因:mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar这两个jar包问题,是mybatis的一个buger,在此版本下并发就会出现上面的异常。

解决办法:使用新版本jar包替换现有项目中的mybatis-3.0.4.jar,mybatis-spring-1.0.0.jar包,在spring的配置文件中添加新的命名空间和schema。

修改步骤:1.替换为mybatis新jar包:mybatis-3.1.1.jar,mybatis-spring-1.1.0.jar。
 2.在spring的配置文件中添加新的命名空间和schema:
命名空间:xmlns:util="http://www.springframework.org/schema/util"
schemaLocation最后加入:http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
 3.配置数据库连接:
   <1>将连原来的
改为:;
   <2>将所有改为
#{dataSourceProps['datasource.driverClassName ']}" />方式取值
修改完成后重启服务,再次并发访问,问题被解决。

你可能感兴趣的:(ibatis)