[xuxueli/xxl-job]对于Spring非单例Scope,报错No context holder available for ... scope

2024-01-08 73 views
1

XxlJobSpringExecutor private void initJobHandlerMethodRepository(ApplicationContext applicationContext) { 。。。。。 Object bean = applicationContext.getBean(beanDefinitionName); 。。。。。

大神,请把Bean优化你的SpringBean的Scope查找范围,不要所有都查找好不 推荐使用Spring工具查找

回答

0

api: getBeansWithAnnotation

9

你好,由于需要扫描出Spring Bean中被注解的方法,是方法维度的扫描,所以需要针对全部Bean进行扫描。如果通过 getBeansWithAnnotation 的话,只能扫描到相关注解的类,并不能扫描到方法。

0
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    initJobHandlerMethodRepository(bean);
    GlueFactory.refreshInstance(1);
    return bean;
}
0

@xuxueli 请动态注册通过BeanPostProcessor XxlJob.class

9

解决办法1 重写XxlJobSpringExecutor,去掉initJobHandlerMethodRepository方法。不过这就意味着不能再用@XxlJob注解。意味着削减了一部分功能。

解决办法2 将版本退回到2.1.1.

解决办法3(推荐) 重写XxlJobSpringExecutor,多定义一个注解就行了,例如@XxlJobClass,在@XxlJob注解出现的类上多加一个注解,然后用spring的工具类方法专门找加了某种注解的bean。。 String[] beanDefinitionNames = applicationContext.getBeanNamesForAnnotation(XxlJobClass.class);