前言
日志系统需要每天推送每天日志统计到钉钉群,至于如何实现向钉钉推送请参考:java(SpringBoot)实现钉钉推送。学长他们的用的是一个固定的Webhook和secrect,这样就会导致一个问题,下次修改推送群那么就需要修改源代码,于是乎我加了一个钉钉数据表,这样就可以做到随意更改推送群了。
实现过程:
添加钉钉实体:
主要字断:webhook、secrect

  1. private String webHook = "";
  2. private String secret = "";
  3. public Long getId() {
  4. return id;
  5. }
  6. public String getWebHook() {
  7. return webHook;
  8. }
  9. public void setWebHook(String webHook) {
  10. this.webHook = webHook;
  11. }
  12. public String getSecret() {
  13. return secret;
  14. }
  15. public void setSecret(String secret) {
  16. this.secret = secret;
  17. }
  18. public interface base {}
  19. }

添加仓库

  1. /**
  2. * 钉钉
  3. */
  4. @Repository("DingRepository")
  5. public interface DingRepository extends CrudRepository<Ding, Long> {
  6. }

运行结果:
dingRepository为空?可是我用@Autowired自动注入了啊?


排查过程:

结果:
初始化文件中DingRepository正常
初步猜想:定时任务影响依赖注入。
验证猜想:定时任务影响依赖注入
经过搜索发现猜想正确!
@Scheduled执行优先级大于@Autowired,因此不要期待SpringBoot给我们实现依赖注入了。
解决办法
ApplicationContextAware
介绍:在项目初始化的时候,会去寻找他的实现类,同时通过setApplicationContext方法将上下文(ApplicationContext)注入进来,当我们需要的时候便可以根据其封装好的方法获取自己想要的东西。同样他也继承了BeanFactory,我们可以根据BeanFactory的getBean获取自己想要的Bean。

实例化ApplicationContextAware,给出如下参考:

  1. @Component
  2. public class ApplicationContextUtil implements ApplicationContextAware {
  3. private static ApplicationContext applicationContext;
  4. public static ApplicationContext getApplicationContext() {
  5. return applicationContext;
  6. }
  7. @Override
  8. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  9. ApplicationContextUtil.applicationContext = applicationContext;
  10. }
  11. public static Object getBean(String beanName) {
  12. return applicationContext.getBean(beanName);
  13. }
  14. }

至此我的疑问解除,通过查询得知其实也有很多地方无法直接使用Dao层等,如:Utils,这个时候ApplicationContextAware真的可以帮我们大忙。
以上就是全部内容,希望帮帮到大家,

更多相关文章

  1. sqlserver 数据库被注入解决方案
  2. 批量替换sqlserver数据库挂马字段并防范sql注入攻击的代码
  3. SQL数据库的高级sql注入的一些知识
  4. 记一次成功的sql注入入侵检测附带sql性能优化
  5. T-SQL篇如何防止SQL注入的解决方法
  6. 数据库复制性能测试 推送模式性能测试
  7. sql注入数据库修复的两种实例方法
  8. 解析:清除SQL被注入恶意病毒代码的语句
  9. 全新 Android(安卓)注入器:Dagger 2(一)

随机推荐

  1. putchar函数在C语言中是什么意思
  2. 三分钟了解C语言中自定义的标识符及规则
  3. C语言中“\n”是什么意思
  4. 带你了解C语言中的Sleep函数(附代码)
  5. C语言中“||”是什么意思
  6. c语言关系运算符号有哪些?
  7. C语言中a++和++a有什么区别
  8. c++是面向对象还是面向过程?
  9. “\n\n”在c语言中是什么意思?
  10. struct student在c语言中是什么意思?