Spring脚+MongoDB,没有Rest Api插入数据

Spring Boot + MongoDB, insert data without a RestApi

我有一个 Spring 应用程序可以与 MongoDB 一起正常工作。我已经设置了一个 RestApi 结构,它在插入数据时工作得很好,当访问正确的端点时。

但我需要做的是一个不支持 RestApi 系统的应用程序。我需要设置一个时间表,让软件定时保存数据。

只是出于测试原因(并且以某种方式接近我需要的解决方案)我尝试通过管理器直接在应用程序的主要方法中访问控制器 class:

public class Manager {

@Autowired
private StockController stockController;

public Manager(){

}

public boolean test(){
    LocalDateTime date = LocalDateTime.now();
    Stock stock = new Stock((double)500, "Test",date);

    stockController.saveStock(stock);
    System.out.println("stock saved");
    return true;
}

主要class:

@SpringBootApplication
public class ApiReaderApplication {

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

    Manager manager = new Manager();
    manager.test();


    }

}

但是我不断收到 NullPointerException,当我使用此语法时,Java 将 Manager 的 stockController 实例检测为 null。有没有办法做到这一点?控制器 class:

@AllArgsConstructor
@Controller
public class StockController {

    @Autowired
    private final StockService stockService;

    @PostMapping()
    public ResponseEntity<Stock> saveStock(Stock stock){
        return ResponseEntity.ok(stockService.saveStock(stock));
    }

}

任何方向表示赞赏。

need to set a schedule and allow the software to save data regularly

您正在寻找的可能是具有 @Scheduled 方法的服务。

示例:

@Service
@RequiredArgsConstructor
public class Manager {

    private final StockService stockService;

    @Scheduled(fixedRate = 5000)
    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;
    }
}

此外,您可能希望通过在主应用程序上添加 @EnableScheduling 来启用调度程序 class:

@SpringBootApplication
@EnableScheduling
public class ApiReaderApplication {

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

}
  1. 你应该给Manager注解@Service或者@Component,让spring开机初始化。

您手动初始化它,所以它不在 Spring 上下文中。

  1. 最好在管理器而不是 StockController 中自动装配 StockService。控制器应该用作 Http API.