今天写了一个关于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 请尽快交费,以免影响您的正常通话!谢谢!
分享到:
相关推荐
java ee7 batch application 分享1
java ee7 batch application 執行結果監測1
What’s New in Java EE 7 Chapter 2 : Servlets WebServlet Servlet Filters Event Listeners Asynchronous Support Nonblocking I/O Web Fragments Security Resource Packaging Error ...
idex-ee-08 IDEx Java EE Batch 08 - 公共存储库
建造mvn clean package && docker build -t com.nabenik / batchee-demo。跑步泊坞窗rm -f batchee-demo || true && docker run -d -p 8080:8080 -p 4848:4848 --name batchee-demo com.nabenik / batchee-demo
Java EE focused on a few technologies, largely to the detriment of alternative, better solutions. When the Spring framework debuted, few would have agreed that Java EE represented the best-in-breed ...
清单1在非Java EE环境使用JPA接口的例子 5 清单2在容器中运行的JPA例子 5 3. Entity Bean 6 3.1定义对Entity中属性变量的访问 6 3.2主键和实体标识(Primary Key and Entity Identity) 8 4. EntityManager 9 4.1配置...
清单1在非Java EE环境使用JPA接口的例子 5 清单2在容器中运行的JPA例子 5 3. Entity Bean 6 3.1定义对Entity中属性变量的访问 6 3.2主键和实体标识(Primary Key and Entity Identity) 8 4. EntityManager 9 4.1配置...
138 X ∣ Java EE 开发的颠覆者:Spring Boot 实战 第7 章 Spring Boot 的Web 开发 .... ............ 170 7.1 Spring Boot 的Web 开发支持 .... ....... 170 7.2 Thymeleaf 模板引擎 .... ..........................
清单1在非Java EE环境使用JPA接口的例子 5 清单2在容器中运行的JPA例子 5 3. Entity Bean 6 3.1定义对Entity中属性变量的访问 6 3.2主键和实体标识(Primary Key and Entity Identity) 8 4. EntityManager 9 4.1配置...
Other recipes include Spring enterprise solutions for topics such as Spring Java EE integration, Spring Integration, Spring Batch, Spring Remoting, messaging, transactions, and working with big data ...
* Spring enterprise: Spring Java EE integration, Spring Integration, Spring Batch, jBPM with Spring, Spring Remoting, messaging, transactions, scaling using Terracotta and GridGrain, and more. ...
Spring enterprise: Spring Java EE integration, Spring Integration, Spring Batch, Spring Remoting, messaging, transactions, and working with big data and the cloud using Hadoop and MongoDB. Spring web...
Other recipes include Spring enterprise solutions for topics such as Spring Java EE integration, Spring Integration, Spring Batch, Spring Remoting, messaging, transactions, and working with big data ...
在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring ...
在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring ...
在当今Java EE 开发中,Spring 框架是当之无愧的王者。而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring ...
VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章...
VIII ∣ Java EE 开发的颠覆者:Spring Boot 实战 3.7 测试 .... .... ............. 66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章...
37.4. Using a Java EE Managed Transaction Manager 37.5. Mixing XA and Non-XA JMS Connections 37.6. Supporting an Alternative Embedded Transaction Manager 38. Hazelcast 39. Quartz Scheduler 40. Spring ...