Java 在实例中运行并在再次运行之前停止5分钟的代码

Java 在实例中运行并在再次运行之前停止5分钟的代码,java,sql,algorithm,while-loop,Java,Sql,Algorithm,While Loop,我想在每个实例的实例中运行我的代码。代码从我的数据库中提取数据作为结果集,然后停止。再等待5分钟,提取结果集并停止。这个计划永远不会结束。问题是程序在第一次运行时会等待5分钟,但确实会再次等待,因为它会继续运行 下面是代码。结果集和数据库连接部分正常 package postilion_error.checker; /** * * @author kithinjid */ import java.io.IOException; import java.sql.*; import java

我想在每个实例的实例中运行我的代码。代码从我的数据库中提取数据作为结果集,然后停止。再等待5分钟,提取结果集并停止。这个计划永远不会结束。问题是程序在第一次运行时会等待5分钟,但确实会再次等待,因为它会继续运行 下面是代码。结果集和数据库连接部分正常

package postilion_error.checker;

/**
 *
 * @author kithinjid
 */
import java.io.IOException;
import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.logging.*;
import java.util.TimerTask;
import static sun.font.FontManager.logger;

public class POSTILION_ERRORCHECKER {


  static Logger log;
  static Handler file_handler;
  Connection conn=null;
  Statement st=null;
  static ResultSet rs=null;
  static int i = 0;
  static int counter=0;
  static boolean checker=true;


