JPA在App Start上填充数据

时间:2015-03-29 14:30:57

标签: java spring hibernate jpa

我正在开发一种机制,在JPA启动时将数据加载到数据库中。我们使用JPA / Hibernate的代码优先方法,因此hibernate实际上是每次应用程序启动时生成模式。踢球者是我只想在活跃的个人资料是“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);
        }
    }
}

1 个答案:

答案 0 :(得分: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@google.com");
        user.setUserName("admin");
        user.setPassword(passwordEncoder.encode("PASSWORD"));
        userRepository.save(user);
    }
}