然后我今天就做了如下测试,在三个不同的浏览器下,对自己的测试web项目的同一个url连接请求(除了浏览器不同,其他条件完全一样)。使用log4j-debug模式下进行日志巡查。发现当且仅有第一次查询,他才会从数据库里面拿数据,第2、3次都是从缓存里面拿数据,而且,每次查询请求,他控制台显示,都会create a new Sqlsession 。
第二个测试,基于JunitTest多线程测试,test代码如下
` @Test
public void firstTest() {
TestRunnable runnable = new TestRunnable() {
@Override
public void runTest() throws Throwable {
regionService1.findList(new Region());
}
};
TestRunnable[] trs = new TestRunnable[3];
for (int i = 0; i < 3; i++) {
trs[i] = runnable;
}
MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(trs);
try {
mttr.runTestRunnables();
}catch (Throwable a){
a.printStackTrace();
}
}`
从log4j的日志来看,我发现他 create a new Sqlsession 三次 并且每次都是从数据库里面拿数据
问题描述:今天在研究Mybatis 的一级缓存与二级缓存的定义与测试 的时候引发了一系列的思考,我还是个大四软工,知识相对于各位大大来说比较浅薄,希望有大大可以解答。
问题1:当Spring与Mybatis 整合之后,如何理解一个Sqlsession的生命周期?
## 为什么我会这么问呢,因为我发现 MyBatis官方对自带的一级缓存的定义是
然后我今天就做了如下测试,在三个不同的浏览器下,对自己的测试web项目的同一个url连接请求(除了浏览器不同,其他条件完全一样)。使用log4j-debug模式下进行日志巡查。发现当且仅有第一次查询,他才会从数据库里面拿数据,第2、3次都是从缓存里面拿数据,而且,每次查询请求,他控制台显示,都会create a new Sqlsession 。
第二个测试,基于JunitTest多线程测试,test代码如下 ` @Test public void firstTest() {
}`
从log4j的日志来看,我发现他 create a new Sqlsession 三次 并且每次都是从数据库里面拿数据
现在我有点迷了,当spring与mybatis整合之后,怎么样才算一个新的sqlsession。一个request请求是一个线程的话,那么线程和SqlSession的关系是怎么样的
(后面的疑问再慢慢更新)