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

Quartz(2 jobFactory)如何在Spring 4中配置集成

慕和惬
2023-03-14
  • 使用石英2.2.2
  • Spring 4.2.4.释放
  • 如何给我配置石英?,只用阳极化全部
  • 启动我的系统好吗
  • 问题包含2 jobFactory for system
@Configuration(value = "springConfigContext")
@EnableAspectJAutoProxy
@EnableTransactionManagement
@ApplicationScoped
@EnableAsync
@EnableScheduling
@ComponentScan(basePackages = {"com", })
@ImportResource({ "classpath:springBeans.xml" })
@PropertySources({ @PropertySource("classpath:/META-INF/my_file_properties.properties") })
public class SpringConfigContext extends AnnotationConfigApplicationContext implements BeanFactory{
	@Bean
	public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(){
		//my code
	}
	@Bean
	public SimpleTriggerFactoryBean simpleTriggerFactoryBean(){
		//my code
	}
	@Bean
	public JobDetailFactoryBean jobDetailFactoryBean(){
		//my code
	}
	@Bean
	public CronTriggerFactoryBean cronTriggerFactoryBean() throws ParseException{
		//my code
	}
	@Bean(name = "springQuartzScheduler")
	public SchedulerFactoryBean schedulerFactoryBean() throws Exception{
	    SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
		CronTrigger trigger = cronTriggerFactoryBean().getObject();
		scheduler.setTriggers(simpleTriggerFactoryBean().getObject(), trigger);
		Properties propertie = new Properties();
		propertie.setProperty("org.quartz.threadPool.threadCount", "3");
		propertie.setProperty("org.quartz.threadPool.threadPriority", "3");
		scheduler.setQuartzProperties(propertie);
		scheduler.setOverwriteExistingJobs(true);
		scheduler.setApplicationContext(this);
		scheduler.start();
		return scheduler;
	}
}

public SchedulerFactoryBean SchedulerFactoryBean()方法的第一个构建是另一个类的第二个构建,我想是Spring!

我的Quartz配置属性是:

org.quartz.scheduler.skipUpdateCheck=true
org.quartz.scheduler.instanceName=schedulerFactoryBean
org.quartz.scheduler.jobFactory.class=org.springframework.scheduling.quartz.AdaptableJobFactory
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=5 
org.quartz.threadPool.threadPriority=5 

我尝试使用和bean“springQuartzScheduler”或schedulerFactoryBean相同的名称,但不起作用。

如何参数化只使用一个工厂?

共有1个答案

姜天宇
2023-03-14

我的问题找到并解决了,当我删除一个神器maven调用javamelody,net.bull.javamelody.监视过滤器,用于监控我的project.war在生产中。

因此,如果你有一个类似的问题2 JobFactory Bean,评估他们的工件,他们可能负责生成多个实例factory Quartz,因为Quartz没有用于VM的factory Bean singleton,它在被调用时会创建一个新工厂,具有与文件quartiz相同的属性。属性,但在其他上下文中使用时。

你是怎么发现这个问题的?将logback置于log trace模式,这样您将看到调用的factory Quartz,删除索引或调整,以便它们使用相同的工厂

 类似资料: