해결된 질문
작성
·
660
0
# server port
#spring.server.port=8080
# data base
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/데이터베이스이름?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=유저
spring.datasource.password=비밀번호
# thymeleaf
spring.thymeleaf.cache=false
spring.jpa.database=mysql
spring.jpa.database-platform= org.hibernate.dialect.MySQL8Dialect
# spring data jpa
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.jpa.show-sql=true
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.defer-datasource-initialization= true
spring.sql.init.mode= always
logging.level.org.silvernine=DEBUG
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'NewYear'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.testng:testng:7.1.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
implementation 'mysql:mysql-connector-java:8.0.29'
// implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.29'
runtimeOnly 'mysql:mysql-connector-java'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('bootBuildImage') {
builder = 'paketobuildpacks/builder-jammy-base:latest'
}
tasks.named('test') {
useJUnitPlatform()
}
mysql에 정상적으로 connection이 되는 데 Entity에서 테이블 생성을 못하는 거 같습니다.
따로 오류는 없고, 테이블이 생성이 안됩니다.
data.sql에서 따로 테이블을 생성하는 구문을 넣으면 테이블과 컬럼값들이 제대로 들어가는 데 Entity에선 테이블을 자동으로 생성하지 못합니다.
무엇이 문제일까요? ㅠㅠ
답변 2
1
spring.jpa.defer-datasource-initialization= true
해당 설정으로 data.sql, schema.sql 의 sql 파일을 읽는 것으로 알고 있습니다.
테이블 만드는 부분은 schema.sql로 따로 만들고
데이터 넣는 부분은 그대로 data.sql로 만들어주세요.
그리고 spring.jpa.hibernate.ddl-auto=create
이 ddl-auto 설정은 none으로 설정하고 실행하면 되지 않을까.. 생각합니다
환경 설정 부분은 공식문서와 다른 분들의 예시를 참조하면 좋을 것 같아요.
https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
여쭤보신 부분에 대해서 답변드리면
ddl-auto: create 설정을 해두면 이제 애플리케이션 실행할 때, 자동적으로 테이블 생성이 됩니다. @Entity를 설정한 클래스와 JpaRepository를 확장한 리포지토리 클래스가 있다면요. (하지만 권장하는 방식은 ddl-auto: create는 validate나 none으로 설정하고 sql 문으로 직접 테이블을 만드는 것을 추천드립니다. ddl-auto: create로 하는 게 편하긴 하지만요 ㅎㅎ.....)
글쓴이님의 설정대로라면 ddl-auto: create 설정으로 인해 테이블이 만들어지고
이 후에 만약 schema.sql 파일이 있다면 해당 파일의 쿼리문에 따라 테이블을 생성하게 됩니다.
그 다음 data.sql 파일의 쿼리문을 수행하여 데이터를 처리하는 작업을 하게 됩니다.
아예 테이블이 생성되지 않았다고 하니 @Entity, @Repository 부분을 확인해보시고
그리고 테이블이 만들어졌는데 보이지 않을 수도 있을 수 있으니DB 부분에서 새로고침을 해보시면 테이블이 보일 수도 있을 것 같습니다.
친절한 답변 정말 감사합니다 !!
예전에 data.sql없이 JPA를 사용했을 때에는 테이블과 엔티티들이 잘 생성되었는 데 이번엔 안되어서 이것저것 찾아봤는 데 환경 설정 부분나 JPA 부분에서나 부족한 지식들이 너무 많아, 이해가 잘 안되었던 것 같습니다
알려주신대로 해보고, 안되면 따로 공부를 더 해서 해결해보겠습니다 !!!
정말정말 감사합니다 :)
답변 감사합니다 !
궁금한 점이 있어서 추가 질문 남깁니다
혹시 저렇게 설정하면 나중에 Entity에서 테이블을 자동적으로 생성하진 못하는 걸까요?