我正在使用spring-boot CommandLineRunner类使用应用程序运行所需的一些初始数据来初始化数据库。问题是commandLineRunner类在每次重新启动应用程序时运行,这会在数据库中创建重复条目(当我设置hbm2 ddl-auto =更新时)。**如何使应用程序只运行一次初始化语句,并且以后的部署不应执行初始化语句,这会导致数据重复。**我可以使用schema.sql和data.sql文件,但初始化数据需要有关系Map,我不确定如何做到这一点。命令行运行程序中的示例记录如下:
Component
@RequiredArgsConstructor
public class DataLoader
implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
Role userRole = new Role();
userRole.setRoleName("user");
userRole.setDescription("test user");
roleRepository.save(userRole);
//Users and there roles
User user = new User();
user.setFirstName("UserFirstName");
user.setLastName("UserLastName");
user.setPhoneNumber("xx-232323232323");
user.addRoleToUser(userRole);
userRepository.save(user);
}}
2条答案
按热度按时间m0rkklqb1#
你可以用
roleRepository.getRoleByName("user")
测试userRole是否存在,如果存在就跳过数据库填充,还有其他更复杂的方法,比如liquibase,但这是一个小练习。建议实施:
wfsdck302#
您可以在插入之前检查这些特定角色和用户是否存在。