You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot整合MongoDB不通过RestApi实现定时插入数据问题咨询

空指针报错根因
  • 你手动通过new Manager()创建的实例不受Spring IoC容器托管,@Autowired注解仅对Spring容器管理的Bean生效,因此Manager里的StockController没有被自动赋值,调用时就会抛出空指针异常
  • 额外优化建议:Controller是专门处理Web请求的层组件,定时调度场景完全没有必要绕一层Controller调用,直接注入StockService执行业务逻辑更合理
实现方案

临时测试直接调用逻辑

如果只是要实现启动后立即执行一次数据保存,按下面修改即可:

  1. 将Manager注册为Spring Bean,直接注入StockService
@Component
public class Manager {
    @Autowired
    private StockService stockService;

    public boolean test(){
        LocalDateTime date = LocalDateTime.now();
        Stock stock = new Stock((double)500, "Test",date);
        stockService.saveStock(stock);
        System.out.println("stock saved");
        return true;
    }
}
  1. 修改启动类,从Spring上下文获取Manager实例执行
@SpringBootApplication
public class ApiReaderApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ApiReaderApplication.class, args);
        // 从Spring容器拿托管的Manager实例
        Manager manager = context.getBean(Manager.class);
        manager.test();
    }

}

定时任务实现(核心需求)

Spring自带定时任务组件,无需引入额外依赖,几步就能实现:

  1. 启动类添加@EnableScheduling注解开启定时任务功能
  2. 直接在启动类或任意Spring托管的Bean中添加带@Scheduled注解的方法,配置执行周期即可
@SpringBootApplication
@EnableScheduling
public class ApiReaderApplication {
    @Autowired
    private StockService stockService;

    public static void main(String[] args) {
        SpringApplication.run(ApiReaderApplication.class, args);
    }

    // 示例:每10秒执行一次数据保存,fixedRate单位为毫秒
    @Scheduled(fixedRate = 10000)
    public void autoSaveStock() {
        LocalDateTime date = LocalDateTime.now();
        Stock stock = new Stock((double)500, "Test",date);
        stockService.saveStock(stock);
        System.out.println("定时任务执行完成,stock已保存");
    }
}

如果需要自定义执行时间,可以使用cron表达式配置,例如每天凌晨1点执行可配置为@Scheduled(cron = "0 0 1 * * ?")

内容的提问来源于stack exchange,提问作者MatiasGSP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:05