03. februar 2005 - 12:50
Der er
28 kommentarer og 1 løsning
Cronjob til tomcat?
Er det muligt at lave et simpelt cronjob i tomcat og i så fald hvordan?
Annonceindlæg tema
03. februar 2005 - 15:20
#1
03. februar 2005 - 15:21
#2
det samme som arne sagde igår.
03. februar 2005 - 16:13
#3
Jeg ville gerne have haft noget specifik til tomcat, men det kan man åbenbart ikke.... bare læg et svar tak
03. februar 2005 - 16:21
#4
ok
05. februar 2005 - 23:19
#5
Quartz API er ret nemt at bruge også fra servlet kode. Og Quartz har også "Quartz web app" som er en færdig Java web app, hvor du kan sætte jobs op i en web GUI.
07. februar 2005 - 15:42
#6
Så vidt jeg har hørt skulle Quartz være alt for stort. Det eneste jeg skal bruge er at kunne ramme en servlet i bestemte tidspunkter eller i en bestemt interval, ligesom man kan i resin via web.xml. Er det muligt på en nem måde i Quartz?
07. februar 2005 - 15:43
#7
Hvor kan jeg finde den "Quartz web app" ?
07. februar 2005 - 15:48
#8
For stort ? Det er bare en enkelt jar fil. Hvis du vil gøre det kode mæssigt så putter du den kode der skal køres med interval i en seperat klasse, laver en simpel Quartz job på 8 linier som kalder koden og laver en servlet som schedulerer jobbet (15 linier) og putter den i web.xml som startup servlet. Eller så leger du lidt med quartz web app.
07. februar 2005 - 15:50
#9
07. februar 2005 - 15:54
#10
Hej arne er det muligt at jeg kan se de 8 og 15 linier kode som du snakker om? Så kunne det være at jeg bedre kunne danne mig et overblik over hvad Quartz kan.
07. februar 2005 - 15:59
#11
Ja. Men det bliver først om nogle timer, når jeg kommer hjem (mine eksempler ligger på min hjemme PC).
07. februar 2005 - 16:03
#12
Lyder fint..
07. februar 2005 - 19:22
#13
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class QServletJob implements Job { public void execute(JobExecutionContext ctx) throws JobExecutionException { System.out.println("Det virker"); } }
07. februar 2005 - 19:22
#14
import java.text.ParseException; import javax.servlet.http.HttpServlet; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; public class QServlet extends HttpServlet { public void init() { try { SchedulerFactory sf = new StdSchedulerFactory(); Scheduler s = sf.getScheduler(); s.start(); s.scheduleJob(new JobDetail("test", Scheduler.DEFAULT_GROUP,QServletJob.class), new CronTrigger("test", Scheduler.DEFAULT_GROUP, "0/15 * * * * ?")); Thread.sleep(75000); s.shutdown(); } catch (SchedulerException e) { } catch (InterruptedException e) { } catch (ParseException e) { } } }
07. februar 2005 - 19:22
#15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "
http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>
<servlet>
<servlet-name>QServlet</servlet-name>
<servlet-class>QServlet</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
</web-app>
07. februar 2005 - 19:23
#16
C:\Jakarta\tomcat-5.0.28\webapps\qtest>dir /s Volume in drive C is ARNEPC2_C Volume Serial Number is E09B-1D63 Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest 07-02-2005 19:13 <DIR> . 07-02-2005 19:13 <DIR> .. 07-02-2005 19:20 <DIR> WEB-INF 0 File(s) 0 bytes Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF 07-02-2005 19:20 <DIR> . 07-02-2005 19:20 <DIR> .. 07-02-2005 19:15 <DIR> classes 07-02-2005 19:20 <DIR> lib 07-02-2005 19:19 345 web.xml 1 File(s) 345 bytes Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF\classes 07-02-2005 19:15 <DIR> . 07-02-2005 19:15 <DIR> .. 07-02-2005 19:14 1.616 QServlet.class 07-02-2005 19:14 656 QServletJob.class 2 File(s) 2.272 bytes Directory of C:\Jakarta\tomcat-5.0.28\webapps\qtest\WEB-INF\lib 07-02-2005 19:20 <DIR> . 07-02-2005 19:20 <DIR> .. 21-12-2004 20:52 318.680 quartz.jar 1 File(s) 318.680 bytes Total Files Listed: 4 File(s) 321.297 bytes 11 Dir(s) 4.377.993.216 bytes free
08. februar 2005 - 14:56
#17
Dit eks. virker meget fint arne, men hved du om man kan lave flere jobs istedet for kun et i dit eks. med samme Scheduler (tråd)? Så man slipper for at starte et nyt tråd op for hvert job...
08. februar 2005 - 17:08
#18
Du kan sagtens schedulere mange jobs på samme scheduler.
08. februar 2005 - 17:08
#19
VIGTIGT Linierne: Thread.sleep(75000); s.shutdown(); skal slettes i den servlet (de er copy pastet fra et standalone eksempel)
08. februar 2005 - 17:15
#20
Jeg startede også med at slette de linier arne. En anden smart ting er også at stoppe tråden når servlet bliver lukket ned: public void init(ServletConfig config)throws ServletException{ super.init(config); log.debug("***init start***"); try { SchedulerFactory sf = new StdSchedulerFactory(); s = sf.getScheduler(); s.scheduleJob(new JobDetail("runner", Scheduler.DEFAULT_GROUP,QServletJob.class), new CronTrigger("runner", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?")); s.start(); } catch (SchedulerException e) { log.error("SchedulerException",e); } catch (ParseException e) { log.error("ParseException",e); } log.debug("***init end***"); } public void destroy() { try{ s.shutdown(); } catch (SchedulerException e) { log.error("SchedulerException",e); } }
08. februar 2005 - 17:37
#22
Det er flere schedulers. Kan du ikke nøjes med flere jobs ?
08. februar 2005 - 17:38
#23
import java.text.ParseException; import javax.servlet.http.HttpServlet; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; public class QServlet extends HttpServlet { public void init() { try { SchedulerFactory sf = new StdSchedulerFactory(); Scheduler s = sf.getScheduler(); s.start(); s.scheduleJob(new JobDetail("test", Scheduler.DEFAULT_GROUP,QServletJob.class), new CronTrigger("test", Scheduler.DEFAULT_GROUP, "0/15 * * * * ?")); s.scheduleJob(new JobDetail("test2", Scheduler.DEFAULT_GROUP,QServletJob2.class), new CronTrigger("test2", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?")); } catch (SchedulerException e) { } catch (ParseException e) { } } }
08. februar 2005 - 17:38
#24
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class QServletJob implements Job { public void execute(JobExecutionContext ctx) throws JobExecutionException { System.out.println("Det virker"); } }
08. februar 2005 - 17:38
#25
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class QServletJob2 implements Job { public void execute(JobExecutionContext ctx) throws JobExecutionException { System.out.println("Det virker stadig"); } }
08. februar 2005 - 17:38
#26
Og ja - det er vist meget smart med shutdown i destroy !
08. februar 2005 - 17:41
#27
uden at have rodet med quartz så tror jeg at de mener at du ikke kan få flere schedulers fra det samme factory (du kan vist godt men de skal så have flere property files) men hvad skal du også have det for. en scheduler kan håndtere flere jobs. så du skal vel bare tilføje flere s.scheduleJob(new JobDetail("runner", Scheduler.DEFAULT_GROUP,QServletJob.class), new CronTrigger("runner", Scheduler.DEFAULT_GROUP, "0/5 * * * * ?"));
08. februar 2005 - 17:41
#28
nå det var klaret ;)
08. februar 2005 - 20:19
#29
Mærkeligt jeg synes ellers jeg havde prøvet som i skriver og hvor det ikke virkede.... men det virker ihvertfald og det er det vigtigste :-)
Kurser inden for grundlæggende programmering