JPA заполнить данные при запуске приложения

1

Я работаю над созданием механизма для загрузки данных в базу данных при загрузке 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);
        }
    }
}
Теги:
spring
hibernate
jpa

1 ответ

0
Лучший ответ

Не уверен, что это лучший подход, но я смог заставить его работать со следующим кодом.

@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);
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню