[SPRING] 응용 프로그램 시작 /로드 중에 SQL을 실행하여 데이터베이스를 채우는 방법
SPRING응용 프로그램 시작 /로드 중에 SQL을 실행하여 데이터베이스를 채우는 방법
응용 프로그램을로드하는 동안 mysql 데이터베이스에 일부 데이터를로드하려고합니다. 나는 응용 프로그램을위한 데이터베이스를 관리하기 위해 Hibernate를 사용하고있다. 부트 스트랩을 사용하여 그루비에서 할 수 있지만 자바로 구현하고 싶습니다. Spring MVC 기반의 웹 애플리케이션이라는 것을 말씀 드리고 싶습니다.
인터넷에서 검색하는 동안 import_file이라는 hibernate 속성을 사용하여 찾을 수 있지만 대체 경로를 찾고 있습니다.
해결법
-
==============================
1.Spring의 DataSourceInitializer를 활용할 수도있다. 다음은 Java Config의 예제입니다.
Spring의 DataSourceInitializer를 활용할 수도있다. 다음은 Java Config의 예제입니다.
@Bean public DataSourceInitializer dataSourceInitializer() { ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(); resourceDatabasePopulator.addScript(new ClassPathResource("/data.sql")); DataSourceInitializer dataSourceInitializer = new DataSourceInitializer(); dataSourceInitializer.setDataSource(dataSource()); dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator); return dataSourceInitializer; }
-
==============================
2.Spring은 DatabasePopulator를 사용하여 이미 콘텐츠로 데이터베이스를 초기화하는 방법을 제공합니다. Spring Batch 샘플 애플리케이션에 대한 간단한 예가 나와 있습니다. 이 코드에서 볼 클래스는 ResourceDatabasePopulator입니다. 또 다른 예제는 Spring Social 프로젝트 샘플이다.
Spring은 DatabasePopulator를 사용하여 이미 콘텐츠로 데이터베이스를 초기화하는 방법을 제공합니다. Spring Batch 샘플 애플리케이션에 대한 간단한 예가 나와 있습니다. 이 코드에서 볼 클래스는 ResourceDatabasePopulator입니다. 또 다른 예제는 Spring Social 프로젝트 샘플이다.
-
==============================
3.Spring 컨텍스트 설정에서 ApplicationListener의 인스턴스를 등록하기 위해 갈 것입니다. ContextRefreshedEvent는 애플리케이션 컨텍스트가 초기화되거나 새로 고쳐질 때 신호를받습니다. 이 순간 이후에 데이터베이스를 설정할 수 있습니다.
Spring 컨텍스트 설정에서 ApplicationListener의 인스턴스를 등록하기 위해 갈 것입니다. ContextRefreshedEvent는 애플리케이션 컨텍스트가 초기화되거나 새로 고쳐질 때 신호를받습니다. 이 순간 이후에 데이터베이스를 설정할 수 있습니다.
아래에는 ApplicationListener 구현 (데이터베이스 작업 수행을 담당하는 DAO에 따라 다름)과이를 구현하는 데 필요한 Spring 구성 (Java 및 XML 모두)이 나와 있습니다. 앱과 관련된 구성을 선택해야합니다.
Java 기반 구성
@Configuration public class JavaConfig { @Bean public ApplicationListener<ContextRefreshedEvent> contextInitFinishListener() { return new ContextInitFinishListener(personRepository()); } @Bean public PersonRepository personRepository() { return new PersonRepository(); } }
XML
<bean class="com.package.ContextInitFinishListener"> <constructor-arg> <bean class="com.package.PersonRepository"/> </constructor-arg> </bean>
다음은 ContextInitFinishListener 클래스의 코드입니다.
import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; public class ContextInitFinishListener implements ApplicationListener<ContextRefreshedEvent> { private PersonRepository personRepository; public ContextInitFinishListener(PersonRepository personRepository) { this.personRepository = personRepository; } @Override public void onApplicationEvent(ContextRefreshedEvent event) { //populate database with required values, using PersonRepository } }
참고 : PersonRepository 예제의 목적을위한 그냥 일반적인 DAO, 그것은 당신의 응용 프로그램에서 사용하는 DAO를 나타내는 것을 의미합니다
-
==============================
4.내 봄 부팅 콘솔 응용 프로그램 테스트에서 아래와 같이 사용했습니다.
내 봄 부팅 콘솔 응용 프로그램 테스트에서 아래와 같이 사용했습니다.
ResourceDatabasePopulator rdp = new ResourceDatabasePopulator(); rdp.addScript(new ClassPathResource("sql/create-tables.sql")); rdp.execute(dataSource);
응용 프로그램의 유형 또는 데이터 계층화 된 프레임 워크에 따라 데이터 소스를 가져 오는 다양한 방법이 있습니다.
당신이 사용할 수있는 봄 부팅 atoconfigured h2 데이터 원본을 사용하여 u r 경우.
@Autowired Datasource datasource;
외부 구성 클래스를 통해 데이터 소스를 얻는 방법은 다음과 같습니다.
@Value("${spring.datasource.driver-class-name}") private String driverClass; @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String dbUserName; @Value("${spring.datasource.password}") private String dbPassword; @Bean public DataSource dataSource(){ SingleConnectionDataSource dataSource = new SingleConnectionDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(dbUrl); dataSource.setUsername(dbUserName); dataSource.setPassword(dbPassword); dataSource.setSuppressClose(true); dataSource.setAutoCommit(true); return dataSource; }
이 나를 위해 일한 알 쿼리를 계속 만들려면 - tables.sql에서 실행해야합니다.
from https://stackoverflow.com/questions/23029722/how-to-execute-sql-insert-queries-to-populate-database-during-application-start by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 응용 프로그램 마이그레이션 중에 염두에 두어야 할 사항 : ColdFusion에서 Spring으로 (0) | 2019.04.28 |
---|---|
[SPRING] 암호화 된 암호가 BCrypt처럼 보이지 않습니다. (0) | 2019.04.28 |
[SPRING] 필드가 Null이 아닌 경우에만 유효성 검사 (0) | 2019.04.27 |
[SPRING] 봄 부팅 Mapstruct StackOverFlow 오류 (0) | 2019.04.27 |
[SPRING] Spring에서 임시 JMS jms 주제 만들기 (0) | 2019.04.27 |