Spring Batch 2 升级到 3 的 Autowired 错误

错误信息为:

D:\WorkDir\iSharkFly\USVisaTrack\Source-Code\Services\Visa-Isharkfly-Service\src\main\java\com\northtecom\visatrack\api\jobs\JobParamDemo.java:43:70
java: incompatible types: java.util.Map<java.lang.String,org.springframework.batch.core.JobParameter<?>> cannot be converted to java.util.Map<java.lang.String,org.springframework.batch.core.JobParameter>

同时提示 JobBuilderFactory 也会在新的版本中删除。

问题和解决

Spring Boot 2 到 3 的有关批量部分进行了很多的调整,因此在 Spring Boot 2 批量部分的写法,到 Spring Boot 3 的时候就不能按照老的方法来写了。

package 调整

构造 Job 和 Step 的构造类被重新命名并且移动到不同的 package 内了。

import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;

移动到下面的 package 中了。

import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;

不在需要注入

在老的项目中,我们可能会先自动注入一下。

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

如上面的写法,限制这个也不需要了。

创建任务的写法

使用 new 进行创建,并且需要添加 jobRepository。

创建 Step 的写法也是一样的,使用 new 进行创建,同时也需要添加 jobRepository, 并且还需要添加 PlatformTransactionManager 参数。

具体的写法的改变,请参考下面的图。

上面是有关的一些改变。

1 Like