在我的spring项目中,我创建了一些类,这些类在我的开发环境中为我提供了一些初始基础数据。这些类实现ApplicationRunner
接口并正常工作。
容器启动后,数据可用。
我注意到:我尝试使用构造函数创建一个新服务,该构造函数自动装配数据存储库接口。当我试图找到属于我的基础数据的特定记录时,无法找到它。
根据我的日志,我想在容器启动时首先创建所有服务,然后 插入基础数据。
在创建@Service
注释类之前是否有机会创建一些基本数据或初始数据?或者这是一种竞争条件?
使用最新版本的spring boot +数据。
答案 0 :(得分:1)
如果服务依赖于某些初始化的数据,您应该在该服务bean的构造函数(或afterPropertiesSet
方法)中创建数据。
我的意思是,您可以使用Repository
(因为它刚刚接通),因此您可以创建当时所需的记录。
答案 1 :(得分:0)
您最好在“ContxtRefreshedEvent”之后创建初始数据。
你可以通过创建一个实现“ApplicationListener”的类并在“onApplicationEvent”方法中插入你的初始数据来实现这个目的
@Component
public class InitialDataLoader implements
ApplicationListener<ContextRefreshedEvent> {
@Override
@Transactional
public void onApplicationEvent(ContextRefreshedEvent event) {
当然,您可以自动装配您的存储库并自由使用它们。