java Action里面每隔5秒去调用一个dao数据库查询类,当返回值满足条件或者时间到2分钟就停止调用

供稿:hz-xin.com     日期:2024-05-18
JAVA中的action调用DAO里面的函数时不执行。

应该是你没有实例化那个dao类吧,初步猜想是这样

你可以new一下试试~

问题比较明显,就是Vector是空的。
按照你的想法,其实应该是把查询到的数据放在一个Vector里面,然后让JTable显示,想法没有错,但是做法错了。
Vector dataVector = null;
table = new JTable(dataVector, getAgencyColumnVector());
这两句说明刚定义一个Vector,赋值为空,就把它放入了JTable中。
你点击按钮是会进入到你写的getSearchVector方法中的,但是这个方法执行完后,返回了一个Vector,而且这个里面包括数据库中的数据,但是你没有使用这个返回值,导致白做了一遍数据库查询。

建议你在类中建立一个Vector属性,然后在getSearchVector方法内部使用这个Vector,然后JTable中也使用这个Vector,就OK啦!

package com.lvjj.entity;
import java.util.Date;
import java.util.TimerTask;
public class WrongTimerTask extends TimerTask {
private Date start; //开始时间
public Date getStart() {
return start;
}
public void setStart(Date start) {
this.start = start;
}
public void run() {
//调用Dao层

if (true) {//DAO层满足条件
this.cancel();
}
Date d = new Date();//当前时间
try {
long t = d.getTime()- start.getTime(); //当前时间减去开始时间
if(t==120000)//2分钟
this.cancel();//退出
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
------------------------上面是定时器类

package com.lvjj.main;
import java.util.Date;
import java.util.Timer;
import com.lvjj.entity.WrongTimerTask;
public class Time {
/**
* @param args
*/
public static void main(String[] args) {
try {
WrongTimerTask task = new WrongTimerTask();
Timer timer = new Timer("TestTimer");
task.setStart(new Date());
timer.scheduleAtFixedRate(task, 0, 1000);

} catch (Exception e) {
e.printStackTrace();
}
}
}

-----------------------上面是测试执行类
你只要把定时器类的调用DAO层方法和Dao层满足的条件改一下就可以了

为什么是action里面呢?
如果非要在action里面的话可以考虑用ajax去调用action然后在js里面判断
如果非阻塞执行可以考虑用线程或者定时器

1.service为null的情况一般有几种情况:spring的配置文件没有配置;依赖注入由于写的不仔细而没有实现注入等原因。首先检查是否在spring的配置文件中注入了想要的service如果有,检查是否因为大小写的小错误而不能实现注入。
2.可以在action的这样处理:
让action继承一个自己编写的BaseAction 在让BaseAction去继承DispatchAction 在BaseAction中实现service的获取
public class BaseAction extends DispatchAction{
protected Object getBean(String id){
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(this.servlet.getServletContext());
return context.getBean(id);
}
}
然后在action中就可以直接通过方法得到你想要的service。
IService service = (IService) getBean("想要的service");
就可以用service调用你的CRUD方法执行了。
这里主要用到的是spring的DI(依赖注入)spring的核心之一。