我试图基于一些间隔时间调用方法,这里是applicationContext.xml中的一些bean
<bean id="MngtTarget"
class="com.management.engine.Implementation"
abstract="false" lazy-init="true" autowire="default" dependency-check="default">
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="MngtTarget" />
<property name="targetMethod" value="findItemByPIdEndDate"/>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<!-- 10 seconds -->
<property name="startDelay" value="10000" />
<!-- repeat every 50 seconds -->
<property name="repeatInterval" value="20000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是我试图调用的方法:
public List<Long> I need findItemByPIdEndDate() throws Exception {
List<Long> list = null;
try{
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery("endDateChecker");
list = …Run Code Online (Sandbox Code Playgroud) 我正在使用struts和quartz框架来安排工作.它工作正常.
但是当我停止Tomcat(6.0.26)时,它会在控制台上抛出错误
"Web应用程序似乎已经启动了一个名为[.....]的线程,但未能阻止它.这很可能会导致内存泄漏.
任何人都知道如何优雅地处理这个......
目前我的struts config.xml看起来像这样:
<plug-in className="com.example.scheduler.SchedulerPlugin">
<set-property property="startOnLoad" value="true"/>
<set-property property="startupDelay" value="0"/>
</plug-in>
我有必须在集群模式下运行的作业以及需要在每个节点中运行的作业.我还需要非集群作业是持久的,因此我创建了两个调度程序,一个在集群模式下运行,另一个在非集群模式下运行,两者都使用与作业存储相同的石英表集.这个设计有什么问题吗?我在Quartz Configuration参考中看到以下声明(http://quartz-scheduler.org/documentation/quartz-2.1.x/configuration/ConfigJDBCJobStoreClustering)
永远不要针对与任何其他实例正在运行(start()ed)的同一组数据库表启动(scheduler.start())非群集实例.您可能会遇到严重的数据损坏,并且肯定会遇到不稳定的行为但是没有解释,我不清楚它是否真的意味着.如果没有创建另一组石英表,还有其他选择.
石英调度程序的新手.我想要实现的是在将来触发一个触发器,然后关闭调度程序.我正在使用scheduler.shutdown(true)它,但它在执行作业之前关闭.我必须调用shutdown(),因为我要在Web应用程序中实现调度程序.
那么如何在作业执行后关闭调度程序?
工作:
public class HelloJob implements Job {
public HelloJob(){
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Hello Quartz on " + new Date());
}
}
Run Code Online (Sandbox Code Playgroud)
调度:
public class QuartzTest {
public void scheduleLoad(String time) {
try {
// Transform user input into a date
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy:HH:mm:ss");
Date scheduleDate = dateFormat.parse(time);
// Print Current vs. Scheduled time/date
System.out.println("Current time - " + new Date());
System.out.println("Scheduled time - " + scheduleDate);
// Grab the …Run Code Online (Sandbox Code Playgroud) 在获取调度程序对象后,在获得初始化的StdSchedulerFactory后出现错误.
init method failed; nested exception is org.quartz.SchedulerException: ThreadPool class not specified.
代码是:
Properties properties = new Properties();
properties.put("org.quartz.scheduler.instanceName", name);
properties.put("org.quartz.threadPool.threadCount", String.valueOf(numberOfThreads));
properties.put("org.quartz.scheduler.skipUpdateCheck", "true");
StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
stdSchedulerFactory.initialize(properties);
Scheduler scheduler = stdSchedulerFactory.getScheduler();
scheduler.start();
Run Code Online (Sandbox Code Playgroud)
你能建议任何解决方案吗?
quartz quartz中的pauseJob()和pauseTrigger()有什么区别?如何选择其中一个使用?现在我想暂停/干预一个特定的工作我该怎么办
我的调度程序代码如下
JobDetail job = new JobDetail();
job.setName("pollerjob"+pollerId);
job.setJobClass(Pollersheduller.class);
job.getJobDataMap().put("socialMediaObj", socialMediaObj);
job.getJobDataMap().put("queue", queue);
//configure the scheduler time
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("pollerSocial"+pollerId);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(Long.parseLong(intervel));
//schedule it
Scheduler scheduler = null;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我一直在尝试让石英在我们正在创建但无法实现的Web应用程序上工作。我已经尝试过1.8.5、1.8.6、2.2.0、2.2.1、2.1.4 ..我只是不知道该怎么做,他们都不想正确构建。我很确定自己在做其他所有事情。我真的需要一些帮助来解决这一问题。我尚未对其进行任何幻想,我只希望它现在运行!我把文件放在下面。
POM文件:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
spring-quartz.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="QuartzService" class="org.webapp.service.QuartzService" />
<bean id="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="QuartzService" />
<property name="targetMothod" value="printCurrentTime" />
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="myJob" />
<property name="repeatInterval" value="5000" />
<property name="startDelay" value="1000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="jobDetails">
<list>
<ref bean="myJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
控制器:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzController {
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 我使用Dagger 2作为我的DI框架,并为其提供了一个singleton类实例。
我还使用Quartz Scheduler来调度作业。有什么方法可以将单例类注入Quartz作业吗?
Dagger 2模块:
@Module
public class MyModule {
@Provides
@Singleton
Messager provideMessager() {
return new CustomMessager();
}
}
Run Code Online (Sandbox Code Playgroud)
匕首2组件:
@Component(modules = MyModule.class)
@Singleton
public interface MyComponent {
Messager messager();
}
Run Code Online (Sandbox Code Playgroud)
石英作业:
public class MyJob implements Job {
// @Inject
Messager messager;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
messager.sendMessage("Hello.");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
我创建了一个MyJobScheduler调用Quartz Job的类:
public class MyJobScheduler {
public void scheduleJob() {
JobDetail myJob = JobBuilder.newJob(MyJob.class)
.withIdentity("myJobId", "Group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTriggerId", …Run Code Online (Sandbox Code Playgroud) 我的应用程序基于弹簧启动.我想创建一个应用程序启动后应该只运行一次的任务.
目前,我正在研究两种解决方案:
使用@Scheduled和boolean属性,它应该确定逻辑shold是否运行.
@Scheduled
public void method(){
if(method_run_propery){
//do something;
}
}
使用Quartz.但我以前没用过.
请告诉我在这种情况下使用的最佳方法是什么.
现在我正在搜索Quartz库中按作业名称获取作业键的功能.
我看到Scheduler有方法,通过组名称中使用获得作业键GroupMatcher<JobKey>也Quartz有NameMatcher它可以是用户的方式相同GroupMatcher
Set<JobKey> getJobKeys(NameMatcher<JobKey> matcher) throws SchedulerException;
Run Code Online (Sandbox Code Playgroud)
您知道Quartz库中是否已存在此功能?
quartz-scheduler ×10
java ×7
spring ×3
dagger-2 ×1
maven ×1
quartz-core ×1
spring-mvc ×1
struts ×1
tomcat ×1