    private  void dbconnect()
    {
        String username="Postilion";
        String password="Password12";

        String hostname="jdbc:sqlserver://172.16.112.6;databaseName=realtime";
        try
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn=DriverManager.getConnection(hostname,username,password);
            System.out.println("TIME:"+dateString("MM:dd-HH:mm:ss")+":connected to database");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
      }
    private ResultSet check_00(String query1)
    {
        dbconnect();     

        try
        {
        st=conn.createStatement();
        rs=st.executeQuery(query1);
        }catch(Exception e)
        {
        e.printStackTrace();
        }


        return rs ;
    }
    public static void scheduled()
    {


         Timer timer=new Timer();
    timer.schedule(new TimerTask() {

    @Override
   public void run() {
    while(checker==true)
    {
    log=logger.getLogger("my logger");
    try {
    file_handler=new FileHandler("C:\\Users\\kithinjid\\Google Drive\\interswitch\\NetBeansProjects\\POSTILION_ERROR CHECKER\\dist\\logg.txt");
    SimpleFormatter formatter=new SimpleFormatter();
    file_handler.setFormatter(formatter);
    log.addHandler(file_handler);
    } catch (IOException ex) {
    log.info(dateString("HHmmss"));
    Logger.getLogger(POSTILION_ERRORCHECKER.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SecurityException ex)
    {
    Logger.getLogger(POSTILION_ERRORCHECKER.class.getName()).log(Level.SEVERE, null, ex);
    }
    String query="SELECT TOP 100 [tran_nr]\n" +
"      ,[gmt_date_time]\n" +
"      ,[time_local]\n" +
"      ,[date_local]\n" +
"      ,[sink_node]\n" +
"      ,[rsp_code_req_rsp]\n" +
"      ,[rsp_code_cmp]\n" +
"      ,[rsp_code_rev]\n" +
"  FROM [realtime].[dbo].[tm_trans_10] where sink_node = 'GTBUSDsnk' ORDER BY tran_nr desc";
       POSTILION_ERRORCHECKER pe=new POSTILION_ERRORCHECKER();
       pe.dbconnect();


    try
    {
      ResultSet result=pe.check_00(query);

       while(result.next()==true)
       {
          //loop for counter and displaying
      int response=Integer.parseInt(result.getString("rsp_code_req_rsp"));
     System.out.println(response);
     if (response==91)
     {
     counter++;
    if (counter>=10)
    System.out.println("TIME:"+dateString("MM:dd-HH:mm:ss")+"--error respose code:91 of count:"+ counter+" to sink node GTBUSDsnk");
     }

       }
       }catch(Exception e)
       {
           e.printStackTrace();
       }
                       // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                    }
                    }
                },30000,30000); 

    }

    public static void main(String[] args) 
    {
        scheduled();
        System.out.println("execution started");
    }
    private static String dateString(String formart)
    {
        DateFormat dateFormat = new SimpleDateFormat(formart);
        java.util.Date date = new java.util.Date();
        return dateFormat.format(date);
    }


}

您可以创建一个名为delay()的函数,如下所示,然后在需要等待5分钟时调用该函数。但这可能会阻止你的程序,而且如果你同时需要做其他事情,它也不会起作用

private void delay()
{
    try {
         Thread.sleep(5 * 60 * 1000);
    } catch(Exception e) { }
}

感谢@user1637645,这里是工作代码

package postilion_error.checker;

/**
 *
 * @author kithinjid
 */
import java.io.IOException;
import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.logging.*;
import java.util.TimerTask;
import static sun.font.FontManager.logger;

public class POSTILION_ERRORCHECKER {


  static Logger log;
  static Handler file_handler;
  Connection conn=null;
  Statement st=null;
  static ResultSet rs=null;
  static int i = 0;
  static int counter=0;
  static boolean checker=true;


    private  void dbconnect()
    {
        String username="Postilion";
        String password="Password12";

        String hostname="jdbc:sqlserver://172.16.112.6;databaseName=realtime";
        try
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn=DriverManager.getConnection(hostname,username,password);
            System.out.println("TIME:"+dateString("MM:dd-HH:mm:ss")+":connected to database");
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
      }
    private ResultSet check_00(String query1)
    {
        dbconnect();     

        try
        {
        st=conn.createStatement();
        rs=st.executeQuery(query1);
        }catch(Exception e)
        {
        e.printStackTrace();
        }


        return rs ;
    }
    public static void scheduled()
    {


         Timer timer=new Timer();
    timer.schedule(new TimerTask() {

    @Override
   public void run() {
    while(checker==true)
    {
    log=logger.getLogger("my logger");
    try {
    file_handler=new FileHandler("C:\\Users\\kithinjid\\Google Drive\\interswitch\\NetBeansProjects\\POSTILION_ERROR CHECKER\\dist\\logg.txt");
    SimpleFormatter formatter=new SimpleFormatter();
    file_handler.setFormatter(formatter);
    log.addHandler(file_handler);
    } catch (IOException ex) {
    log.info(dateString("HHmmss"));
    Logger.getLogger(POSTILION_ERRORCHECKER.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SecurityException ex)
    {
    Logger.getLogger(POSTILION_ERRORCHECKER.class.getName()).log(Level.SEVERE, null, ex);
    }
    String query="SELECT TOP 100 [tran_nr]\n" +
"      ,[gmt_date_time]\n" +
"      ,[time_local]\n" +
"      ,[date_local]\n" +
"      ,[sink_node]\n" +
"      ,[rsp_code_req_rsp]\n" +
"      ,[rsp_code_cmp]\n" +
"      ,[rsp_code_rev]\n" +
"  FROM [realtime].[dbo].[tm_trans_10] where sink_node = 'GTBUSDsnk' ORDER BY tran_nr desc";
       POSTILION_ERRORCHECKER pe=new POSTILION_ERRORCHECKER();
       pe.dbconnect();


    try
    {
      ResultSet result=pe.check_00(query);

       while(result.next()==true)
       {
          //loop for counter and displaying
      int response=Integer.parseInt(result.getString("rsp_code_req_rsp"));
     System.out.println(response);
     if (response==91)
     {
     counter++;
    if (counter>=10)
    System.out.println("TIME:"+dateString("MM:dd-HH:mm:ss")+"--error respose code:91 of count:"+ counter+" to sink node GTBUSDsnk");
     }
    }
         delay();
       }catch(Exception e)
       {
           e.printStackTrace();
       }
                       // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                    }
                    }
                },0,30000); 

    }
    public static void delay()
    {
        try
        {
            Thread.sleep(5 * 60 * 1000);
        }catch(Exception e)
        {

        }
    }

    public static void main(String[] args) 
    {
        scheduled();
        System.out.println("execution started");

    }
    private static String dateString(String formart)
    {
        DateFormat dateFormat = new SimpleDateFormat(formart);
        java.util.Date date = new java.util.Date();
        return dateFormat.format(date);
    }
}

无法真正读取未格式化的代码,但最终的问题是什么,或者您面临的问题是什么?@DaveNewton我需要代码运行一次选择结果集并停止5分钟,然后再次选择简单使用Quartz调度库,无需重新设计轮子我认为应该有一个java代码解决方案,30000300000这是无效的语法。是不需要库,Thread.sleep将完成此任务。在等待时,您仍然可以执行其他任务,但您必须使用另一个线程。@maraca等待时间是为了执行一些逻辑。代码从postilion数据库获取响应代码这是银行和金融机构的ISO8583切换。因此,等待时间用于分析来自数据库的结果集,也用于等待更多的事务执行place@user1637645当我没有在代码中使用线程时,我可以使用该代码吗?我没有继承线程functionality@DENNISKITHINJI是的,你可以。。。Thread类位于默认导入的java.lang包中,Thread.sleep()是一个静态函数。。。此外,Thread.sleep()将“当前正在执行”的线程置于睡眠状态,并且由于始终存在一个主线程(即使您尚未显式创建一个主线程),因此您可以使用此函数。在下一次连接到数据库之前,输出将呈现5分钟