@Configuration 不在@SpringBootApplication 子package路径下无法自动加载

时间:2025-04-20 22:54:59

一、场景如下:

1、使用@SpringBootApplication 主类,注意package

package ;

import ;
import ;

import ;

@SpringBootApplication
public class QuartzSampleApplication {

	public static void main(String[] args) {
		(, args);
	}

}

2、使用@Configuration的配置类,注意比较package路径

package ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;

import ;
import ;

@Configuration
public class QuartzConfig {

	@Bean(name = "exampleJob")
	public JobDetailFactoryBean exampleJob() {
		JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
		();
		("myJob1");
		("group1");
		("this is my first job");
		(true);
		(QuartzConstant.QUARTZ_SPRING_CONTEXT_KEY);
		JobDataMap dataMap = new JobDataMap();
		("say", "Hello World");
		(dataMap);
		return jobDetailFactoryBean;
	}
	
	@Bean(value = "exampleJobTrigger")
	public CronTriggerFactoryBean exampleJobTrigger(@Qualifier(value = "exampleJob") JobDetail jobDetail) {
		CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
		("task1");
		("group1");
		("0 0/1 * * * ?");
		//(misfireInstruction);
		(5);
		("this is my ...");
		(jobDetail);
		return triggerFactoryBean;
	}
}

基本情况就这样,启动时无法加载QuartzConfig 类中声明的@Bean

二、分析原因

找了一会发现是package路径的问题,如果将QuartzConfig类的package改为或地子package就能加载QuartzConfig类中声明的@Bean。@SpringBootApplication中包含@EnableAutoConfiguration,会自动加载

声明@SpringBootApplication的类的package及其子package下的@Configuration类,创建Bean。所以,如果带有@Configuration的配置类不在声明@SpringBootApplication的类的package及其子package下是不会自动加载。

 

三、解决办法

方法一:将带有@Configuration的配置类移动到声明@SpringBootApplication的类的package及其子package下

方法二:使用@Import或@ComponentScan

package ;

import ;
import ;
import ;

import ;

@SpringBootApplication
@Import(value = {  })
public class QuartzSampleApplication {

	public static void main(String[] args) {
		(, args);
	}

}