读取Excel文件的数据并执行Service的方法
我遇到过这样的情况,我需要读取Excel但是Excel文件太大了,我不能全部读取出来,然后再存储。所以只能分批读取。
如果直接在Listener里调用Service方法,会遇到空指针异常。
这是因为Service是自动注入的,但Listener却要new出来。
怎么在不跳出Listener的情况下调用Service的方法呢?
在Listener中增加一个Function,和init方法(或者有参构造方法)
SendListener类
private BiFunction<List<List<String>>, Long, String> function;
public void init(Long page, int pageSize, String phoneLine, BiFunction<List<List<String>>, Long, String> function) {
this.page = page;
this.pageSize = pageSize;
this.phoneLine = phoneLine;
this.list = Lists.newArrayList();
this.errorList = Lists.newArrayList();
this.function = function;
}
外边调用的时候就可以这样写了
外边的类
sendListener.init((long) page, pageSize, phoneLine, (rowContentlists, requestId) -> {
try {
sendMessages(template, requestId, phoneLine, taskId, rowContentlists);//这个我需要调用的方法
} catch (Exception e) {
log.error(e.getMessage());
throw new CustomException("失败");
}
return null;
});
这样在SendListener里可以通过function.apply(list, page);调用外部的方法。