Rxjava,发生错误时重复现有项

Rxjava,发生错误时重复现有项,java,spring-boot,rx-java,reactive-programming,Java,Spring Boot,Rx Java,Reactive Programming,这是我的手术, 当出现错误时,我希望retryWhen会重复当前项,但它会从一开始就重复整个过程,我尝试修改此项,但它不会重复并引发异常 return Observable.fromArray(getTodayShareHolding(dd,MM,yyyy,tmpTicker, item.getId())).retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS) ) ); 然

这是我的手术, 当出现错误时,我希望
retryWhen
会重复当前项,但它会从一开始就重复整个过程,我尝试修改此项,但它不会重复并引发异常

return Observable.fromArray(getTodayShareHolding(dd,MM,yyyy,tmpTicker, item.getId())).retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS) ) );
然后我试着像这样修改代码

@GetMapping(path = "operaion")
    public @ResponseBody void operation(@RequestParam(value = "startDate", required = true) String startDate, @RequestParam(value = "endDate", required = true) String endDate ) throws IOException, ParseException {

        List <EntityList> plist = EntityListListRepository.findByPendingDayBetweenAndIsProcessedFalseAndIsUpdatedFalse(formatDate(startDate), formatDate(endDate) );                 
        long startTime = System.currentTimeMillis();
            Observable.fromIterable(plist).concatMap( item -> {             
                Calendar cal = Calendar.getInstance();                                  
                cal.setTime(item.getPendingDay());
                Integer yyyy = cal.get(Calendar.YEAR);
                Integer MM = cal.get(Calendar.MONTH)+1;
                Integer dd = cal.get(Calendar.DAY_OF_MONTH);
                String tmpId = item.getTmpId().toString();
                Integer delayCheck = item.getTmpId();
                Integer delayMiniSec = 0;

                if(delayCheck >= 70000) {
                        delayMiniSec = 0;

                }
                Date currentTime = new Date();      
                System.out.println("Step1 ::{ : "+dd+"/"+MM+"/"+yyyy+"@"+tmpId+" id = ["+item.getId()+"] } startInsert time = "+currentTime);
                return Observable.fromArray(fetchList(dd,MM,yyyy,tmpId, item.getId()))

            }).retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS) ) );
            .subscribe(System.out::println);
@GetMapping(path=“operaion”)
public@ResponseBody void操作(@RequestParam(value=“startDate”,required=true)字符串startDate,@RequestParam(value=“endDate”,required=true)字符串endDate)引发IOException,ParseException{
List plist=EntityListListRepository.FindBypendingDayBeween和DisprocessedFalse和SupdatedFalse(formatDate(startDate),formatDate(endDate));
long startTime=System.currentTimeMillis();
可观测的.可观测的(plist).concatMap(项->{
Calendar cal=Calendar.getInstance();
cal.setTime(item.getPendingDay());
整数yyy=cal.get(日历年);
整数MM=cal.get(日历月)+1;
整数dd=cal.get(日历日,月日);
字符串tmpId=item.getTmpId().toString();
整数delayCheck=item.getTempId();
整数delayMiniSec=0;
如果(延迟检查>=70000){
delayminiec=0;
}
日期当前时间=新日期();
System.out.println(“步骤1::{:“+dd+”/“+MM+”/“+yyyy+”@“+tmpId+”id=[“+item.getId()+”]}开始插入时间=“+currentTime”);
返回Observable.fromArray(fetchList(dd、MM、yyyy、tmpId、item.getId())
}).retryWhen(errors->errors.flatMap(error->Observable.timer(5,TimeUnit.SECONDS));
.subscribe(System.out::println);
它会重复整个过程,当喷射发生时, 有什么建议吗

更新: 或者我试试下面这样的?

所以你想要的是
1->2->3->error->3->4->…
而不是
1->2->3->error->1->2->3->…
,是吗?是的,当出现错误时,请指导我上游被破坏。
重试
重新订阅上游以恢复流。所以困难在于如何将上游恢复到指定的状态。我认为没有通用的方法。在您的情况下,它不需要rxjava。因此,您需要的是
1->2->3->error->3->4->…
,而不是
1->2->3->error->1->2->3->…
,是吗?是的,当出现错误时,请指导我上游断开。
重试
重新订阅上游以恢复流。所以困难在于如何将上游恢复到指定的位置我认为没有通用的方法。在你的情况下,它不需要rxjava。