Java 为什么迈巴蒂斯有时找不到地图绘制者,但大多数时候会找到?

Java 为什么迈巴蒂斯有时找不到地图绘制者,但大多数时候会找到?,java,mybatis,Java,Mybatis,我在Tomcat web应用程序中间歇性出现MyBatis错误: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cisco.salesconnect.screport.mapp

我在Tomcat web应用程序中间歇性出现MyBatis错误:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cisco.salesconnect.screport.mapper.hubportfolio.Authorization.getAuthorizedHubSupervisorIds
### Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cisco.salesconnect.screport.mapper.hubportfolio.Authorization.getAuthorizedHubSupervisorIds
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.2.jar:3.5.2]
    at com.cisco.salesconnect.screport.dao.SCHubAuthorizationServiceHandler.getAuthorizedHubSupervisorIds(SCHubAuthorizationServiceHandler.java:168) ~[classes/:?]
    at com.cisco.salesconnect.screport.dao.SCHubAuthorizationServiceHandler$7.run(SCHubAuthorizationServiceHandler.java:404) [classes/:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_181]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_181]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cisco.salesconnect.screport.mapper.hubportfolio.Authorization.getAuthorizedHubSupervisorIds
    at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:964) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:755) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:748) ~[mybatis-3.5.2.jar:3.5.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:146) ~[mybatis-3.5.2.jar:3.5.2]
    ... 6 more
我可以在日志中得到一次错误,然后立即转到浏览器并单击编辑->重新发送,这样就可以正常工作了。通过在Postman中设置web服务运行程序并将其设置为10次迭代,我能够重新创建这个问题

我使用Java对象而不是XML文件获取配置。我曾经在多线程web请求中共享SqlSession对象,但现在不再共享了,因为读取它不是线程安全的。我还试图在多个请求之间共享配置对象,这样它就不必为每个请求寻找XML映射器文件而付出代价

我还应该找什么别的东西?由于IP原因,我不能发布原始源代码,但一旦我知道人们在寻找什么,我可以发布类似的内容


感谢Woodsman。配置对象不是线程安全的

您面临的问题可能是由于对配置它的线程中的
Configuration
对象所做的更改在其他线程中不可见,因为这些更改不可见


因此,您需要使用每个线程的配置,或者确保安全地发布配置对象。

谢谢。我在文档中看到SqlSession不是线程安全的,但没有看到任何关于其他对象的内容。我目前正在共享配置和环境。这两个线程是否都是安全的?另外,我是否可以在同一线程中重复使用后续请求的配置?我不确定是否理解您的用法,但一般来说,您应该重用
SqlSessionFactory
<在构建
SqlSessionFactory
时使用code>Configuration,并且在应用程序启动期间只应执行一次。请看指南。