From f6d8faaa317a064f205616a55109fbd9fd8dad5f Mon Sep 17 00:00:00 2001 From: Julien KLAER Date: Mon, 29 Oct 2018 17:57:00 +0100 Subject: [PATCH 1/3] fix(paging item reader): Going through doOpen to initialize connection instead of afterPropertiesSet --- .../spring/batch/MyBatisPagingItemReader.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java index 5dd5fa0a8c..67de30a276 100644 --- a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java +++ b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java @@ -15,18 +15,17 @@ */ package org.mybatis.spring.batch; -import static org.springframework.util.Assert.notNull; -import static org.springframework.util.ClassUtils.getShortName; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.batch.item.database.AbstractPagingItemReader; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; -import org.apache.ibatis.session.ExecutorType; -import org.apache.ibatis.session.SqlSession; -import org.apache.ibatis.session.SqlSessionFactory; -import org.mybatis.spring.SqlSessionTemplate; -import org.springframework.batch.item.database.AbstractPagingItemReader; +import static org.springframework.util.Assert.notNull; +import static org.springframework.util.ClassUtils.getShortName; /** * {@code org.springframework.batch.item.ItemReader} for reading database @@ -44,7 +43,7 @@ public class MyBatisPagingItemReader extends AbstractPagingItemReader { private SqlSessionFactory sqlSessionFactory; - private SqlSessionTemplate sqlSessionTemplate; + private SqlSession sqlSession; private Map parameterValues; @@ -89,10 +88,23 @@ public void setParameterValues(Map parameterValues) { public void afterPropertiesSet() throws Exception { super.afterPropertiesSet(); notNull(sqlSessionFactory, "A SqlSessionFactory is required."); - sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); notNull(queryId, "A queryId is required."); } + @Override + protected void doOpen() throws Exception { + super.doOpen(); + sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); + } + + @Override + protected void doClose() throws Exception { + if (sqlSession != null) { + sqlSession.close(); + } + super.doClose(); + } + @Override protected void doReadPage() { Map parameters = new HashMap<>(); @@ -107,7 +119,7 @@ protected void doReadPage() { } else { results.clear(); } - results.addAll(sqlSessionTemplate.selectList(queryId, parameters)); + results.addAll(sqlSession.selectList(queryId, parameters)); } @Override From 9749d2da6742fb14406d65ae1d68c802161cec2c Mon Sep 17 00:00:00 2001 From: Julien KLAER Date: Tue, 30 Oct 2018 09:06:42 +0100 Subject: [PATCH 2/3] fix(paging item reader): Using implementation SqlSessionTemplate instead of interface SqlSession. --- .../mybatis/spring/batch/MyBatisPagingItemReader.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java index 67de30a276..b0d6df569d 100644 --- a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java +++ b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java @@ -18,6 +18,7 @@ import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionTemplate; import org.springframework.batch.item.database.AbstractPagingItemReader; import java.util.HashMap; @@ -43,7 +44,7 @@ public class MyBatisPagingItemReader extends AbstractPagingItemReader { private SqlSessionFactory sqlSessionFactory; - private SqlSession sqlSession; + private SqlSessionTemplate sqlSessionTemplate; private Map parameterValues; @@ -94,13 +95,13 @@ public void afterPropertiesSet() throws Exception { @Override protected void doOpen() throws Exception { super.doOpen(); - sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); + sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); } @Override protected void doClose() throws Exception { - if (sqlSession != null) { - sqlSession.close(); + if (sqlSessionTemplate != null) { + sqlSessionTemplate.close(); } super.doClose(); } @@ -119,7 +120,7 @@ protected void doReadPage() { } else { results.clear(); } - results.addAll(sqlSession.selectList(queryId, parameters)); + results.addAll(sqlSessionTemplate.selectList(queryId, parameters)); } @Override From ccc51e629bed4449d90595dc71cca345ea34804f Mon Sep 17 00:00:00 2001 From: Julien KLAER Date: Fri, 2 Nov 2018 13:51:13 +0100 Subject: [PATCH 3/3] fix(paging item reader): Staying simple and and passing all tests locally. --- .../spring/batch/MyBatisPagingItemReader.java | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java index b0d6df569d..286a99e665 100644 --- a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java +++ b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java @@ -92,22 +92,11 @@ public void afterPropertiesSet() throws Exception { notNull(queryId, "A queryId is required."); } - @Override - protected void doOpen() throws Exception { - super.doOpen(); - sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); - } - - @Override - protected void doClose() throws Exception { - if (sqlSessionTemplate != null) { - sqlSessionTemplate.close(); - } - super.doClose(); - } - @Override protected void doReadPage() { + if (sqlSessionTemplate == null) { + sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH); + } Map parameters = new HashMap<>(); if (parameterValues != null) { parameters.putAll(parameterValues);