您的位置:首页 > 其它

一个*号引发的事故

2017-08-18 13:46 375 查看
使用bubbo远程访问mybatis时,出现了点问题

自定义mapper映射文件时,必须要这么写:正确写法

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath*:mybatis/mapper/*.xml"/>
<property name="typeAliasesPackage" value="com.sunwoda.pojo"/>
</bean>


注意这段代码:

<property name="mapperLocations" value="classpath*:mybatis/mapper/*Mapper.xml"/>


如果是下面这么写:就会出错!并且是本地测试类测试时不会出错,远程调用时会出错,难以理解!错误写法(注意classpath*,这个*号不能少,少了就出错,并且完全注意不到!)

错误写法:

<property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"/>


找了一个晚上,没找到原因,远程调用始终失败:

017-08-18 13:28:06,704 [DubboServerHandler-192.168.57.1:20880-thread-2] [com.alibaba.dubbo.rpc.filter.ExceptionFilter]-[ERROR]  [DUBBO] Got unchecked and undeclared exception which called by 192.168.57.1. service:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
at com.sun.proxy.$Proxy21.findByExample(Unknown Source)
at com.alibaba.dubbo.common.bytecode.Wrapper2.invokeMethod(Wrapper2.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)


源码注释提供样例:

* This is an alternative to specifying "<sqlmapper>" entries in an MyBatis config file.
* This property being based on Spring's resource abstraction also allows for specifying
* resource patterns here: e.g. "classpath*:sqlmap/*-mapper.xml".
*/


防不胜防!源码才是王道!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis