복붙노트

[SPRING] 스프링 부트 2.0 애플리케이션이 schema.sql을 실행하지 않는 이유는 무엇입니까?

SPRING

스프링 부트 2.0 애플리케이션이 schema.sql을 실행하지 않는 이유는 무엇입니까?

Spring 시동 1.5를 사용하는 동안 Hibernate는 적절한 구성이 설정 될 때 / resources 폴더에있는 schema.sql 파일을 실행했다. Spring Boot 2.0 릴리스 이후에는 더 이상이 기능이 작동하지 않습니다. 나는이 문서화에 대한 변화를 발견 할 수 없었다. 다음은 내 application.properties 파일 내용입니다.

spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...

#spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Spring Boot 2.0에 약간의 변경이 있었습니까? 아니면 버그 / 문제입니까?

해결법

  1. ==============================

    1.여기에서 문서를 확인하십시오.

    여기에서 문서를 확인하십시오.

    spring.jpa.hibernate.ddl-auto = create-drop이 있기 때문에 schema.sql이 실행되지 않습니다. 봄 부팅이 작동하는 것처럼 보입니다.

    편집하다

    문제 (실제로는 문제가 아님)는 애플리케이션이 mysql 인스턴스를 가리킨다 고 생각합니다.

    현재의 Spring Boot 속성보기 :

    spring.datasource.initialization-mode=embedded # Initialize the datasource with available DDL and DML scripts.
    

    기본값은 삽입되어 있습니다 (예 : 실행중인 경우에만 H2와 같은 내장 데이터베이스를 초기화하십시오.

    또한 여기 스테판의 대답을보십시오. 그는 말했다 :

    그래서 설정하려고 :

    spring.datasource.initialization-mode=always
    
  2. ==============================

    2.포함되지 않은 데이터베이스를로드하는 경우 Spring Boot 2에서 다음을 추가해야합니다.

    포함되지 않은 데이터베이스를로드하는 경우 Spring Boot 2에서 다음을 추가해야합니다.

    spring.datasource.initialization-mode=always
    

    마이그레이션 가이드 확인 :

    한때 유사한 문제가있었습니다. h2 (임베디드 DB이기 때문에) 였지만 h2 구성은 내 테스트 프로파일에 의해 활성화되었습니다.

    내 테스트 수업은 다음과 같았다.

    @RunWith(SpringRunner.class)
    @SpringBootTest                     // does not work alone
    @ActiveProfiles("my-test")
    public class MyEntityRepositoryTest {
    

    문제는 @SpringBootTest만으로 테스트 데이터베이스를 초기화하지 못했다는 것입니다. @DataJpaTest 또는 @ SpringBootTest + @ AutoConfigureTestDatabase 중 하나를 사용해야했습니다. 예제들

    @RunWith(SpringRunner.class)
    @DataJpaTest                       // works
    @ActiveProfiles("sep-test")
    public class MyEntityRepositoryTest {
    

    또는

    @RunWith(SpringRunner.class)
    @SpringBootTest                     // these two
    @AutoConfigureTestDatabase          // together work
    @ActiveProfiles("sep-test")
    public class MyEntityRepositoryTest {
    
  3. ==============================

    3.나는 그런 식으로 Hikary CP를 제외하고 만 응용 프로그램을 실행할 수있었습니다 :

    나는 그런 식으로 Hikary CP를 제외하고 만 응용 프로그램을 실행할 수있었습니다 :

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    https://github.com/spring-cloud/spring-cloud-security/issues/143에서 문제를 참조하십시오.

  4. ==============================

    4.그것은 나를 위해 잘 작동, 당신은 그것을 시도 할 수 있습니다. HikariCP 대신 원하는 데이터 소스 유형을 설정하십시오.

    그것은 나를 위해 잘 작동, 당신은 그것을 시도 할 수 있습니다. HikariCP 대신 원하는 데이터 소스 유형을 설정하십시오.

    spring.datasource.initialization-mode=always
    spring.datasource.type=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    spring.jpa.hibernate.ddl-auto=none
    
  5. ==============================

    5.spring.jpa.hibernate.ddl-auto = none을 설정하지 않으면 data.sql을 실행할 수없는 또 다른 문제가 발생할 수 있습니다. 즉, data.sql이 실행되지 않습니다. d.

    spring.jpa.hibernate.ddl-auto = none을 설정하지 않으면 data.sql을 실행할 수없는 또 다른 문제가 발생할 수 있습니다. 즉, data.sql이 실행되지 않습니다. d.

  6. from https://stackoverflow.com/questions/49438517/why-spring-boot-2-0-application-does-not-run-schema-sql by cc-by-sa and MIT license