Java 在实例中运行并在再次运行之前停止5分钟的代码
我想在每个实例的实例中运行我的代码。代码从我的数据库中提取数据作为结果集,然后停止。再等待5分钟,提取结果集并停止。这个计划永远不会结束。问题是程序在第一次运行时会等待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
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分钟