jojoldu / freelec-springboot2-webservice

1.07k stars 462 forks source link

P.100 properties 추가 시 작동 오류 #67

Closed benny-coding closed 4 years ago

benny-coding commented 4 years ago

안녕하세요~ 조졸두님 책으로 공부하고 있는 베니라고 합니다!

100 페이지에서 application.propertiesMySQL5InnoDBDialect 추가 시 밑에 이미지와 같이 나오고 있습니다!

스크린샷 2019-12-17 오후 6 43 32

그리고 해당 클래스를 보면

/** A Dialect for MySQL 5 using InnoDB engine
 *
 * @author Gavin King,
 * @author Scott Marlow
 * @deprecated Use "hibernate.dialect.storage_engine=innodb" environment variable or JVM system property instead.
 */
@Deprecated
public class MySQL5InnoDBDialect extends MySQL5Dialect {

    @Override
    protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
        return InnoDBStorageEngine.INSTANCE;
    }
}

위와 같이 나오고 있어 propertieshibernate.dialect.storage_engine=innodb를 추가했는데 그림 3-12처럼 id bigint not null auto_increment가 나오지 않습니다.. ㅜㅜ

혹시 어떤 것이 문제인지 예상이 가능하신가요...?

현재 저의 build.gradle 내용도 전달 드립니다!

buildscript {
    ext {
        springBootVersion = '2.1.9.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

dependencies {

    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.projectlombok:lombok')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('com.h2database:h2')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
jojoldu commented 4 years ago

@benny-coding 님 질문 감사합니다! 제가봤을때는 스프링부트 버전이 2.1.9가 되면서 기존에 사용중이던 MySQL5InnoDBDialect 이 Deprecated가 된것으로 보입니다.

다만 제가 적용해본 결과

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

로 하시면 2.1.9까지는 정상작동되며

image

2.1.10 이후로는 아래와 같이 좀 더 복잡한 설정이 추가 되어야 합니다.

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

아무래도 불편한점이 많다보니 2.1.9에서 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect 를 사용하는것을 추천드립니다.

storage_engine=innodb 를 사용하지 않으면 MyISAM으로 쿼리가 수행됩니다. 자세한 것은 별도 코멘트를 참고해주세요.

2.1.10이후의 설정방법은 별도로 블로그에 정리해서 공유드리겠습니다 :)

benny-coding commented 4 years ago

와 친절하신 답변 정말 감사 드립니다~!! 말씀 주신대로 해보도록 하겠습니다! ㅎㅎ

jojoldu commented 4 years ago

넵넵 :) 안되시며 편하게 말씀주세요!

freezboi commented 4 years ago

스프링부트 2.2.2 에서 아래와 같이 2개만 추가해줘도 실행 잘되네요

전 yml로 적용했습니다.

jpa:
  show-sql: true
  properties:
    hibernate:
      dialect: org.hibernate.dialect.MySQL5InnoDBDialect
datasource:
  hikari:
    jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL
jojoldu commented 4 years ago

오해하시는 분들이 많아서 추가로 storage_engine에 대한 답변도 함께 남겨놓습니다 :)

https://github.com/jojoldu/freelec-springboot2-webservice/issues/158#issuecomment-582759510

6lueparr0t commented 4 years ago

freezboi 님꺼 그대로 해보니 실행은 되는데 쿼리문이 안나와서 수정해봤습니다. application.yml 로 생성하심 됩니다.

spring:
    jpa:
        show_sql: true
        properties:
            hibernate:
                dialect: org.hibernate.dialect.MySQL5InnoDBDialect
                storage_engine: innodb
    datasource:
        hikari:
            jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

2.2.6 에서 해봤습니다.

스크린샷 2020-04-20 오전 3 46 16
JaeJunRyu commented 4 years ago

2.3.1에서 올려 주신 프로퍼티스 잘 동작합니다 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

Yohan-K commented 4 years ago

스프링부터 버전이 '2.1.7' 에서 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect에 대해 Deprecated가 발생하여 '2.1.9' 로 변경했지만 여전히 Deprecated가 발생합니다. 위에서 말씀하신 내용은 적용시켜 봤지만 여전히 동작하지 않습니다. show_sql에서는 정상적으로 쿼리가 출력되지만 MySQL57Dialect에서도 출력되지 않습니다..

