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、付费专栏及课程。

余额充值