前言日志系统需要每天推送每天日志统计到钉钉群,至于如何实现向钉钉推送请参考:java(SpringBoot)实现钉钉推送。学长他们的用的是一个固定的Webhook和secrect,这样就会导致一个问题,下次修改推送群那么就需要修改源代码,于是乎我加了一个钉钉数据表,这样就可以做到随意更改推送群了。实现过程:添加钉钉实体:主要字断:webhook、secrect
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<Ding, Long> {}
运行结果:dingRepository为空?可是我用@Autowired自动注入了啊?
排查过程:
结果:初始化文件中DingRepository正常初步猜想:定时任务影响依赖注入。验证猜想:定时任务影响依赖注入经过搜索发现猜想正确!@Scheduled执行优先级大于@Autowired,因此不要期待SpringBoot给我们实现依赖注入了。解决办法ApplicationContextAware介绍:在项目初始化的时候,会去寻找他的实现类,同时通过setApplicationContext方法将上下文(ApplicationContext)注入进来,当我们需要的时候便可以根据其封装好的方法获取自己想要的东西。同样他也继承了BeanFactory,我们可以根据BeanFactory的getBean获取自己想要的Bean。
实例化ApplicationContextAware,给出如下参考:
@Componentpublic class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;public static ApplicationContext getApplicationContext() {return applicationContext;}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {ApplicationContextUtil.applicationContext = applicationContext;}public static Object getBean(String beanName) {return applicationContext.getBean(beanName);}}
至此我的疑问解除,通过查询得知其实也有很多地方无法直接使用Dao层等,如:Utils,这个时候ApplicationContextAware真的可以帮我们大忙。以上就是全部内容,希望帮帮到大家,
相关推荐
© 2020 asciim码
人生就是一场修行