YOUNG-JIN.OH
웃어라. 온 세상이 너와 함께 웃을 것이다.
울어라. 너 혼자만 울게 될 것이다.

Spring Boot, JPA 및 Lombok+QueryDSL 설정

참고 사이트:

기존 애플리케이션에서는 관계형 데이터 베이스를 위해 SQL 작업을 하는데 많은 애로사항이 있었습니다. 이 부분을 해결하기 위해 자바 진영에서 ORM 표준으로 JPA(Java Persistent API) 를 지원하여 개발 생산성을 높여주며 Hibernate를 가장 많이 사용하게 됩니다.

IntelliJ IDEA 에서 프로젝트 생성시 Spring Initializr, Type “Gradle”, Java Version “11” 기준으로 Dependencies 는 “Core – Lombok, SQL – JPA, MySQL”를 선택하여 프로젝트를 생성합니다. 그리고 아래와 같이 내용을 입력합니다.

build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

def queryDSLVersion = '4.2.1'
def generated = "src/main/generated"

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // Lombok
    compileOnly 'org.projectlombok:lombok'
    // QueryDSL
    compile("com.querydsl:querydsl-core:${queryDSLVersion}")
    compile("com.querydsl:querydsl-jpa:${queryDSLVersion}")
    compile("com.querydsl:querydsl-apt:${queryDSLVersion}")
    annotationProcessor(
            "com.querydsl:querydsl-apt:${queryDSLVersion}:jpa",
            "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final",
            "javax.annotation:javax.annotation-api:1.3.2",
            "org.projectlombok:lombok"
    )
}

sourceSets {
    main.java.srcDirs += [ generated ]
}

tasks.withType(JavaCompile) {
    options.annotationProcessorGeneratedSourcesDirectory = file(generated)
}

clean.doLast {
    file(generated).deleteDir()
}

테스트가 가능하도록 application.properties 에 DataSource를 설정하고 JPA관련 내용도 추가합니다.

application.properties

spring.datasource.continue-on-error=false
spring.datasource.separator=;
spring.datasource.jmx-enabled=false
spring.datasource.name=youtube
spring.datasource.platform=all
spring.datasource.sql-script-encoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.7.102/youtube?autoReconnect=true&useUnicode=true&charaterEncoding=utf-8
spring.datasource.username=youtube_master
spring.datasource.password=password!

spring.jpa.database=mysql
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.open-in-view=false
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.properties.hibernate.default_schema=youtube

DemoApplication.java를 실행시 아래와 같은 오류가 발생한다면 spring.datasource.url 에 &serverTimezone=UTC 을 추가해 줍니다.

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value ‘KST’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

오른쪽 Gradle 항목에서 Tasks-other-compileJava를 누르면 src-main-generated에 Q코드가 정상적으로 생성이 됩니다. DemoApplication 을 실행했을 때 별다른 오류없이 User 테이블이 자동으로 생성되는 쿼리가 로그에 찍히면 정상적으로 설정이 완료된 것입니다.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.