我有一个Spring应用程序可以与MongoDB正常工作。我设置了一个RestApi结构,当访问正确的端点时,它在插入数据时工作得很好。
但我需要做的是一个不与RestApi系统工作的应用程序。我需要设置一个时间表,并允许软件定期保存数据。
只是为了测试的原因(和某种程度上接近我需要的解决方案),我试图直接访问控制器在主方法的应用程序,通过管理器类:
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;
}
主要类别:
@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。有没有办法做到这一点?控制器类:
@AllArgsConstructor
@Controller
public class StockController {
@Autowired
private final StockService stockService;
@PostMapping()
public ResponseEntity<Stock> saveStock(Stock stock){
return ResponseEntity.ok(stockService.saveStock(stock));
}
}
任何方向赞赏。
2条答案
按热度按时间8tntrjer1#
我需要设置一个时间表,并允许软件定期保存数据
您正在寻找的可能是具有
@Scheduled
方法的服务。示例:
此外,您可能希望通过在主应用程序类上添加
@EnableScheduling
来启用调度程序:kknvjkwl2#
1.您应该使用@Service或@Component注解Manager,并让spring Boot 初始化它。
您手动初始化它,因此它脱离了Spring上下文。
1.最好在Manager中自动连接StockService,而不是StockController。控制器应该被用作Http API。