spring Sping Boot + MongoDB,无需RestApi即可插入数据

00jrzges  于 2023-06-21  发布在  Spring
关注(0)|答案(2)|浏览(120)

我有一个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));
    }

}

任何方向赞赏。

8tntrjer

8tntrjer1#

我需要设置一个时间表,并允许软件定期保存数据
您正在寻找的可能是具有@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);
    }

}
kknvjkwl

kknvjkwl2#

1.您应该使用@Service或@Component注解Manager,并让spring Boot 初始化它。
您手动初始化它,因此它脱离了Spring上下文。
1.最好在Manager中自动连接StockService,而不是StockController。控制器应该被用作Http API。

相关问题