Spring:使用ApplicationRunner和服务初始化创建初始化数据的顺序

Spring:使用ApplicationRunner和服务初始化创建初始化数据的顺序,spring,spring-boot,spring-data,Spring,Spring Boot,Spring Data,在我的spring项目中,我创建了一些类,这些类在我的开发环境中为我提供了一些初始的基础数据。这些类实现ApplicationRunner接口,工作正常。 容器启动后,数据可用 我注意到:我试图用一个构造函数创建一个新服务,该构造函数自动连接数据存储库接口。当我试图找到一个特定的记录,这是我的基础数据的一部分,它无法找到 根据我的日志,我猜在容器启动时,首先创建所有服务,然后插入基础数据 在创建@Service注释类之前,是否有机会创建一些基础或初始数据,或者这是一种竞争条件 使用最新版本的sp

在我的spring项目中,我创建了一些类,这些类在我的开发环境中为我提供了一些初始的基础数据。这些类实现ApplicationRunner接口,工作正常。 容器启动后,数据可用

我注意到:我试图用一个构造函数创建一个新服务,该构造函数自动连接数据存储库接口。当我试图找到一个特定的记录,这是我的基础数据的一部分,它无法找到

根据我的日志,我猜在容器启动时,首先创建所有服务,然后插入基础数据

在创建@Service注释类之前,是否有机会创建一些基础或初始数据,或者这是一种竞争条件


使用最新版本的spring boot+数据。

如果服务依赖于初始化的某些数据,您可能应该在该服务bean的构造函数或AfterPropertieSet方法中创建数据


我的意思是,您可以使用存储库,因为它刚刚连接进来,所以您可以创建您当时需要的记录。

您最好在ContxtRefreshedEvent之后创建初始数据

您可以通过创建一个实现ApplicationListener的类并将初始数据插入到ApplicationEvent方法中来实现这一点

@Component
public class InitialDataLoader implements
ApplicationListener<ContextRefreshedEvent> {

    @Override
    @Transactional
    public void onApplicationEvent(ContextRefreshedEvent event) {
确保您可以自动连接存储库并自由使用它们