此demo涉及多线程,远程调用,excel从页面读取解析(用流的方式读);先从页面选择excel, 然后点击导入按钮, 后台用POI解析校验, 然后远程调用ejb,存入数据库.(注意:excel文件并没有存储在服务器.)框架是基于struts1,
public ActionForward importUleAddress(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response){
response.setContentType("text/html;charset=utf-8");
Map resultMap = new HashMap();
//默认启动的线程数量
int threaPoolNum = 10;
long starTime=System.currentTimeMillis();
//创建定长线程池
ExecutorService espool = Executors.newFixedThreadPool(threaPoolNum);
//创建校验数据线程序列集合
// ArrayList checkDataThreadList = new ArrayList();
//创建插入数据线程序列集合
ArrayList insertUleThreadList = new ArrayList();
//接收返回值
List>> futureList = new ArrayList>>();
List> uleLists = new ArrayList>();
violationCancelInfoForm proForm = (violationCancelInfoForm) form;
//为每一个线程创建独立的参数
for (int i = 0; i < threaPoolNum; i++) {
uleLists.add(i, new ArrayList());
}
log.info("------------ start read file!------------:");
try {
Workbook wb = isE2007 ? new XSSFWorkbook(input) : new HSSFWorkbook(input);
Sheet sheet = wb.getSheetAt(0);
//获得第一个表单
Iterator rows = sheet.rowIterator();
//获得第一个表单的迭代器
//存放excel表格中的code用于判断是否有重复code
List insertList = new ArrayList();
//读取文件中的数据放入insertList
//当前行数
int rowNum = 0;
while (rows.hasNext()) {
Row row = rows.next();
//获得行数据
rowNum = row.getRowNum();
//第一行无效数据,跳过