mybatis的疑惑

老菜鸟23333333 发布于 05/28 20:49
阅读 37
收藏 0

项目采用了在service层的读写分离配置,今天在执行一个只读方法时发现最终走的是主库。追踪发现问题如下:

该方法实际上执行了6次查询,后面5次是mybatis的延迟加载。通过
@Result(column = "ownerId", property = "personal", one = @One(fetchType = FetchType.LAZY, select = "com.yinhai.cipsp.finance.dao.FinancingAuditDao.getPersonal"))             
这种方式配置的。然后每次执行查询都会去获取一次datasource,并调用getConnection方法。第一次查询的时候能从ThreadLocal中获取到数据库信息,是read,后5次均为null。。。导致后面5次查询都是走的主库。线程名字打印出来是相同的。。。
关闭全局延迟加载,然后fetchType设置为FetchType.DEFAULT,就只获取一次datasource,从而6次查询都是在从库中查询。

1.为啥用mybatis的延迟加载注解会导致多次获取datasrouce?
2.为啥相同线程名第一次可以从ThreadLocal中获取到数据,后面就不能获取到????

求各位大神指点迷津。

加载中
返回顶部
顶部