[SPRING] XML 구성없이 @Configuration을 사용하여 데이터베이스 초기화
SPRINGXML 구성없이 @Configuration을 사용하여 데이터베이스 초기화
XML 파일을 만들 필요없이 데이터베이스를 초기화하는 방법을 알고 싶습니다.
나는 이미 잘 작동하는 이런 종류의 초기화를 사용하지만 현재의 경우에는 XML을 만들고 싶지 않다.
<jdbc:initialize-database data-source="dataSource">
<jdbc:script location="classpath:com/foo/sql/db-schema.sql"/>
<jdbc:script location="classpath:com/foo/sql/db-test-data.sql"/>
</jdbc:initialize-database>
나는 내장 데이터베이스를 만들 수 있다는 것을 알고있다 :
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder.setType(H2).addScript("my-schema.sql").addScript("my-test-data.sql").build();
필자의 경우, 데이터베이스와 스키마는 Liquibase를 사용하여 생성됩니다.
스프링과 사용자 정의 된 데이터 세트로 초기화하고 매번 새로운 XML 파일을 만들 필요가 없습니다.
가능한가?
해결법
-
==============================
1.@Configuration 클래스 내부의 다음 코드 줄이 작동 할 수 있습니다.
@Configuration 클래스 내부의 다음 코드 줄이 작동 할 수 있습니다.
@Value("classpath:com/foo/sql/db-schema.sql") private Resource schemaScript; @Value("classpath:com/foo/sql/db-test-data.sql") private Resource dataScript; @Bean public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { final DataSourceInitializer initializer = new DataSourceInitializer(); initializer.setDataSource(dataSource); initializer.setDatabasePopulator(databasePopulator()); return initializer; } private DatabasePopulator databasePopulator() { final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.addScript(schemaScript); populator.addScript(dataScript); return populator; }
-
==============================
2.자신 만의 schema.sql을 만들어 src / main / resources-folder에 넣어야합니다.
자신 만의 schema.sql을 만들어 src / main / resources-folder에 넣어야합니다.
import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; 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; @Configuration public class DataSourceInitializer { @Bean(name = "dataSource") public DataSource getDataSource(){ DataSource dataSource = createDataSource(); DatabasePopulatorUtils.execute(createDatabasePopulator(), dataSource); return dataSource; } private DatabasePopulator createDatabasePopulator() { ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(); databasePopulator.setContinueOnError(true); databasePopulator.addScript(new ClassPathResource("schema.sql")); return databasePopulator; } private SimpleDriverDataSource createDataSource() { SimpleDriverDataSource simpleDriverDataSource = new SimpleDriverDataSource(); simpleDriverDataSource.setDriverClass(org.h2.Driver.class); simpleDriverDataSource.setUrl("jdbc:h2:target/database/example;AUTO_RECONNECT=TRUE"); simpleDriverDataSource.setUsername(""); simpleDriverDataSource.setPassword(""); return simpleDriverDataSource; } }
-
==============================
3.EmbeddedDatabaseBuilder와 관련된 Spring 클래스를 살펴본 후에 DatabaseBuilder가 다음과 같은 코드를 사용하고 있음을 알게되었습니다.
EmbeddedDatabaseBuilder와 관련된 Spring 클래스를 살펴본 후에 DatabaseBuilder가 다음과 같은 코드를 사용하고 있음을 알게되었습니다.
ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); for (String sqlScript: sqlInitializationScripts ) { Resource sqlScriptResource = RESOURCE_LOADER.getResource(sqlScript); populator.addScript(sqlScriptResource); } DatabasePopulatorUtils.execute(populator, dataSource);
Spring 구성이 아니라 @BeforeTest 메서드에있을지라도 이것은 잘 동작 할 것입니다.
-
==============================
4.확실히 가능합니다.
확실히 가능합니다.
이미 Spring의 ApplicationContext에 의해로드되는 @Configuration 클래스를 가지고 있다면 이미 가지고있는 코드를 포함하는 새로운 @Bean 메소드를 생성하면됩니다 (물론 추가 return 문을 사용하면됩니다).
EmbeddedDatabase는 DataSource 인터페이스를 구현하므로 JdbcTemplate에서 쉽게 사용할 수 있습니다.
@Bean public DataSource db() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); builder.setType(H2).addScript("my-schema.sql").addScript("my-test-data.sql"); return builder.build(); }
from https://stackoverflow.com/questions/16038360/initialize-database-without-xml-configuration-but-using-configuration by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 성공적인 등록 후 자동 로그인 (0) | 2019.01.08 |
---|---|
[SPRING] 스프링 보안으로 사용자 업데이트시 권한을 다시로드하는 방법 (0) | 2019.01.08 |
[SPRING] 스프링에 의해 시작된 임베디드 H2 데이터베이스의 내용보기 (0) | 2019.01.08 |
[SPRING] 함수의 매개 변수로 전달하지 않고 Spring에서 현재 사용자 로케일을 얻는 방법? (0) | 2019.01.08 |
[SPRING] Spring에서 ref 빈에 메서드를 호출 한 결과를 삽입 할 수 있습니까? (0) | 2019.01.08 |