From ed7e178ccbc0e38637f190167995b9e6a6bb0c92 Mon Sep 17 00:00:00 2001 From: cha Date: Tue, 17 Jun 2025 10:32:32 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EB=B0=B0=EC=B9=98=202007=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/batch/BatchConfiguration.java | 56 +++++++++++++++++++ src/main/resources/config/application-dev.yml | 2 + 2 files changed, 58 insertions(+) create mode 100644 src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java diff --git a/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java b/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java new file mode 100644 index 00000000..108ea20b --- /dev/null +++ b/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java @@ -0,0 +1,56 @@ +package com.interplug.qcast.config.batch; + +import javax.sql.DataSource; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; +import org.springframework.batch.support.DatabaseType; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.transaction.PlatformTransactionManager; + +/** + * Spring Batch Configuration for SQL Server without sequence support + */ +@Configuration +public class BatchConfiguration { + + /** + * Custom JobRepository that uses table-based ID generation instead of sequences + */ + @Bean + @Primary + public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception { + JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); + factory.setDataSource(dataSource); + factory.setTransactionManager(transactionManager); + + // 테이블 prefix 설정 + factory.setTablePrefix("BATCH_"); + + // 격리 레벨 설정 + factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); + + // SQL Server 데이터베이스 타입 설정 + factory.setDatabaseType(DatabaseType.SQLSERVER.getProductName()); + + factory.afterPropertiesSet(); + return factory.getObject(); + } + + /** + * TaskExecutor for async batch processing + */ + @Bean + public TaskExecutor batchTaskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(5); + executor.setMaxPoolSize(10); + executor.setQueueCapacity(25); + executor.setThreadNamePrefix("batch-"); + executor.initialize(); + return executor; + } +} \ No newline at end of file diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index 0bd61c41..55e9d1c2 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -20,6 +20,8 @@ spring: batch: jdbc: initialize-schema: never + table-prefix: BATCH_ + schema: job: names: ${job.name:NONE} enabled: false From 760b00e8a46b0d954e301135376ee50f21552923 Mon Sep 17 00:00:00 2001 From: cha Date: Tue, 17 Jun 2025 13:34:27 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EB=B0=B0=EC=B9=98=202007=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interplug/qcast/config/batch/BatchConfiguration.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java b/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java index 108ea20b..a9a23b49 100644 --- a/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java +++ b/src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java @@ -1,6 +1,8 @@ package com.interplug.qcast.config.batch; import javax.sql.DataSource; + +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; import org.springframework.batch.support.DatabaseType; @@ -15,6 +17,7 @@ import org.springframework.transaction.PlatformTransactionManager; * Spring Batch Configuration for SQL Server without sequence support */ @Configuration +@EnableBatchProcessing(modular = false) public class BatchConfiguration { /** @@ -34,8 +37,8 @@ public class BatchConfiguration { factory.setIsolationLevelForCreate("ISOLATION_SERIALIZABLE"); // SQL Server 데이터베이스 타입 설정 - factory.setDatabaseType(DatabaseType.SQLSERVER.getProductName()); - + //factory.setDatabaseType(DatabaseType.SQLSERVER.getProductName()); + factory.setDatabaseType("sqlserver"); factory.afterPropertiesSet(); return factory.getObject(); }