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);
}
}
- 你应该给Manager注解@Service或者@Component,让spring开机初始化。
您手动初始化它,所以它不在 Spring 上下文中。
- 最好在管理器而不是 StockController 中自动装配 StockService。控制器应该用作 Http API.
我有一个 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);
}
}
- 你应该给Manager注解@Service或者@Component,让spring开机初始化。
您手动初始化它,所以它不在 Spring 上下文中。
- 最好在管理器而不是 StockController 中自动装配 StockService。控制器应该用作 Http API.