У меня есть пакетное приложение Spring, в котором читатель будет читать данные из источника, а процессор преобразует их в POJO, совместимый с базой данных назначения, а писатель записывает полученный преобразованный POJO в базу данных назначения
Ниже приведен мой код репозитория jpa.
public interface MyCrudRepository extends JpaRepository<MyDbEntity, String> {
List<MyDbEntity> findByPidBetween(String start, String end);
List<MyDbEntity> findByPidGreaterThan(String start);
}
Я хочу, чтобы мой читатель вызвал findByPidBetween или findByPidGreaterThan на основе проверки, содержит ли параметр задания параметр endPid или нет.
Я изо всех сил пытаюсь понять, какой 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
Я только что ответил на этот вопрос: stackoverflow.com/questions/53117650/itemreader/…. Думаю, они связаны. Ты согласен?




Можете ли вы попробовать ввести MyCrudRepository вместо PagingAndSortingRepository и удалить квалификатор?