我有一个Spring Batch应用程序,其中读取器将从源中读取数据,处理器将其转换为与目标db兼容的POJO,而写入器会将获得的转换后的POJO写入目标db
以下是我的jpa存储库代码
public interface MyCrudRepository extends JpaRepository<MyDbEntity, String> {
List<MyDbEntity> findByPidBetween(String start, String end);
List<MyDbEntity> findByPidGreaterThan(String start);
}
我希望我的读者根据检查工作参数是否包含endPid
参数来调用findByPidBetween或findByPidGreaterThan。
我正在努力弄清楚要使用哪个ItemReader?下面是我尝试过的
@Component
@StepScope
public class MyItemReader extends RepositoryItemReader<MxGaanaDbEntity> {
@Value("#{jobParameters}")
private Map<String, JobParameter> jobParameters;
@Value("${end.pid}")
private String endpid;
private List<MyDbEntity> myDbEntities;
@Override
public void setRepository(@Qualifier("myCrudRepository")PagingAndSortingRepository<?, ?> repository) {
super.setRepository(repository);
}
@Override
public void setMethodName(String methodName) {
if (StringUtils.isEmpty(endpid))
super.setMethodName("findByPIdGreaterThan");
else
super.setMethodName("findByPIdBetween");
}
@Override
public void setArguments(List<?> arguments) {
JobParameter rawStartPid = jobParameters.get("startPid");
String startPid = (String) rawStartPid.getValue();
List<String> args = new ArrayList<>();
args.add(startPid);
if (!StringUtils.isEmpty(endpid)) {
args.add(endpid);
}
super.setArguments(args);
}
}
我不断收到以下异常消息:
Caused by: java.lang.IllegalStateException: A PagingAndSortingRepository is required