我有一个关于在springboot中初始化数据的问题。我有这个:
@PostConstruct
public void run() {
try {
upload(path);
logger.info("Seeding dictionary database...");
} catch (IOException e) {
//.....
}
}
run()方法读取.json文件,并在应用程序启动时用文件中的信息填充数据库。但我还有一个.sql文件,它在启动时也会填充数据库。从.sql文件初始化创建的表与从.json文件创建的表相关
当应用程序启动时
INSERT INTO "USER_DICTIONARY"("DICTIONARY_ID", "USER_ID") VALUES (1, 0)
我在import.sql中有这一行,但这会导致错误,因为dictionary\u id不存在,因为它来自import.sql之后加载的.json文件。在执行sql文件时,需要从.json文件检索的数据来正确Map此表。
是否可以在执行.sql文件之前执行my run()methody,或者可以用其他方法解决?如果是,请帮我找到答案。
1条答案
按热度按时间6ie5vjzr1#
在springboot中使用commandlinerunner作为数据库种子的一个选项。
例子:
}
commandrunner接口将在应用程序启动之后执行。
另一种方法是使用@eventlistener侦听应用程序的contextrefreshevent。
例子: