Σάββατο 17 Οκτωβρίου 2020

Populate database on startup with Spring DataSourceInitializer









Populate database with hardcoded data, when Spring application starts up
















1. Create data.sql script with your data

  • src/main/resources/script/data.sql :



  • Example data.sql script data:

insert into activity_type values (1, 'GYM desc', 'GYM'), (2, 'CAR desc', 'CAR'), (3, 'BASKET desc', 'BASKET'), (4, 'HOUSE desc', 'HOUSE'); insert into activity values (1, 'STRENGTH', 'UpperChest_S', 1), (2, 'HYPERTROPHY', 'PullOverBack_H', 1), (3, 'GAS', 'GAS_MONTHLY', 4), (4, 'GAS', 'GAS_MAINTENANCE', 4), (5, 'CAR_PARTS', 'NewTires', 2), (6, 'CAR_CASUAL', 'Petrol', 2); insert into proj2.day_activity values ('1', NULL, '2020-03-04', '4', '60', '5', '4', '1', '1'), ('2', NULL, '2020-03-04', '9', '20', '8', '3', '2', '1'), ('3', NULL, '2020-03-05', '5', '65', '4', '4', '1', '1'), ('4', NULL, '2020-03-05', '10', '20', '7', '3', '2', '1'), ('5', '34', '2020-06-05', NULL, NULL, NULL, NULL, '3', '4'), ('6', '556', '2020-06-05', NULL, NULL, NULL, NULL, '4', '4'), ('7', '231', '2020-06-05', NULL, NULL, NULL, NULL, '5', '2'), ('8', '14', '2020-06-05', NULL, NULL, NULL, NULL, '6', '2'), ('9', NULL, '2020-03-06', '4', '70', '4', '4', '1', '1');


2. Application.yml


spring: datasource: url: jdbc:mysql://localhost:3306/yourDb?useSSL=false username: root password: yourpass driver-class-name: com.mysql.jdbc.Driver initialization-mode: never



3. Database @Configuration file


@Configuration @EnableJpaRepositories("com.yourproj.repository") @EnableTransactionManagement public class DatabaseConfiguration { @Autowired DataSource dataSource; public DatabaseConfiguration(Environment env) { this.env = env; } @Bean public DataSourceInitializer dataSourceInitializer() { ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(); resourceDatabasePopulator.addScript(new ClassPathResource("/script/data.sql")); DataSourceInitializer dataSourceInitializer = new DataSourceInitializer(); dataSourceInitializer.setDataSource(dataSource); dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator); return dataSourceInitializer; } }