如何从Spring Batch 5中移除H2数据库依赖?
彻底移除H2依赖并配置无持久化元数据的Spring Batch 5
1. 移除H2依赖
直接修改pom.xml,删除手动添加的H2依赖项:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-batch</artifactId> <version>3.4.2</version> </dependency>
(注:spring-boot-starter-batch默认不会自动引入H2,仅需删除你手动添加的H2依赖即可)
2. 禁用Spring Boot自动配置
在Spring Boot启动类上排除数据源和Batch的数据库自动配置,避免框架自动创建H2数据源:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, BatchAutoConfiguration.class }) public class YourBatchApplication { public static void main(String[] args) { SpringApplication.run(YourBatchApplication.class, args); } }
3. 手动配置无资源型Batch组件
创建Batch配置类,定义内存型作业仓库和无资源事务管理器,确保元数据仅存于内存、不持久化到数据库:
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.batch.core.launch.support.SimpleJobLauncher; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableBatchProcessing public class BatchConfig { // 无资源事务管理器,不依赖数据库 @Bean public ResourcelessTransactionManager transactionManager() { return new ResourcelessTransactionManager(); } // 基于内存Map的作业仓库,元数据仅在应用运行时存在 @Bean public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception { MapJobRepositoryFactoryBean factoryBean = new MapJobRepositoryFactoryBean(transactionManager); factoryBean.afterPropertiesSet(); return factoryBean.getObject(); } // 自定义作业启动器,绑定内存型仓库 @Bean public SimpleJobLauncher jobLauncher(JobRepository jobRepository) throws Exception { SimpleJobLauncher jobLauncher = new SimpleJobLauncher(); jobLauncher.setJobRepository(jobRepository); jobLauncher.afterPropertiesSet(); return jobLauncher; } // 作业/步骤构建器工厂,用于定义你的业务作业 @Bean public JobBuilderFactory jobBuilderFactory(JobRepository jobRepository) { return new JobBuilderFactory(jobRepository); } @Bean public StepBuilderFactory stepBuilderFactory(JobRepository jobRepository, ResourcelessTransactionManager transactionManager) { return new StepBuilderFactory(jobRepository, transactionManager); } }
4. 验证配置有效性
启动应用后检查:
- 日志中无H2数据库初始化相关内容(如
Initializing H2 embedded database) - 执行Batch作业后,重启应用,之前的作业执行记录不会保留
内容的提问来源于stack exchange,提问作者Alagukannan Shekar
相关产品推荐
相关产品推荐

