我正在开发一种机制,在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);
}
}
}
答案 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);
}
}