用于JPARepository春季批处理+春季引导的ItemReader

时间:2018-11-02 11:14:48

标签: spring-boot spring-data-jpa spring-batch

我有一个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

0 个答案:

没有答案