SpringBoot|SpringBoot 定时任务依赖注入失败记录
前言
【SpringBoot|SpringBoot 定时任务依赖注入失败记录】日志系统需要每天推送每天日志统计到钉钉群,至于如何实现向钉钉推送请参考:java(SpringBoot)实现钉钉推送。学长他们的用的是一个固定的Webhook
和secrect
,这样就会导致一个问题,下次修改推送群那么就需要修改源代码,于是乎我加了一个钉钉数据表
,这样就可以做到随意更改推送群了。
实现过程:
添加钉钉实体:
主要字断:webhook
、secrect
/**
* 钉钉
* @author hzl
*/
@Entity
public class Ding {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonView(base.class)
private Long id;
private String webHook = "";
private String secret = "";
public Long getId() {
return id;
}public String getWebHook() {
return webHook;
}public void setWebHook(String webHook) {
this.webHook = webHook;
}public String getSecret() {
return secret;
}public void setSecret(String secret) {
this.secret = secret;
}public interface base {}
}
添加仓库
/**
* 钉钉
*/
@Repository("DingRepository")
public interface DingRepository extends CrudRepository {
}
运行结果: dingRepository为空?可是我用@Autowired自动注入了啊
文章图片
文章图片
排查过程:
文章图片
结果: 初始化文件中
DingRepository
正常初步猜想:定时任务影响依赖注入。
验证猜想:定时任务影响依赖注入
经过搜索发现猜想正确!
@Scheduled
执行优先级大于@Autowired
,因此不要期待SpringBoot
给我们实现依赖注入了。解决办法
ApplicationContextAware 介绍:在项目初始化的时候,会去寻找他的
实现类
,同时通过setApplicationContext
方法将上下文(ApplicationContext
)注入进来,当我们需要的时候便可以根据其封装好的方法获取自己想要的东西。同样他也继承了BeanFactory
,我们可以根据BeanFactory
的getBean
获取自己想要的Bean
。文章图片
实例化
ApplicationContextAware
,给出如下参考:@Component
public class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.applicationContext = applicationContext;
}public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}
至此我的疑问解除,通过查询得知其实也有很多地方无法直接使用
Dao
层等,如:Utils,这个时候ApplicationContextAware
真的可以帮我们大忙。推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 多线程NSOperation
- springboot使用redis缓存
- linux定时任务contab
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- springboot整合数据库连接池-->druid
- 242为什么不断切换任务会更容易累()
- SpringBoot中YAML语法及几个注意点说明