在Vert.x RXJava中批量插入

时间:2015-12-26 09:24:21

标签: java rx-java rx-android vert.x vertx3

我正在一起试验Vert.x和Reactive Extensions(RXJava)并发现很难编写异步事件。

问题陈述

  1. 建立关闭自动提交的数据库连接。
  2. 批量将数据插入table1
  3. 更新table2中的状态
  4. 提交
  5. 由于Vert.x中的大多数操作都是异步的,我正在尝试使用RxJava编写/链接它们。这就是我到目前为止所提出的。

    public Observable<Boolean> insertBulkDataAndUpdateStatus (final List<JsonArray> inputs,final MyObject obj){
    
        System.out.println("Total Rows to be inserted : "+inputs.size());
        return getModifiedConnObservable()
                .flatMap(conn ->{
    
                    System.out.println("Obtained connection .. ");
    
                    inputs.forEach(json->{
                        System.out.println("Inserting a row");
    
                        conn.updateWithParamsObservable(sql, json).subscribe();
                    });
                    //Checkpoint 1
                    System.out.println("updating completion status");
                    obj.complete();
                    updateStatus(conn,obj).subscribe(result->{
                        System.out.println("Committing");
                        commit(conn).subscribe();
                    });
    
                    return Observable.just(true);
                });
    }
    
    Observable<SQLConnection> getModifiedConnObservable(){
        return _jdbc.getConnectionObservable().flatMap(conn->{
            return  Observable.just(conn).doOnNext(con->con.setAutoCommitObservable(false).subscribe()).doOnUnsubscribe(conn::close);
        });
    }
    

    虽然这种作品,但我确信这不是理想的方法。

    • 第2点(每个记录的批量插入)和#3最终状态更新不链接在一起。而且我不确定批量插入期间是否有任何记录失败会导致#3停止发生。

    来自迫切的背景,我发现很难一起掌握Rx概念和异步事件。非常感谢任何帮助。

0 个答案:

没有答案