我正在开发一种机制,用于在 JPA 启动时将数据加载到数据库中。我们在 JPA/Hibernate 中使用代码优先方法,因此 Hibernate 实际上在每次应用程序启动时生成架构。更重要的是,我只希望当 Activity 配置文件为“dev”时发生这种情况,但我认为我走在正确的轨道上。我已经看到使用 bean 来执行此操作的建议,但我认为我不太明白。
这是我到目前为止的代码。
@Configuration
@Profile("dev")
public class DataInitializer {
@Autowired
UserService userService;
@Autowired
UserRepository userRepository;
@Autowired
PasswordEncoder passwordEncoder;
@Bean
public DataInitializer dataInitializer() {
User user = userRepository.findByUserName("admin");
if (user == null) {
User newUser = new User();
newUser.setUserName("admin");
newUser.setEmail("admin@app.com");
newUser.setFirstName("Application");
newUser.setLastName("Admin");
newUser.setPassword(passwordEncoder.encode("password"));
userRepository.save(newUser);
}
}
}
最佳答案
不确定这是否是最好的方法,但我能够使用以下代码使其工作。
@Component
@Profile("dev")
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private UserRepository userRepository;
@Autowired
PasswordEncoder passwordEncoder;
@Override
public void onApplicationEvent(final ContextRefreshedEvent event) {
User user = new User();
user.setFirstName("Test");
user.setLastName("User");
user.setEmail("email@google.com");
user.setUserName("admin");
user.setPassword(passwordEncoder.encode("PASSWORD"));
userRepository.save(user);
}
}
关于java - JPA 在应用程序启动时填充数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330350/