在我的Spring MVC项目中,一个石英调度器,它将一次运行两次,如何修复它并一次执行一次。
@WebListener
public class QuartzListener extends QuartzInitializerListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
super.contextInitialized(sce);
ServletContext ctx = sce.getServletContext();
StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(QUARTZ_FACTORY_KEY);
try {
Scheduler scheduler = factory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(TestJob.class).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simple").withSchedule(
CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *")).startNow().build();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
} catch (Exception e) {
ctx.log("There was an error scheduling the job.", e);
}
}
}
和测试类,
public class TestJob implements Job {
@Override
public void execute(final JobExecutionContext ctx) throws
JobExecutionException {
System.out.println("Executing Job");
}
}
网络初始化器类,
public class WebAppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses(){
return new Class[]{WebSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses(){
return new Class[]{WebAppConfig.class, HibernateConfiguration.class};
}
@Override
protected String[] getServletMappings(){
return new String[]{"/"};
}
}
我的网络配置是,
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="com.neron")
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver resourceViewResolver(){
ResourceBundleViewResolver viewResolver = new
ResourceBundleViewResolver();
viewResolver.setOrder(0);
viewResolver.setBasename("views");
return viewResolver;
}
............
...............
@Scheduled(cron = "0 0/1 * 1/1 * ?")
public void schedulerCall()
{
System.out.println("Calling");
}
在这里,我每分钟有两次“执行作业”,但我希望每分钟只有一次“执行作业”。有人能解决吗?提前谢谢!
更多信息查找GitHub链接https://github.com/faizakram/Spring_Base_Exmaple_Annotation_Based
//Configuration class
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan(basePackages = { CommonConstants.BASE_PACKAGE })
public class WebMvcConfig {
}
//create a service method like this
@Scheduled(cron = "0 0/1 * 1/1 * ?")
public void schedulerCall()
{
System.out.println("Calling");
}
在这里,您的解决方案将此注释添加到job类的顶部
import org.quartz.DisallowConcurrentExecution;// import this
@DisallowConcurrentExecution
如果您在集群环境中工作,那么就需要不同的实现。如果你需要在这里发表评论。或者,如果你的问题解决了,那就接受它。
我有一个带spring应用程序的quartz调度器。 每次quartz触发作业时,作业都会创建一个列表(比如狗列表)。下次quartz触发另一个作业时,我需要访问上一个作业创建的列表。我怎样才能做到这一点。 我不能使用该对象的单个实例。因为这个对象可以被创建自己列表的其他进程使用(比如奶牛列表、鸟类列表等) 我要寻找的效果类似于实例变量,并在循环中执行某些操作,每次在循环中更新实例变量时,实例变量
我正在使用和以及集群模式下的oracle db,我正在使用所有quartz api,因为我面临spring支持的quartz api的问题。 我的作业类中有一些依赖项没有初始化,我在调度程序上下文中传递了这些依赖项,然后它就开始工作了。 问题是我的cron表达式是每5分钟运行一次
我有一个2节点的HA服务器。节点1处于活动状态,节点2处于备用状态。 我已经做了一个应用程序,并使用quartz api做集群。我已经把数据库里的所有桌子都做好了。 现在,我是否需要同时在节点或jst节点1中运行该模块,以便当节点1关闭时,应用程序自动在节点2中启动。 在两个节点中运行模块时,触发器和作业名应该相同还是不同? ThreadPool.ThreadCount=10 ThreadPool
是否可以添加/删除/修改在Quartz Spring Boot中动态安排的作业(在运行时),由使用我的门户的最终用户。由于计划无法从外部访问,我不知道有什么办法。基本上,我需要将所有的时间表信息存储到数据库中并访问它们。Im构建的门户将被大量用户使用,实现这一目标的正确解决方案是什么? 否则我可以像下面这样使用cron吗 每5 mns扫描一次作业以实现此目的。
乡亲们, 我正在尝试用Quartz调度器实现Spring boot,以便在java中调度作业。我的经理建议根据作业id为所有作业使用具有不同实施服务的单个作业。但我不能说服所有服务实施都使用单个作业。 请指导我使用多个服务类的单个作业或为每个服务编写每个作业。 提前感谢。。
问题内容: 我正在尝试创建在特定日期每2周运行一次的Quartz cron表达式 例如 星期一每两周一次 并使用以下表达式 但以某种方式我得到以下错误 没有支持指定多个“第n”天。 问题答案: 对于常规的cron作业,这也是非常困难的事情,我认为无法通过“常规” cron表达式来实现。 您可以完全跳过cron并使用每2周执行一次的 触发器