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

时间:2017-05-10 09:32:01

标签: spring spring-boot spring-data

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

我注意到:我尝试使用构造函数创建一个新服务,该构造函数自动装配数据存储库接口。当我试图找到属于我的基础数据的特定记录时,无法找到它。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

我的意思是,您可以使用Repository(因为它刚刚接通),因此您可以创建当时所需的记录。

答案 1 :(得分:0)

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

你可以通过创建一个实现“ApplicationListener”的类并在“onApplicationEvent”方法中插入你的初始数据来实现这个目的

@Component
public class InitialDataLoader implements
ApplicationListener<ContextRefreshedEvent> {

    @Override
    @Transactional
    public void onApplicationEvent(ContextRefreshedEvent event) {

当然,您可以自动装配您的存储库并自由使用它们。