Springboot集成Quartz和RabbitMQ时设置为不自动运行

使用SpringBoot 2集成Quartz和RabbitMQ是一件非常简单非常方便的事情,甚至可以达到了零配置运行,大大方便了我们的使用。但是过于智能化也带来了一个问题,就是在控制的时候不太好控制。比如我的项目里集成了Quartz,但是需要部署到不同的服务器上,其中一个服务器需要运行Quartz,另一个服务器则不要运行Quartz。众所周知,像Quartz和RabbitMQ这类框架,在集成到SpringBoot之后, 都是会自动运行的,但是不可能要我打包不同的配置到不同的服务器上吧。

经过查看代码,发现此类自运行的框架都是实现了spring的SmartLifecycle接口,详看:Spring SmartLifecycle 在容器所有bean加载和初始化完毕执行,发现有个方法:

   /**
     * 根据该方法的返回值决定是否执行start方法。<br/> 
     * 返回true时start方法会被自动执行,返回false则不会。
     */  
 public boolean isAutoStartup() {
        // 默认为false
        return true;
    }

这个方法就是关键了。根据解释,当此方法返回false时,不会自动执行start()方法。

1.首先查看Quartz。说到Quartz,肯定从核心类看起。我们知道任务的启动与暂停都跟QuartzScheduler有关,所以先从QuartzScheduler的start()方法看起。通过debug,往上一直找到SchedulerFactoryBean

	//---------------------------------------------------------------------
	// Implementation of SmartLifecycle interface
	//---------------------------------------------------------------------

	@Override
	public void start() throws SchedulingException {
		if (this.scheduler != null) {
			try {
				startScheduler(this.scheduler, this.startupDelay);
			}
			catch (SchedulerException ex) {
				throw new SchedulingException("Could not start Quartz Scheduler", ex);
			}
		}
	}

可以看到是实现了SmartLifecycle接口。那就简单了,直接去找isAutoStartup方法,看

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值