giantim commented 4 years ago

@jhyeon89 h2 database 버전을 1.4.199로 낮춰보세요!

bossm0n5t3r commented 4 years ago

현재 MySQL5InnoDBDialect, MySQL57InnoDBDialect 모두 참조 안하는 듯하네요. 다음과 같이 application.yaml 를 만들어줘서 해결했습니다. 도움이 될까 싶어서 공유합니다.

spring boot version은 2.2.6 입니다.

spring:
  jpa:
    show_sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57Dialect
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL
midi79 commented 3 years ago

Spring Boot 2.4.0 쓰는데 위에 방식 다 안되네요. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL 이걸로 했는데도 안되네요 ㅠㅠ

application.yml로 변경해서 해도 안되네요. 실습 진행이 안되니깐 답답하네요. spring: jpa: show_sql: true properties: hibernate: dialect: org.hibernate.dialect.MySQL5InnoDBDialect storage_engine: innodb datasource: hikari: jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

bossm0n5t3r commented 3 years ago

@midi79 application.yaml 에서 제 것과 똑같이 해도 안되는 건가요? 써주신 application.yaml에서는 MySQL5InnoDBDialect로 되어 있는데, MySQL57Dialect 이면 어떨지 생각이 들어서요 👀

midi79 commented 3 years ago

@midi79 application.yaml 에서 제 것과 똑같이 해도 안되는 건가요? 써주신 application.yaml에서는 MySQL5InnoDBDialect로 되어 있는데, MySQL57Dialect 이면 어떨지 생각이 들어서요 👀

위에 문제가 아니였구요, Post 인데 예제가 Put으로 되어 있어서 발생한 에러였네요.....에휴...ㅠㅠㅠ https://taeil00.tistory.com/936

earth-space commented 3 years ago

덕분에 해결하고 갑니다 감사합니다

LEEJIYUL commented 3 years ago

@bossm0n5t3r 솔루션 감사합니다!

sbdyzjdla commented 3 years ago

스프링부트 버전이 2.1.9까지만 이었군요 2.4.1 버전 사용중인데 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

이 설정을 적용하니 정상실행 됩니다. 감사합니다!

xengom commented 3 years ago
  jpa:
    show_sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57Dialect
  datasource:
    hikari:
      jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

스프링부트2.5.0 이렇게 하니 잘됩니다. 혹시 OracleDB사용하고 싶으면 어떻게 해야하나요..?

spring:
  jpa:
    show_sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle10gDialect
  datasource:
    hikari:
      jdbc-url: jdbc:oracle:thin:@localhost:1521/xe
      driver-class-name: oracle.jdbc.driver.OracleDriver
      username: [DBID]
      password: [DBPW]

로 해봤는데 테이블을 못찾는거보니 Create가 안되는거 같습니다.. image

LUNA-Jun commented 11 months ago

추가적으로 properties 에

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL

설정 시 책 내용 대로 h2-console 연결 시

"Database "mem:testdb" not found, either pre-reate it or allow remote database creation (not recommended in secure environments) [90149-214] 90149/90149 (Help) "

오류가 뜨는데 JDBC URL에 jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL 입력하면 연결 가능하니 참고 바랍니다.

ericbyeric commented 8 months ago

혹시 버전이 저와 같은 분들은 참고바랍니다~ Spring Boot Version: 3.2.2 hibernate Version: 6.4.1 h2 Version: 2.2.224

hibernate 6 부터는 버전에 따른 dialect가 deprecated되서 스탠다드 버전인 org.hibernate.dialect.MySQLDialect 를 사용해야 합니다.

spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect.storage_engine=innodb spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL spring.h2.console.enabled=true

Nayoon99 commented 1 month ago

@ericbyeric 너무 감사합니다ㅠㅠ 혼자 공부하던 중 계속 java.lang.IllegalStateException 오류가 떠서 진도를 못 나가고 있었습니다. 덕분에 해결했습니다!