我想从JConsole看到并管理Quartz Scheduler.我配置了石英道具.
org.quartz.scheduler.rmi.export=true
org.quartz.scheduler.rmi.registryPort=1099
org.quartz.scheduler.rmi.createRegistry=true
org.quartz.scheduler.rmi.registryHost=localhost
org.quartz.scheduler.skipUpdateCheck=true
org.quartz.jobStore.misfireThreshold=60000
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=10
org.quartz.threadPool.threadPriority=5
Run Code Online (Sandbox Code Playgroud)
但是我无法使用url连接jconsole
service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmxrmi
Run Code Online (Sandbox Code Playgroud)
请帮忙.
我在grails的jobs文件夹中定义了一个工作,如下所示:
class TransferFilesQueueJob {
def execute() {
print "File Transfer Job start!"
FileTransfer.transferFilesToHere()
print "File Transfer Job end!"
}
}
Run Code Online (Sandbox Code Playgroud)
在IntelliJ中运行我的应用程序时,此作业每隔几秒钟左右运行一次。即使重启。知道为什么吗?我没有其他地方在安排它。
之前我有一个声明,但已将其删除。似乎它正在其他地方存储配置或作业状态信息。但是我找不到地方。-进一步说明,我重命名了作业类,它停止运行。因此,这似乎表明该工作被保留在某处。但是,我从未将其设置为具有当前服务器运行以外的任何持久性。
我正在观察一个奇怪的行为,该行为使用包含年份值的CronTrigger在Quartz中安排作业。
这是我创建触发器并使用它计划作业的方式:
CronTrigger trigger = cronJobTriggerFactory.getObject();
trigger.setName(triggerName);
trigger.setGroup(triggerGroupName);
trigger.setCronExpression(cronSchedule);
trigger.setVolatility(false);
JobDetail job = schedulableJobFactory.getObject();
job.setName(jobName);
job.setGroup(jobGroupName);
job.setVolatility(false);
job.setDurability(true);
Date scheduleTime1 = scheduler.scheduleJob(job, trigger);
logger.info(job.getKey() + " will run at: " + scheduleTime1);
Run Code Online (Sandbox Code Playgroud)
然后在我的单元测试中,确定“现在”日期,向其添加5分钟,计算该日期/时间的cron表达式,并使用此计划将我的主班计划称为作业。这是显示通过了哪个cron表达式的单元测试的输出:
NotificationSchedulerTest - Today is: 9 May 2012 05:32 PM
NotificationSchedulerTest - 5 min later is: 9 May 2012 05:37 PM
NotificationSchedulerTest - cron schedule is: 0 37 17 * 4 ? 2012
Run Code Online (Sandbox Code Playgroud)
但是,当尝试使用此cron表达式计划作业时,出现以下错误:
org.quartz.SchedulerException: Based on configured schedule, the given trigger will never fire.
Run Code Online (Sandbox Code Playgroud)
如您所见,该日期是相对于我运行测试的日期/时间而言的将来...因此,尝试安排作业在过去的某个时间运行应该不是问题。
现在,下一个奇怪的事情是:请注意,我确实在cron表达式中指定了年份值:“ 0 …
异步作业,例如从网站下载分数,或在完成某些关键任务后发送电子邮件.当我们下载一些分数时,我们必须等待当前页面才能获得响应页面或下载文件.我是否有可能点击下载分数,它会在后台发生,以便我可以导航到网站的其他部分,并在平均时间检查作业的状态.或者在将来安排一些工作,并通过电子邮件获得执行结果.
我们的是带有Hibernate 3.5 ORM的struts 2 web应用程序.浏览了一些java调度库后,得到了一些关于Quartz的信息.但Quartz是否适合上述要求或我可以尝试的任何其他库?请指导我正确的方向.
我正在使用Spring 3.2进行Java聊天项目.
通常在Java中我可以创建一个这样的线程:
public class Listener extends Thread{
public void run(){
while(true){
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后启动线程start().
但是Spring 3.x有没有特殊的类或任何特殊的方法来实现线程功能?
我有2个电信域服务器.在我的应用程序中,我需要初始化服务器以创建协议.
初始化服务器后,我需要启动两个线程来监听来自电信域服务器的响应.
我所做的工作如下:
public class Listener extends Thread{
public void run(){
while(true){
if(ServerOne.protocol != null){
Message events = ServerOne.protocol.receive();
//Others steps to display the message in the view
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有可能用java做线程功能quartz吗?
如果可能哪一个更好?如果没有意思,是什么原因?
希望我们的堆栈成员能提供更好的解决方案.
我正在主类中运行一个简单的石英作业,该作业每30秒运行一次。
public class Start {
public static void main(String[] args) throws Exception {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = newJob(MyJob.class).withIdentity("myJob","XXX").build();
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(30)
.repeatForever())
.build();
sched.scheduleJob(job, trigger);
sched.start();
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我正在实现InterruptableJob
public class MyJob implements InterruptableJob {
private volatile boolean isJobInterrupted = false;
private JobKey jobKey = null;
private volatile Thread thisThread;
public MyJob() {
}
@Override
public void interrupt() throws UnableToInterruptJobException {
// TODO Auto-generated method stub
System.err.println("calling interrupt:"+thisThread+"==>"+jobKey); …Run Code Online (Sandbox Code Playgroud) 我可以使用XML调用EJB Scheduler(或者我可以使用@Schedule注释).比如这样的事情:[ejb-jar.xml]
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
<enterprise-beans>
<session>
<ejb-name>[name]</ejb-name>
<ejb-class>[path]</ejb-class>
<session-type>Stateless</session-type>
<timer>
<schedule>
<minute>*/30</minute>
<hour>*</hour>
<month>*</month>
<year>*</year>
</schedule>
<timeout-method>
<method-name>[method name]</method-name>
</timeout-method>
</timer>
</session>
</enterprise-beans>
</ejb-jar>
Run Code Online (Sandbox Code Playgroud)
如果我需要在每天中午运行此调度程序,我应该写这样的东西吗?
<schedule>
<minute>*</minute>
<hour>0</hour>
<month>*</month>
<year>*</year>
</schedule>
Run Code Online (Sandbox Code Playgroud)
如果我需要凌晨01:00,这是正确的吗?
<schedule>
<minute>*</minute>
<hour>1</hour>
<month>*</month>
<year>*</year>
</schedule>
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
我在我的应用程序中配置了quartz.它适用于集群,我可以看到集群节点一次触发一个作业.但是,我有一个关于负载平衡算法如何在石英中工作的问题.我想知道在jdbcJobstore代码中的哪一点,节点获取无法获取锁的信息.特定群集节点如何获取锁以在代码中触发作业?
我正在尝试使用Spring 4.0.1和Quartz 1.5.2创建一个cron作业,但是当我在服务器上运行它时出现错误.错误显示:
SEVERE: Servlet [appServlet] in web application [/SpringRestSample] threw load() exception
java.lang.ClassNotFoundException: org.quartz.impl.JobDetailImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getDeclaredMethods(Unknown Source)
我的xml配置是:
<beans:bean id="removeExpiredSessionFetchJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<beans:property name="jobClass">
<beans:value>com.iris.spring.rest.model.RemoveExpiredSessionFetchJob</beans:value>
</beans:property>
</beans:bean>
<beans:bean id="removeExpiredSessionTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<beans:property name="jobDetail">
<beans:ref bean="removeExpiredSessionFetchJob" />
</beans:property>
<beans:property name="cronExpression">
<!-- <value>0 0/55 * * * ?</value> -->
<beans:value>0 */1 * * * ?</beans:value>
</beans:property>
</beans:bean>
<beans:bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<beans:property name="triggers">
<beans:list>
<beans:ref bean="removeExpiredSessionTrigger" />
</beans:list>
</beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)
我的pom.xml是:
<properties>
<java-version>1.6</java-version>
<org.springframework-version>4.1.0.RELEASE</org.springframework-version>
<org.aspectj-version>1.7.4</org.aspectj-version> …Run Code Online (Sandbox Code Playgroud) 我已经发现了问题所在,但决定把它贴在这里,以防其他任何人撞到同一堵墙.
我已将最新版本的quartz scheduler添加到我的项目中:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
并且突然测试开始下降:
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [ my sql ]; SQL state [null]; error code [0]; An SQLException was provoked by the following failure: java.lang.InterruptedException; nested exception is java.sql.SQLException: An SQLException was provoked by the following failure: java.lang.InterruptedException
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,当我将石英依赖转移到另一个模块时,它们开始失败,但有不同的例外:
Could not get JDBC Connection; nested exception is java.sql.SQLException: com.mchange.v2.c3p0.ComboPooledDataSource[ identityToken -> z8kfsx9b1qeyobp10iytmq|796c39ad, dataSourceName -> z8kfsx9b1qeyobp10iytmq|796c39ad ] has been closed() -- you can no longer use it.
Run Code Online (Sandbox Code Playgroud)
所以,Spring关闭了我的ComboPooledDataSource,但为什么呢?
删除石英或将其版本更改为1.8.x有助于.即使没有实例化任何石英对象也会发生异常.
quartz-scheduler ×10
java ×6
spring ×3
maven ×2
spring-mvc ×2
asynchronous ×1
c3p0 ×1
cron ×1
crontrigger ×1
ejb ×1
ejb-3.0 ×1
ejb-3.1 ×1
grails ×1
java-ee ×1
jconsole ×1
jmx ×1