Java EE 7 Batch

今天写了一个关于Java EE 7 Batch 的Demo,该Demo是实现将文件中的用户欠费信息分批处理,最终输出到控制台,部分代码设计如下:

MyItemReader:

@Named

public class MyItemReader extends AbstractItemReader {

private BufferedReader reader;

static int COUNT = 0;

@Override

public void open(Serializable checkpoint) throws Exception {

reader = new BufferedReader(

new InputStreamReader(

this

.getClass()

.getClassLoader()

.getResourceAsStream("/META-INF/mydata.txt")

)

);

}

@Override

public String readItem() {

try {

String s = reader.readLine();

COUNT++;

return s;

} catch (IOException ex) {

Logger.getLogger(MyItemReader.class.getName()).log(Level.SEVERE, null, ex);

}

return null;

}

}

MyItemProcessor:

@Named

public class MyItemProcessor implements ItemProcessor {

@Override

public Message processItem(Object item) throws Exception {

// TODO Auto-generated method stub

StringTokenizer tokens = new StringTokenizer((String)item, ",");

String name = tokens.nextToken();

float money;

money = Float.valueOf(tokens.nextToken());

User user = new User(name,money);

Message m = new Message();

m.setContent("尊敬的" + user.getName()

+ ",您好!您当前欠费:"+ user.getMoney() +" 请尽快交费,以免影响您的正常通话!谢谢!");

return m;

}

}

MyItemWriter:

@Named

public class MyItemWriter extends AbstractItemWriter {

@Override

public void writeItems(List list) {

/* System.out.println("writeItems: " + list);

for (Object person : list) {

em.persist(person);

}*/

System.out.println("通知:");

for (Object m : list) {

System.out.println(((Message)m).getContent());

}

}

}

测试的servlet:

@WebServlet(urlPatterns = {"/TestServlet"})

public class TestServlet extends HttpServlet {

/**

* Processes requests for both HTTP <code>GET</code> and <code>POST</code>

* methods.

*

* @param request servlet request

* @param response servlet response

* @throws ServletException if a servlet-specific error occurs

* @throws IOException if an I/O error occurs

*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=UTF-8");

try (PrintWriter out = response.getWriter()) {

out.println("<html>");

out.println("<head>");

out.println("<title>CSV-to-Database Chunk Job</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1>CSV-to-Database Chunk Job</h1>");

JobOperator jo = BatchRuntime.getJobOperator();

long jid = jo.start("myJob", new Properties());

out.println("Job submitted: " + jid + "<br>");

out.println("<br><br>Check server.log for output, also look at \"myJob.xml\" for Job XML.");

out.println("</body>");

out.println("</html>");

} catch (JobStartException | JobSecurityException ex) {

Logger.getLogger(TestServlet.class.getName()).log(Level.SEVERE, null, ex);

}

}

........

测试结果:

19:31:27,748 INFO [stdout] (batch-batch - 3) 通知:

19:31:27,748 INFO [stdout] (batch-batch - 3) 尊敬的 User1,您好!您当前欠费:11.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,749 INFO [stdout] (batch-batch - 3) 尊敬的 User2,您好!您当前欠费:21.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,749 INFO [stdout] (batch-batch - 3) 尊敬的 User3,您好!您当前欠费:22.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,749 INFO [stdout] (batch-batch - 3) 尊敬的 User4,您好!您当前欠费:23.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,750 INFO [stdout] (batch-batch - 3) 尊敬的 User5,您好!您当前欠费:24.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,750 INFO [stdout] (batch-batch - 3) 通知:

19:31:27,751 INFO [stdout] (batch-batch - 3) 尊敬的 User6,您好!您当前欠费:25.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,751 INFO [stdout] (batch-batch - 3) 尊敬的 User7,您好!您当前欠费:26.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,751 INFO [stdout] (batch-batch - 3) 尊敬的 User8,您好!您当前欠费:27.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,752 INFO [stdout] (batch-batch - 3) 尊敬的 User9,您好!您当前欠费:28.0 请尽快交费,以免影响您的正常通话!谢谢!

19:31:27,752 INFO [stdout] (batch-batch - 3) 尊敬的 User10,您好!您当前欠费:29.0 请尽快交费,以免影响您的正常通话!谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值