You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:37:39