java中如何写一个自动执行类?

shan__le 2009-07-01 11:26:31
我tomcat开启以后,不想做任何触发,直接开始每秒执行一下一个类,如何在servlet中配置,然后对应的类应该怎么写?
我网上找了一个,但是出错,很抱歉啊,我是java新手,有些java的基础东西不太理解,希望大家指点一下。
<servlet>
<servlet-name>TimerTask</servlet-name>
<servlet-class>TimerTasks.RunTest</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
web.xml文件的配置
RunTest.java里面的写法
package TimerTasks;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.http.HttpServlet;

public class RunTest extends HttpServlet{
public void init() {
Timer timer = new Timer();

//每十秒钟运行一次
timer.schedule(new TimerTask(),0,1000*10); 错误出现在这里TimerTask(),这个不知道为什么出错了
}
}
EveryDayTasks.java里面的写法
package TimerTasks;

import java.util.TimerTask;

public class EveryDayTasks extends TimerTask {
public void run(){
//search(); //在这里做您要做的事
System.out.println("ABC");
}
}
...全文
939 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fztjava 2009-07-03
  • 打赏
  • 举报
回复
我怀疑你懂不懂啊!我项目中就用到过
code_killer 2009-07-02
  • 打赏
  • 举报
回复
建议楼主用quartz:

http://www.opensymphony.com/quartz/
zhutx2008 2009-07-02
  • 打赏
  • 举报
回复
timer.schedule(new TimerTask(),0,1000*10);

new TimerTask() 应该是个类而且 里面有run()方法才对,你给的只是个TimerTask 是继承来的,建议你重新方法吧
billhepeng 2009-07-02
  • 打赏
  • 举报
回复
如果你是用tomcat 做定时执行可参考:
http://download.csdn.net/source/1455326

如果只是tomcat 启动的时候执行一次。可以这样做做个Servlet 然后在init中加入你要做的动作。

package job;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StartServlet extends HttpServlet {
public void init() throws ServletException {
System.out.println("执行程序test");
}

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

}

public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}

}



web.xml

<servlet>
<servlet-name>StartupServlet</servlet-name>
<servlet-class>job.StartServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StartupServlet</servlet-name>
<url-pattern>/StartupServlet</url-pattern>
</servlet-mapping>


wangjiancy 2009-07-02
  • 打赏
  • 举报
回复
mark
fztjava 2009-07-02
  • 打赏
  • 举报
回复
web.xml配置
<listener>
<listener-class>TimerTasks.RunTest</listener-class>
</listener>
java class
public class RunTest extends HttpServlet implements ServletContextListener {
private static final long serialVersionUID = 1L;
private Timer timer = null;

public RunTest() {
// TODO Auto-generated constructor stub
}

@Override
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
arg0.getServletContext().log("3");

}

@Override
public void contextInitialized(ServletContextEvent arg0) {
timer = new Timer(true);
MyTask task = new MyTask(arg0.getServletContext());
timer.schedule(task, 0, 1000);
}
}

public class MyTask extends TimerTask {
private static boolean isrunning = false;
private ServletContext context = null;
public MyTask(){

}

public MyTask(ServletContext context){
this.context = context;
}

@Override
public void run() {
if(!isrunning){
isrunning = true;
//调用你要执行的方法
isrunning = false;
}else{
context.log("no");
}

}
}
shan__le 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 edisonwin 的回复:]
timer.schedule(new EveryDayTasks(),0,1000*10);
TimerTask只是个抽象类,当然要以它的字类来实例化了,你不是也定义了这么一个东西吗?
[/Quote]
有点迷糊啊,我是定义了,但是不知道怎么用?
少龙123 2009-07-02
  • 打赏
  • 举报
回复
timer.schedule(new EveryDayTasks(),0,1000*10);
TimerTask只是个抽象类,当然要以它的字类来实例化了,你不是也定义了这么一个东西吗?
shan__le 2009-07-02
  • 打赏
  • 举报
回复
ok,我找一下相关资料在看看,成了给大家共享出来,如果谁有好点的意见,希望给共享一下啊
Johnson_Hong 2009-07-02
  • 打赏
  • 举报
回复
用quartz,不用spring也行,网上查一下资料集成进去很简单的
shan__le 2009-07-02
  • 打赏
  • 举报
回复
<servlet>
<servlet-name>TestAutoRun</servlet-name>
<servlet-class>com.ee2ee.servlet.TestAutoRun</servlet-class>
<load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping>
<servlet-name>TestAutoRun</servlet-name>
<url-pattern>/servlet/TestAutoRun</url-pattern>
</servlet-mapping>
-------------TestAutoRun.java------------
package com.ee2ee.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class TestAutoRun extends HttpServlet
{
private HttpServletRequest request;
private PrintWriter out;

//当servlet类被加载时,执行本函数
//在本方法中放置代码即可完成自动加载
public void init(ServletConfig config) throws ServletException
{
super.init(config);

//此处放置需要自动执行的代码
System.out.println("I 'm ok now.");
}

//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//以下是标准的GET方法处理,由http的GET方法触发(调用)
this.doPost(request, response);
}

//Process the HTTP Post request
//标准的POST方法处理,由http的POST方法触发(调用)
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html; charset=GB2312");
PrintWriter out = response.getWriter();

this.request = request;
this.out = out;

out.println("<html>");
out.println("<head>");
out.println("</head>");
out.println("<body>");
out.println("this is a test.<br>");
out.println("</body>");
out.println("</html>");
}

//Clean up resources
public void destroy()
{

}
}
-------------------------------
用这个方法只能tomcat启动的时候运行一次,不能每秒或者每5秒运行一次
shan__le 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pupuokiki 的回复:]
支持楼上的。Quartz用来做定时处理很方便,而且功能强大。
Spring框架自带有。
[/Quote]

不会用Spring框架啊,就会用用Struts框架,而且还是25子
shan__le 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 java2000_net 的回复:]
给你一个最简单有效的建议。
1 书写一个可以自动定时执行的程序,app也行这个你自己考虑,呵呵
2 让这个程序实现 Runnable 接口
3 在servlet初始化的那个代码里,启动前面那个线程

OVER
[/Quote]
你这个方法不是没考虑过,要是用这个我就写一个vb程序来运行了,不过相对系统来说局限比较大,我原来见过一个短信自动运行程序,可惜忘记拷贝代码了
我这个要求不是tomcat启动运行一次,而是不停的运行,大概3秒执行一次。
老紫竹 2009-07-02
  • 打赏
  • 举报
回复
给你一个最简单有效的建议。
1 书写一个可以自动定时执行的程序,app也行这个你自己考虑,呵呵
2 让这个程序实现 Runnable 接口
3 在servlet初始化的那个代码里,启动前面那个线程

OVER
shan__le 2009-07-02
  • 打赏
  • 举报
回复
fztjava
你写的方法错误一堆,暂时没心情做了,先暂停,过两天在研究。平均分配分了啊
pupuokiki 2009-07-02
  • 打赏
  • 举报
回复
支持楼上的。Quartz用来做定时处理很方便,而且功能强大。
Spring框架自带有。
zabaglione 2009-07-02
  • 打赏
  • 举报
回复
有兴趣
shan__le 2009-07-01
  • 打赏
  • 举报
回复
晚上看来没戏了,明天在线关注

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