代码之家  ›  专栏  ›  技术社区  ›  Manu

Spring Boot 3:具有模块化上下文的Batchapplication不会启动任何作业

  •  0
  • Manu  · 技术社区  · 3 年前

    我升级到了Spring Boot 3,当我通过 --spring.batch.job.names

    这是我的主要课程:

    @SpringBootApplication
    @EnableJpaRepositories("path.to.my.repositories")
    @EntityScan("path.to.my.entities")
    public class MyBatchApplication{
        public static void main(String[] args) {
            System.exit(SpringApplication.exit(SpringApplication.run(MyBatchApplication.class, args)));
        }
    
    }
    

    这是我的配置

    @Configuration
    @EnableBatchProcessing(modular = true)
    public class MyModularBatchJobContextConfiguration {
        @Bean
        ApplicationContextFactory getJobAContext() {
            return new GenericApplicationContextFactory(JobAConfig.class);
        }
    
        @Bean
        ApplicationContextFactory getJobBContext() {
            return new GenericApplicationContextFactory(JobBConfig.class);
        }
    }
    

    JobA.class JobB.class 基本上是一样的:

    public class JobAConfig {
    
        private static final String MY_JOB_NAME = "jobA"
    
        @Autowired
        private EntityManagerFactory emf;
    
        @Bean
        public Job jobA(JobRepository jobRepository, Step myStep) {
            return new JobBuilder(MY_JOB_NAME, jobRepository)
                    .flow(myStep)
                    .end()
                    .build();
        }
    
        @Bean
        public Step myStep(JpaTransactionManager transactionManager,
                           JobRepository jobRepository,
                           FlatFileItemReader<MyEntity> reader,
                           ItemProcessor<MyEntity, MyEntity> processor,
                           JpaItemWriter<MyEntity> entityWriter) {
            return new StepBuilder(MY_STEP_NAME, jobRepository)
                    .<MyEntity, MyEntity>chunk(10, transactionManager)
                    .reader(reader)
                    .processor(processor)
                    .writer(plzOrtEntityWriter)
                    .transactionManager(transactionManager)
                    .build();
        }
    
    // Reader, Writer, Processor...
    

    当我和 java -jar mybatchapplication.jar --spring.batch.job.names=jobA 什么也没发生,作业没有开始。

    2023-05-11T22:05:21.823+02:00  INFO 9716 --- [           main] d.f.r.batch.MyBatchApplication: Starting MyBatchApplicationusing Java 17.0.5 with PID 9716 (C:\gits\mygit\batch\target\mybatchapplication.jar started by me in C:\gits\mygit)
    2023-05-11T22:05:21.825+02:00  INFO 9716 --- [           main] d.f.r.batch.MyBatchApplication: No active profile set, falling back to 1 default profile: "default"
    2023-05-11T22:05:22.112+02:00  INFO 9716 --- [           main] o.s.b.c.c.annotation.BatchRegistrar      : Finished Spring Batch infrastructure beans configuration in 6 ms.
    2023-05-11T22:05:22.118+02:00  INFO 9716 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
    2023-05-11T22:05:22.149+02:00  INFO 9716 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 25 ms. Found 2 JPA repository interfaces.
    2023-05-11T22:05:22.571+02:00  INFO 9716 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
    2023-05-11T22:05:22.616+02:00  INFO 9716 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.7.Final
    2023-05-11T22:05:22.895+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
    2023-05-11T22:05:22.995+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-1 - Driver does not support get/set network timeout for connections. (Receiver class org.h2.jdbc.JdbcConnection does not define or inherit an implementation of the resolved method 'abstract int getNetworkTimeout()' of interface java.sql.Connection.)
    2023-05-11T22:05:22.998+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:file:~/mydb user=SA
    2023-05-11T22:05:22.999+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
    2023-05-11T22:05:23.016+02:00  INFO 9716 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
    2023-05-11T22:05:23.542+02:00  INFO 9716 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
    2023-05-11T22:05:23.552+02:00  INFO 9716 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
    2023-05-11T22:05:23.588+02:00  INFO 9716 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta data indicating: H2
    2023-05-11T22:05:23.613+02:00  INFO 9716 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
    2023-05-11T22:05:24.294+02:00  WARN 9716 --- [           main] o.s.b.c.l.AbstractListenerFactoryBean    : org.springframework.batch.item.ItemProcessor is an interface. The implementing class will not be queried for annotation based listener configurations. If using @StepScope on a @Bean method, be sure to return the implementing class so listener annotations can be used.
    2023-05-11T22:05:24.322+02:00  INFO 9716 --- [           main] .c.a.BatchObservabilityBeanPostProcessor : No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
    2023-05-11T22:05:24.358+02:00  INFO 9716 --- [           main] .c.a.BatchObservabilityBeanPostProcessor : No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
    2023-05-11T22:05:24.370+02:00  WARN 9716 --- [           main] o.s.b.c.l.AbstractListenerFactoryBean    : org.springframework.batch.item.ItemProcessor is an interface. The implementing class will not be queried for annotation based listener configurations. If using @StepScope on a @Bean method, be sure to return the implementing class so listener annotations can be used.
    2023-05-11T22:05:24.371+02:00  INFO 9716 --- [           main] .c.a.BatchObservabilityBeanPostProcessor : No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
    2023-05-11T22:05:24.371+02:00  INFO 9716 --- [           main] .c.a.BatchObservabilityBeanPostProcessor : No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
    2023-05-11T22:05:24.395+02:00  INFO 9716 --- [           main] d.f.r.batch.MyBatchApplication: Started MyBatchApplicationin 2.848 seconds (process running for 3.242)
    2023-05-11T22:05:24.406+02:00  INFO 9716 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
    2023-05-11T22:05:24.410+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
    2023-05-11T22:05:24.417+02:00  INFO 9716 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
    

    有人知道这里出了什么问题吗? 我也试过 --spring.batch.job.name= ,没有成功。

    1 回复  |  直到 3 年前
        1
  •  2
  •   Mahmoud Ben Hassine    3 年前

    使用Spring Boot 3,无需 @EnableBatchProcessing 。如果添加它,Spring Batch的自动配置(元数据表创建、启动时启动作业等)将停止 migration guide 弹簧套3。

    因此,在您的情况下,如果您想模块化您的上下文,您有两个选项:

    • 继续使用 @启用批处理 从中受益 modular = true ,但在这种情况下,您必须手动执行Spring Boot以前的操作(即初始化数据库、在启动时运行作业等)。
    • 或删除 @启用批处理 (像以前一样受益于Boot 3功能),但在这种情况下,您需要手动模块化上下文
        2
  •  0
  •   mohamed habib    3 年前

    在属性文件中添加:

    spring.batch.job.enabled: true