2016-02-16 18 views
0

我有一个从输入进来的值列表。值列表可以来自一个文件或一个ResultSet对象或任何其他对象。在java中使用输入实现循环作业执行程序

目标是执行工作流中的下一个步骤,以基于输入值异步运行。

我该如何执行此操作。是否有任何框架,我可以使用这里

这里是我创建通过价值

package com.myframework.loopexecutor.ExecuteLoop; 

import java.sql.SQLException; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.Statement; 
import java.sql.DriverManager; 

public class LoopExecutor { 

    static String dbName; 
    static String dbServerName; 
    static String lDbName; 
    static String lServerName; 
    static String serverName; 
    static String dbServerNameSecondary; 
    static String hive_db = "csp"; 

    private static String driverName = "org.apache.hive.jdbc.HiveDriver"; 

    public static void main(String[] args) throws SQLException { 

     try { 
      Class.forName(driverName); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      System.exit(1); 
     } 

     Connection con = DriverManager.getConnection("jdbc:hive2://localhost"); 
     Statement stmt = con.createStatement(); 
     ResultSet res = stmt.executeQuery(
       "select distinct db_name as db_name,db_server_name as db_server_name,lower(db_name) as l_db_name,lower(db_server_name) as l_server_name,regexp_replace(lower(db_server_name), '-', '_') as server_name,db_server_name_secondary as db_server_name_secondary from csp.curated_input"); 

     while (res.next()) { 
      dbName = res.getString("db_name"); 
      dbServerName = res.getString("db_server_name"); 
      lDbName = res.getString("l_db_name"); 
      lServerName = res.getString("l_server_name"); 
      serverName = res.getString("server_name"); 
      dbServerNameSecondary = res.getString("db_server_name_secondary"); 

      String drop = "Drop table if exists " + hive_db + "." + "IB_C3_" + dbName + "_" + dbServerName; 
      String insert = "insert into table " + hive_db + "." + "IB_export_log select " + "\'ib_c3_" + dbName + "_" 
        + serverName + "\' from " + hive_db + "." + "dual limit 1"; 

      System.out.println("##########################DROP##################################"); 
      System.out.println(drop); 

      System.out.println("############################INSERT##################################"); 
      System.out.println(insert); 

     } 

    } 
} 

回答

0

有这样做的各种方式的列表迭代的代码。如果你想使用像Spring这样的框架,那么可以使用一个注释来使其异步。

在普通的Java,您可以使用ExecutorService

ExecutorService es = Executors.newFixedThreadPool(1); 
Future<?> future = es.submit(() -> yourCode()); 

还是真的很快在Java中8:

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> yourCode()); 

有很多选项来配置你的线程池等,并抽象,您可以水平使用。这真的取决于你想要做什么。一般来说,我会先选择一些简单的高级别。