我使用Spring Boot,Hibernate,Spring Security工具创建了一个小型Web应用程序,现在我想在浏览器中对其进行测试。我猜一切都很好,但是有一个小问题我一个人无法解决。我想在与populatorDB.sql断开连接/连接后,我的数据库自动填充它,以免再次创建/删除我的数据。这意味着,当我在浏览器中测试新数据时将其添加/删除到数据库中时,我将它们存储在数据库中,而不是断开/连接,而在DB中仅使用populatorDB.sql设置了我的标准数据,而没有新数据。
PopulatorDB.sql
DELETE FROM lardi.user_roles;
DELETE FROM lardi.contacts;
DELETE FROM lardi.users;
INSERT INTO lardi.users
(login,password,full_name) VALUES
('Bill', '112233', 'user'),
('John', '112233', 'user'),
('Mark', '112233', 'user');
INSERT INTO lardi.user_roles
(role,user_id) VALUES
('ROLE_USER',1),
('ROLE_USER',2),
('ROLE_USER',3);
INSERT INTO lardi.contacts
(first_name, last_name, patronymic, mobile_phone_number, home_phone_number, address, email, user_id) VALUES
('Ivan','Ivanov','Ivanovych','+380(66)1234567','','USA','bill@gmail.com', 1),
('Petro','Petrov','Petrovych','+380(66)9876543','+380(44)1122334','USA','mark@gmail.com', 1),
('Sydor','Sydorov','Sydorovych','+380(99)1234567','','USA','barak@gmail.com', 1),
('Mykola','Mykolaiov','Mykolaiovych','+380(99)9876543','','USA','michel@gmail.com', 1),
('Aleksandr','Aleksandrov','Aleksandrovych','+380(50)5557799','+380(44)0000009','UK','david@gmail.com', 2),
('Vasyl','Vasyliov','Vasyliovych','+380(00)1100999','','USA','steve@gmail.com', 2),
('Viktor','Viktorov','Viktorovych','+380(00)2244888','','USA','tim@gmail.com', 2),
('Kostia','Konstantynov','Konstantynovych','+380(69)8881188','+380(44)1111119','USA','jim@gmail.com', 3),
('Anton','Antonov','Antonovych','+380(67)9000001','','UK','david@gmail.com', 3);
数据库配置:
@Configuration
@EnableTransactionManagement
public class JPAConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("com.model");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
private Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return properties;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/lardi?useSSL=false");
dataSource.setUsername( "root" );
dataSource.setPassword( "2940063" );
return dataSource;
}
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:validation");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public DataSourceInitializer dataSourceInitializer(DataSource dataSource){
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
databasePopulator.addScript(new ClassPathResource("populatorDB.sql"));
dataSourceInitializer.setDatabasePopulator(databasePopulator);
dataSourceInitializer.setEnabled(true);
return dataSourceInitializer;
}
@Bean
public static PropertyPlaceholderConfigurer placeHolderConfigurer(){
final PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE );
return props;
}
}
最佳答案
您可以将schema.sql和data.sql放在src / main / resources内,并使用默认的JDBC Initializer。
更多详细信息,请参见:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html,第75.3节
关于mysql - 如何使用Spring Boot/MySQL/Hibernate重新启动数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40436964/