当前位置: 首页 > 知识库问答 >
问题:

在SpringMVC 4我得到石英调度运行两次一次

唐焕
2023-03-14

在我的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");
}

在这里,我每分钟有两次“执行作业”,但我希望每分钟只有一次“执行作业”。有人能解决吗?提前谢谢!

共有2个答案

乌鸿宝
2023-03-14

更多信息查找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");
            }
阮飞翔
2023-03-14

在这里,您的解决方案将此注释添加到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周执行一次的 触发器