diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5502c5b32b..ed83d5edd7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,8 +18,6 @@ name: Java CI on: push: - branches-ignore: - - 'compatibility-check-spring6' pull_request: jobs: @@ -28,7 +26,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] - java: [11, 17, 19, 20-ea] + java: [17, 19, 20-ea] distribution: ['zulu'] fail-fast: false max-parallel: 5 diff --git a/.github/workflows/coveralls.yaml b/.github/workflows/coveralls.yaml index b898488c1f..ac387747b0 100644 --- a/.github/workflows/coveralls.yaml +++ b/.github/workflows/coveralls.yaml @@ -18,8 +18,6 @@ name: Coveralls on: push: - branches-ignore: - - 'compatibility-check-spring6' pull_request: jobs: @@ -31,7 +29,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 17 distribution: zulu - name: Report Coverage to Coveralls for Pull Requests if: github.event_name == 'pull_request' diff --git a/.github/workflows/support.yaml b/.github/workflows/support.yaml deleted file mode 100644 index 5be3956bd3..0000000000 --- a/.github/workflows/support.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright 2010-2022 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -name: Spring/Spring Batch Support - -on: - push: - branches-ignore: - - 'compatibility-check-spring6' - pull_request: - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, macOS-latest] - java: [11] - distribution: ['zulu'] - fail-fast: false - max-parallel: 2 - name: Test JDK ${{ matrix.java }}, ${{ matrix.os }} - - steps: - - uses: actions/checkout@v3 - - name: Set up JDK - uses: actions/setup-java@v3 - with: - java-version: ${{ matrix.java }} - distribution: ${{ matrix.distribution }} - - name: Test with Spring 5.2 / Spring Batch 4.2 support - run: ./mvnw test -Dspring.version=$(./scripts/get_latest_version.sh spring-core 5.2) -Dspring-batch.version=$(./scripts/get_latest_version.sh batch/spring-batch-core 4.2) - - name: Test with Spring 5.1 / Spring Batch 4.1 support - run: ./mvnw test -Dspring.version=$(./scripts/get_latest_version.sh spring-core 5.1) -Dspring-batch.version=$(./scripts/get_latest_version.sh batch/spring-batch-core 4.1) diff --git a/pom.xml b/pom.xml index 9e6bc01253..aa9e9830e5 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ mybatis-spring - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT jar mybatis-spring @@ -104,14 +104,18 @@ Spring org.springframework.batch.*;resolution:=optional,* * + 17 3.5.11 - 5.3.24 - 4.3.7 + 6.0.2 + 5.0.0 org.mybatis.spring 5.9.1 + + true + 1757561022 @@ -297,13 +301,13 @@ jakarta.transaction jakarta.transaction-api - 1.3.3 + 2.0.1 test jakarta.servlet jakarta.servlet-api - 4.0.4 + 6.0.0 test @@ -373,6 +377,40 @@ Sonatype OSS Snapshots Repository https://oss.sonatype.org/content/repositories/snapshots + + spring-snapshot + Spring Snapshots + https://repo.spring.io/snapshot + + false + + + + spring-milestone + Spring Milestone + https://repo.spring.io/milestone + + false + + + + + spring-snapshot + Spring Snapshots + https://repo.spring.io/snapshot + + false + + + + spring-milestone + Spring Milestone + https://repo.spring.io/milestone + + false + + + diff --git a/src/main/java/org/mybatis/spring/batch/MyBatisBatchItemWriter.java b/src/main/java/org/mybatis/spring/batch/MyBatisBatchItemWriter.java index 8eeca0d7a8..42118df358 100644 --- a/src/main/java/org/mybatis/spring/batch/MyBatisBatchItemWriter.java +++ b/src/main/java/org/mybatis/spring/batch/MyBatisBatchItemWriter.java @@ -27,6 +27,7 @@ import org.mybatis.logging.Logger; import org.mybatis.logging.LoggerFactory; import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.convert.converter.Converter; @@ -136,7 +137,7 @@ public void afterPropertiesSet() { * {@inheritDoc} */ @Override - public void write(final List items) { + public void write(final Chunk items) { if (!items.isEmpty()) { LOGGER.debug(() -> "Executing batch with " + items.size() + " items."); @@ -158,8 +159,8 @@ public void write(final List items) { for (int i = 0; i < updateCounts.length; i++) { int value = updateCounts[i]; if (value == 0) { - throw new EmptyResultDataAccessException( - "Item " + i + " of " + updateCounts.length + " did not update any rows: [" + items.get(i) + "]", 1); + throw new EmptyResultDataAccessException("Item " + i + " of " + updateCounts.length + + " did not update any rows: [" + items.getItems().get(i) + "]", 1); } } } diff --git a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java index 6c96b345dc..c459c39c59 100644 --- a/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java +++ b/src/main/java/org/mybatis/spring/batch/MyBatisPagingItemReader.java @@ -130,9 +130,4 @@ protected void doReadPage() { results.addAll(sqlSessionTemplate.selectList(queryId, parameters)); } - @Override - protected void doJumpToPage(int itemIndex) { - // Not Implemented - } - } diff --git a/src/test/java/org/mybatis/spring/MyBatisSpringTest.java b/src/test/java/org/mybatis/spring/MyBatisSpringTest.java index b43bd579f0..2b5f43f5d5 100644 --- a/src/test/java/org/mybatis/spring/MyBatisSpringTest.java +++ b/src/test/java/org/mybatis/spring/MyBatisSpringTest.java @@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.fail; -import com.mockrunner.mock.ejb.MockUserTransaction; import com.mockrunner.mock.jdbc.MockConnection; import com.mockrunner.mock.jdbc.MockDataSource; import com.mockrunner.mock.jdbc.MockPreparedStatement; @@ -32,12 +31,15 @@ import org.apache.ibatis.transaction.managed.ManagedTransactionFactory; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import org.springframework.dao.DataAccessException; import org.springframework.dao.TransientDataAccessResourceException; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.jta.JtaTransactionManager; import org.springframework.transaction.support.DefaultTransactionDefinition; +import jakarta.transaction.UserTransaction; + class MyBatisSpringTest extends AbstractMyBatisSpringTest { private SqlSession session; @@ -275,7 +277,7 @@ void testChangeExecutorTypeInTxRequiresNew() throws Exception { @Test void testWithJtaTxManager() { - JtaTransactionManager jtaManager = new JtaTransactionManager(new MockUserTransaction()); + JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class)); DefaultTransactionDefinition txDef = new DefaultTransactionDefinition(); txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED"); @@ -304,7 +306,7 @@ void testWithJtaTxManagerAndNonSpringTxManager() throws java.sql.SQLException { Environment nonSpring = new Environment("non-spring", new ManagedTransactionFactory(), mockDataSource); sqlSessionFactory.getConfiguration().setEnvironment(nonSpring); - JtaTransactionManager jtaManager = new JtaTransactionManager(new MockUserTransaction()); + JtaTransactionManager jtaManager = new JtaTransactionManager(Mockito.mock(UserTransaction.class)); DefaultTransactionDefinition txDef = new DefaultTransactionDefinition(); txDef.setPropagationBehaviorName("PROPAGATION_REQUIRED"); diff --git a/src/test/java/org/mybatis/spring/batch/MyBatisBatchItemWriterTest.java b/src/test/java/org/mybatis/spring/batch/MyBatisBatchItemWriterTest.java index a3a5366f33..ad11afbc09 100644 --- a/src/test/java/org/mybatis/spring/batch/MyBatisBatchItemWriterTest.java +++ b/src/test/java/org/mybatis/spring/batch/MyBatisBatchItemWriterTest.java @@ -22,7 +22,6 @@ import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -30,7 +29,6 @@ import org.apache.ibatis.executor.BatchResult; import org.apache.ibatis.session.ExecutorType; -import org.assertj.core.util.Lists; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -39,6 +37,7 @@ import org.mockito.MockitoAnnotations; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.batch.domain.Employee; +import org.springframework.batch.item.Chunk; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.dao.InvalidDataAccessResourceUsageException; @@ -60,8 +59,8 @@ void setUp() { @Test void testZeroBatchResultShouldThrowException() { - List employees = Arrays.asList(new Employee(), new Employee()); - List batchResults = Lists.emptyList(); + Chunk employees = Chunk.of(new Employee(), new Employee()); + List batchResults = Collections.emptyList(); given(mockSqlSessionTemplate.flushStatements()).willReturn(batchResults); @@ -70,7 +69,7 @@ void testZeroBatchResultShouldThrowException() { @Test void testZeroUpdateCountShouldThrowException() { - List employees = Arrays.asList(new Employee(), new Employee()); + Chunk employees = Chunk.of(new Employee(), new Employee()); BatchResult batchResult = new BatchResult(null, null); batchResult.setUpdateCounts(new int[] { 1, 0 }); @@ -87,7 +86,7 @@ void testItemToParameterConverterIsDefault() { this.writer.setStatementId("updateEmployee"); Employee employee = new Employee(); - List employees = Collections.singletonList(employee); + Chunk employees = Chunk.of(employee); writer.write(employees); Mockito.verify(this.mockSqlSessionTemplate).update("updateEmployee", employee); @@ -105,7 +104,7 @@ void testSetItemToParameterConverter() { }); Employee employee = new Employee(); - List employees = Collections.singletonList(employee); + Chunk employees = Chunk.of(employee); writer.write(employees); Map parameter = new HashMap<>(); diff --git a/src/test/java/org/mybatis/spring/batch/SpringBatchTest.java b/src/test/java/org/mybatis/spring/batch/SpringBatchTest.java index 5096c84623..c934a9b5d8 100644 --- a/src/test/java/org/mybatis/spring/batch/SpringBatchTest.java +++ b/src/test/java/org/mybatis/spring/batch/SpringBatchTest.java @@ -17,12 +17,10 @@ import static org.assertj.core.api.Assertions.*; -import java.util.ArrayList; -import java.util.List; - import org.apache.ibatis.session.SqlSession; import org.junit.jupiter.api.Test; import org.mybatis.spring.batch.domain.Employee; +import org.springframework.batch.item.Chunk; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @@ -56,7 +54,7 @@ class SpringBatchTest { @Test @Transactional void shouldDuplicateSalaryOfAllEmployees() throws Exception { - List employees = new ArrayList<>(); + Chunk employees = new Chunk<>(); Employee employee = pagingNoNestedItemReader.read(); while (employee != null) { employee.setSalary(employee.getSalary() * 2); @@ -73,7 +71,7 @@ void shouldDuplicateSalaryOfAllEmployees() throws Exception { @Transactional void checkPagingReadingWithNestedInResultMap() throws Exception { // This test is here to show that PagingReader can return wrong result in case of nested result maps - List employees = new ArrayList<>(); + Chunk employees = new Chunk<>(); Employee employee = pagingNestedItemReader.read(); while (employee != null) { employee.setSalary(employee.getSalary() * 2); @@ -91,7 +89,7 @@ void checkPagingReadingWithNestedInResultMap() throws Exception { void checkCursorReadingWithoutNestedInResultMap() throws Exception { cursorNoNestedItemReader.doOpen(); try { - List employees = new ArrayList<>(); + Chunk employees = new Chunk<>(); Employee employee = cursorNoNestedItemReader.read(); while (employee != null) { employee.setSalary(employee.getSalary() * 2); @@ -112,7 +110,7 @@ void checkCursorReadingWithoutNestedInResultMap() throws Exception { void checkCursorReadingWithNestedInResultMap() throws Exception { cursorNestedItemReader.doOpen(); try { - List employees = new ArrayList<>(); + Chunk employees = new Chunk<>(); Employee employee = cursorNestedItemReader.read(); while (employee != null) { employee.setSalary(employee.getSalary() * 2); diff --git a/src/test/java/org/mybatis/spring/batch/builder/MyBatisBatchItemWriterBuilderTest.java b/src/test/java/org/mybatis/spring/batch/builder/MyBatisBatchItemWriterBuilderTest.java index f36c8678c4..e410c88931 100644 --- a/src/test/java/org/mybatis/spring/batch/builder/MyBatisBatchItemWriterBuilderTest.java +++ b/src/test/java/org/mybatis/spring/batch/builder/MyBatisBatchItemWriterBuilderTest.java @@ -37,6 +37,7 @@ import org.mockito.MockitoAnnotations; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.batch.MyBatisBatchItemWriter; +import org.springframework.batch.item.Chunk; /** * Tests for {@link MyBatisBatchItemWriterBuilder}. @@ -84,13 +85,13 @@ void testConfigurationUsingSqlSessionFactory() { // @formatter:on itemWriter.afterPropertiesSet(); - List foos = getFoos(); + Chunk foos = getFoos(); itemWriter.write(foos); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(0)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(1)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(2)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(0)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(1)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(2)); } @@ -105,13 +106,13 @@ void testConfigurationUsingSqlSessionTemplate() { // @formatter:on itemWriter.afterPropertiesSet(); - List foos = getFoos(); + Chunk foos = getFoos(); itemWriter.write(foos); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(0)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(1)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(2)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(0)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(1)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(2)); } @@ -129,13 +130,13 @@ void testConfigurationAssertUpdatesIsFalse() { // @formatter:on itemWriter.afterPropertiesSet(); - List foos = getFoos(); + Chunk foos = getFoos(); itemWriter.write(foos); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(0)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(1)); - Mockito.verify(this.sqlSession).update("updateFoo", foos.get(2)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(0)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(1)); + Mockito.verify(this.sqlSession).update("updateFoo", foos.getItems().get(2)); } @@ -156,22 +157,22 @@ void testConfigurationSetItemToParameterConverter() { // @formatter:on itemWriter.afterPropertiesSet(); - List foos = getFoos(); + Chunk foos = getFoos(); itemWriter.write(foos); Map parameter = new HashMap<>(); parameter.put("now", LocalDateTime.now(Clock.fixed(Instant.ofEpochMilli(0), ZoneId.systemDefault()))); - parameter.put("item", foos.get(0)); + parameter.put("item", foos.getItems().get(0)); Mockito.verify(this.sqlSession).update("updateFoo", parameter); - parameter.put("item", foos.get(1)); + parameter.put("item", foos.getItems().get(1)); Mockito.verify(this.sqlSession).update("updateFoo", parameter); - parameter.put("item", foos.get(2)); + parameter.put("item", foos.getItems().get(2)); Mockito.verify(this.sqlSession).update("updateFoo", parameter); } - private List getFoos() { - return Arrays.asList(new Foo("foo1"), new Foo("foo2"), new Foo("foo3")); + private Chunk getFoos() { + return Chunk.of(new Foo("foo1"), new Foo("foo2"), new Foo("foo3")); } private static class Foo { diff --git a/src/test/java/org/mybatis/spring/sample/AbstractSampleJobTest.java b/src/test/java/org/mybatis/spring/sample/AbstractSampleJobTest.java index 389d0a6ede..8f17d16183 100644 --- a/src/test/java/org/mybatis/spring/sample/AbstractSampleJobTest.java +++ b/src/test/java/org/mybatis/spring/sample/AbstractSampleJobTest.java @@ -22,6 +22,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.test.JobLauncherTestUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -97,8 +98,10 @@ void testJob() throws Exception { @Configuration static class LocalContext { @Bean - JobLauncherTestUtils jobLauncherTestUtils() { - return new JobLauncherTestUtils(); + JobLauncherTestUtils jobLauncherTestUtils(Job job) { + JobLauncherTestUtils utils = new JobLauncherTestUtils(); + utils.setJob(job); + return utils; } @Bean diff --git a/src/test/java/org/mybatis/spring/sample/SampleJobJavaConfigTest.java b/src/test/java/org/mybatis/spring/sample/SampleJobJavaConfigTest.java index 759d7a2d92..7f6c32c699 100644 --- a/src/test/java/org/mybatis/spring/sample/SampleJobJavaConfigTest.java +++ b/src/test/java/org/mybatis/spring/sample/SampleJobJavaConfigTest.java @@ -16,9 +16,11 @@ package org.mybatis.spring.sample; import org.mybatis.spring.sample.config.SampleJobConfig; +import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringJUnitConfig({ SampleJobConfig.class, AbstractSampleJobTest.LocalContext.class }) +@SpringBatchTest class SampleJobJavaConfigTest extends AbstractSampleJobTest { @Override protected String getExpectedOperationBy() { diff --git a/src/test/java/org/mybatis/spring/sample/SampleJobXmlConfigTest.java b/src/test/java/org/mybatis/spring/sample/SampleJobXmlConfigTest.java index 461e9bf3c1..7dfe2f3691 100644 --- a/src/test/java/org/mybatis/spring/sample/SampleJobXmlConfigTest.java +++ b/src/test/java/org/mybatis/spring/sample/SampleJobXmlConfigTest.java @@ -15,11 +15,13 @@ */ package org.mybatis.spring.sample; +import org.springframework.batch.test.context.SpringBatchTest; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringJUnitConfig({ AbstractSampleJobTest.LocalContext.class, SampleJobXmlConfigTest.LocalContext.class }) +@SpringBatchTest class SampleJobXmlConfigTest extends AbstractSampleJobTest { @Override diff --git a/src/test/java/org/mybatis/spring/sample/config/SampleJobConfig.java b/src/test/java/org/mybatis/spring/sample/config/SampleJobConfig.java index 282c034c57..d951605dc9 100644 --- a/src/test/java/org/mybatis/spring/sample/config/SampleJobConfig.java +++ b/src/test/java/org/mybatis/spring/sample/config/SampleJobConfig.java @@ -34,9 +34,12 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.batch.core.job.builder.JobBuilder; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.step.builder.StepBuilder; +import org.springframework.batch.item.ItemProcessor; +import org.springframework.batch.item.ItemReader; +import org.springframework.batch.item.ItemWriter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; @@ -50,12 +53,6 @@ @EnableBatchProcessing public class SampleJobConfig { - @Autowired - private JobBuilderFactory jobBuilderFactory; - - @Autowired - private StepBuilderFactory stepBuilderFactory; - @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL) @@ -66,15 +63,15 @@ public DataSource dataSource() { } @Bean - public PlatformTransactionManager transactionalManager() { - return new DataSourceTransactionManager(dataSource()); + public PlatformTransactionManager transactionManager(DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); } @Bean - public SqlSessionFactory sqlSessionFactory() throws Exception { + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); SqlSessionFactoryBean ss = new SqlSessionFactoryBean(); - ss.setDataSource(dataSource()); + ss.setDataSource(dataSource); ss.setMapperLocations(resourcePatternResolver.getResources("org/mybatis/spring/sample/mapper/*.xml")); org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setDefaultExecutorType(ExecutorType.BATCH); @@ -83,10 +80,10 @@ public SqlSessionFactory sqlSessionFactory() throws Exception { } @Bean - public MyBatisCursorItemReader reader() throws Exception { + public MyBatisCursorItemReader reader(SqlSessionFactory sqlSessionFactory) { // @formatter:off return new MyBatisCursorItemReaderBuilder() - .sqlSessionFactory(sqlSessionFactory()) + .sqlSessionFactory(sqlSessionFactory) .queryId("org.mybatis.spring.sample.mapper.UserMapper.getUsers") .build(); // @formatter:on @@ -98,10 +95,10 @@ public UserToPersonItemProcessor processor() { } @Bean - public MyBatisBatchItemWriter writer() throws Exception { + public MyBatisBatchItemWriter writer(SqlSessionFactory sqlSessionFactory) { // @formatter:off return new MyBatisBatchItemWriterBuilder() - .sqlSessionFactory(sqlSessionFactory()) + .sqlSessionFactory(sqlSessionFactory) .statementId("org.mybatis.spring.sample.mapper.PersonMapper.createPerson") .itemToParameterConverter(createItemToParameterMapConverter("batch_java_config_user", LocalDateTime.now())) .build(); @@ -120,24 +117,24 @@ public static Converter> createItemToParameterMapConv } @Bean - public Job importUserJob() throws Exception { + public Job importUserJob(JobRepository jobRepository, Step step1) { // @formatter:off - return jobBuilderFactory.get("importUserJob") - .flow(step1()) + return new JobBuilder("importUserJob", jobRepository) + .flow(step1) .end() .build(); // @formatter:on } @Bean - public Step step1() throws Exception { + public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, ItemReader reader, + ItemProcessor processor, ItemWriter writer) { // @formatter:off - return stepBuilderFactory.get("step1") - .transactionManager(transactionalManager()) - .chunk(10) - .reader(reader()) - .processor(processor()) - .writer(writer()) + return new StepBuilder("step1", jobRepository) + .chunk(10, transactionManager) + .reader(reader) + .processor(processor) + .writer(writer) .build(); // @formatter:on } diff --git a/src/test/java/org/mybatis/spring/submitted/xa/UserServiceTest.java b/src/test/java/org/mybatis/spring/submitted/xa/UserServiceTest.java index 06e7c6e1f2..0aeeac48b7 100644 --- a/src/test/java/org/mybatis/spring/submitted/xa/UserServiceTest.java +++ b/src/test/java/org/mybatis/spring/submitted/xa/UserServiceTest.java @@ -17,14 +17,16 @@ import static org.assertj.core.api.Assertions.assertThat; -import javax.transaction.UserTransaction; - +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import jakarta.transaction.UserTransaction; + +@Disabled("Yet not found OSS implementation that supported Jakarta EE 9+ APIs") @ExtendWith(SpringExtension.class) @SpringJUnitConfig(locations = "classpath:org/mybatis/spring/submitted/xa/applicationContext.xml") class UserServiceTest {