我有一個與 MongoDB 一起正常作業的 Spring 應用程式。我已經設定了一個 RestApi 結構,它在插入資料時作業得很好,當訪問正確的端點時。
但是我需要做的是一個不適用于RestApi系統的應用程式。我需要設定一個時間表并允許軟體定期保存資料。
僅出于測驗原因(并且以某種方式接近我需要的解決方案),我嘗試通過 Manager 類直接在應用程式的 main 方法中訪問控制器:
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));
}
}
任何方向表示贊賞。
uj5u.com熱心網友回復:
需要設定時間表并允許軟體定期保存資料
您正在尋找的可能是帶有@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主應用程式類來啟用調度程式:
@SpringBootApplication
@EnableScheduling
public class ApiReaderApplication {
public static void main(String[] args) {
SpringApplication.run(ApiReaderApplication.class, args);
}
}
uj5u.com熱心網友回復:
- 您應該使用@Service 或@Component 注釋Manager,并讓spring boot 對其進行初始化。
您手動初始化它,因此它超出了 Spring 背景關系。
- 最好在 Manager 中自動裝配 StockService 而不是 StockController。控制器應該用作 Http API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357797.html
上一篇:使用MongoDB對檔案進行分組
