错误信息为:
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 参数。
具体的写法的改变,请参考下面的图。
上面是有关的一些改变。