Я работаю над созданием механизма для загрузки данных в базу данных при загрузке JPA. Мы используем первый подход кода с JPA/Hibernate, поэтому hibernate фактически генерирует схему каждый раз, когда запускаются приложения. Кикер - это то, что я хочу, чтобы это произошло, когда активный профиль "dev", однако я думаю, что нахожусь там на правильном пути. Я видел предложения по использованию компонента для этого, но я думаю, что я не совсем понимаю его.
Это код, который у меня есть.
@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("[email protected]");
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 protected]");
user.setUserName("admin");
user.setPassword(passwordEncoder.encode("PASSWORD"));
userRepository.save(user);
}
}