Ich möchte einige Daten in db beim Start der Spring-Boot-Anwendung hinzufügen. Ich verwende Spring-Daten-Jpa-Repositories, um Daten in der Datenbank zu speichern. Ich habe versucht, @PostConstruct
Annotation zu einer Methode und ApplicationListener
Schnittstelle, etc., aber keinen Erfolg überhaupt. Code wird in beiden Fällen ausgeführt, schreibt aber keine Daten in db. Wie kann ich es erreichen?Speichern von Daten in db beim Start mit Spring-Daten jpa
Code:
@Component
public class DatabaseFillerOnStartup implements ApplicationListener {
@Autowired
private UserRepository userRepository;
private static Logger logger = LoggerFactory.getLogger(DatabaseFillerOnStartup.class);
@Override
public void onApplicationEvent(ApplicationEvent event) {
logger.info("===================================" +event.toString());
User user = new User("test");
user.setFirstName("test");
user.setLastName("test");
user.setEmail("[email protected]");
user.setContactNumber("1234567890");
userRepository.save(user);
}
}
Konfiguration:
@Configuration
@EnableTransactionManagement
@ComponentScan("com.furniturepool.bll.config")
@PropertySource(value = "classpath:application.properties")
public class HibernateConfiguration {
@Autowired
private Environment environment;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("domain.package");
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("spring.datasource.driver-class-name"));
dataSource.setUrl(environment.getRequiredProperty("spring.datasource.url"));
dataSource.setUsername(environment.getRequiredProperty("spring.datasource.username"));
dataSource.setPassword(environment.getRequiredProperty("spring.datasource.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
}
Repository:
interface UserRepository extends CrudRepository<User, Long> {
}
Ich habe mit Hibernate festgestellt, dass das Beste, was zu tun ist, die Protokollebene so hoch wie möglich einzustellen (obwohl DEBUG wird höchstwahrscheinlich es tut) und die Ausgabe gründlich zu studieren. Es gibt ziemlich oft und Fehler in den Protokollen oder zumindest einen Hinweis darauf, was als nächstes zu versuchen ist. – JLove
@JLove: Lassen Sie mich mit Debug-Modus überprüfen –
@JLove: Ich kann Daten aus db lesen ... aber Speichern funktioniert nicht .... es ist nur das Zurückgeben des Objekts selbst, ohne irgendeine Art von Fehler zu werfen –