直播網站原始碼,使用Scheduled做定時任務出現Autowired注入空指標
直播網站原始碼,使用Scheduled做定時任務出現Autowired注入空指標
原因
因為Scheduled的載入時機要早於Autowired,定時任務會開啟一個新的程式,而spring值會注入到初始的類中,但這個有值類並沒有被使用,而是呼叫了無值的類。
解決
所以需要用到ApplicationContextUtil工具類
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * @author 成大事 * @since 2022/5/8 11:19 */ @Component public class ApplicationContextUtil implements ApplicationContextAware { /** * 上下文物件例項 */ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ApplicationContextUtil.applicationContext = applicationContext; } /** * 獲取applicationContext * * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 透過name獲取 Bean. * * @param name * @return */ public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 透過class獲取Bean. * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 透過name,以及Clazz返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
正確示範
//注入方式不用@Autowired,改成下面的程式碼注入 private final BrowseRecordsService browseRecordsService= ApplicationContextUtil.getBean(BrowseRecordsService.class); @ApiOperation("清除過期的瀏覽記錄") public void removeExpireBrowseRecords() { log.info("清楚過期的瀏覽記錄:"); browseRecordsService.getBaseMapper().delete(new QueryWrapper<BrowseRecords>() .lt("create_time", DateUtil.lastMonth())); }
注意事項:
ApplicationContextUtil 的程式碼位置要在task程式碼之前,啟動服務時,程式碼的順序,會影響到執行順序,如果位置不正確,還是會導致service獲取空指標
以上就是直播網站原始碼,使用Scheduled做定時任務出現Autowired注入空指標, 更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2939317/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @Scheduled 定時任務
- @Scheduled 定時任務自定義
- Spring Boot系列之使用@Scheduled實現定時任務Spring Boot
- SpringBoot 定時任務ScheduledSpring Boot
- springboot定時任務@ScheduledSpring Boot
- SpingBoot @Scheduled定時任務boot
- 直播系統原始碼,實現倒數計時,定時任務原始碼
- Spring Boot之使用Scheduled註解實現定時任務Springboot
- 【親測有效】【定時】定時任務 @Scheduled(cron = "0 0 21 * * ?") 【Scheduled失效】
- 定時任務@Scheduled引數詳解
- 使用spring @Scheduled註解執行定時任務、Spring
- Spring Boot入門(三):使用Scheduled註解實現定時任務Spring Boot
- SpringBoot執行定時任務@ScheduledSpring Boot
- 手機直播原始碼,每日定時重新整理使用者任務原始碼
- spring3.2 @Scheduled註解 定時任務Spring
- 你不知道的Scheduled定時任務騷操作
- Spring 定時任務Scheduled 開發詳細圖文Spring
- springcloud +springboot 社交電子商務-定時任務@ScheduledGCCloudSpring Boot
- SpringBoot原始碼解析-Scheduled定時器的原理Spring Boot原始碼定時器
- Java定時任務實現優惠碼Java
- 使用Java實現定時任務排程Java
- 玩轉SpringBoot之定時任務@Scheduled執行緒池配置Spring Boot執行緒
- javaScript(js)手寫原生任務定時器原始碼JavaScriptJS定時器原始碼
- spring如何設定定時任務詳解(@Scheduled)Spring
- 定時任務的實現
- Laravel5.6 使用定時任務實現定時發郵件Laravel
- Laravel5.6使用定時任務實現定時發郵件Laravel
- oracle job使用方法--實現定時任務Oracle
- 任務預測指標整理指標
- 別讓這樣的定時任務拖垮你的網站網站
- Java如何實現定時任務?Java
- 直播網站原始碼,Canvas實現圓形時間倒數計時進度條網站原始碼Canvas
- 直播app原始碼,定時開關,實現計時器功能APP原始碼
- 定時任務
- 直播網站原始碼,vue工具類,時間格式化網站原始碼Vue
- [奇思異想]使用RabbitMQ實現定時任務MQ
- 影片直播網站原始碼,圖片放大且有漸變色罩層出現網站原始碼
- 通達信速度空間指標公式原始碼指標公式原始碼