原因复现
QuartzCommandService
@Service
public class QuartzCommandServiceImpl implements QuartzCommandService {
private static final org.slf4j.Logger log = LoggerFactory.getLogger(QuartzCommandServiceImpl.class);
@Autowired
private ScriptCommandService scriptCommandService;
@Autowired
private ScriptTaskService scriptTaskService;
@Autowired
@Qualifier("xyqThreadPoolTaskExecutor")
private Executor xyqThreadPoolTaskExecutor;
ScriptCommandService
@Service
public class ScriptCommandServiceImpl implements ScriptCommandService {
@Autowired
QuartzCommandService quartzCommandService;
ScriptTaskService
@Service
public class ScriptTaskServiceImpl implements ScriptTaskService {
@Autowired
private QuartzCommandService quartzCommandService;
在上诉代码中,我QuartzCommandService调用了ScriptTaskService 和ScriptCommandService.而且ScriptTaskService 和ScriptCommandService也调用了QuartzCommandService.这就是造成循环依赖的原因.
但是.当我把QuartzCommandService这一行代码删除的时候.项目是正常启动的.
@Autowired
@Qualifier("xyqThreadPoolTaskExecutor")
private Executor xyqThreadPoolTaskExecutor;
因为没有这一行代码的时候,QuartzCommandService在初始化的时候就是属于最终形态,而加上线程池后,QuartzCommandService就会改变,