package com.ps.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.Resource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.datasource.SimpleDriverDataSource; import org.springframework.jdbc.datasource.init.DatabasePopulator; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import javax.sql.DataSource; import java.sql.Driver; import com.ps.CleanUp; @Configuration @Profile("dev") @PropertySource("classpath:db/db.properties") public class TestDataConfig { @Value("${driverClassName}") private String driverClassName; @Value("${url}") private String url; @Value("${login}") private String username; @Value("${password}") private String password; @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } @Lazy @Bean public DataSource dataSource() { try { final SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); Class<? extends Driver> driver = (Class<? extends Driver>) Class.forName(driverClassName); dataSource.setDriverClass(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); DatabasePopulatorUtils.execute(databasePopulator(), dataSource); return dataSource; } catch (Exception e) { e.printStackTrace(); } return null; } @Value("classpath:db/schema.sql") private Resource schemaScript; @Value("classpath:db/test-data.sql") private Resource dataScript; private DatabasePopulator databasePopulator() { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScript(schemaScript); populator.addScript(dataScript); return populator; } @Bean public JdbcTemplate userJdbcTemplate() { return new JdbcTemplate(dataSource()); } @Bean public NamedParameterJdbcTemplate userNamedJdbcTemplate() { return new NamedParameterJdbcTemplate(dataSource()); } @Bean(destroyMethod = "destroy") public CleanUp cleanUp() { return new CleanUp(userJdbcTemplate()); } }