스프링부트 3.0.0 멀티모듈 QueryDSL 설정 방법

인지용·2023년 5월 25일
0
  • Spring Boot 3.0.0
  • gradle

프로젝트 구조

core 모듈에 Entity, JpaRepository가 존재

chatbot-core모듈 build.gradle

bootJar { enabled = false }
jar { enabled = true }

dependencies {

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

test {
    useJUnitPlatform()
}

def querydslDir = "$buildDir/generated/querydsl"

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

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

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



Root 모듈 build.gradle

plugins {
    id 'java'
    id 'war'
    id 'org.springframework.boot' version '3.0.6'
    id 'io.spring.dependency-management' version '1.1.0'
}

repositories {
    mavenCentral()
}

bootJar.enabled = false

allprojects {
    group 'com.egemony'
    version '0.0.1-SNAPSHOT'
    sourceCompatibility = '17'

    repositories {
		mavenCentral()
	}
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

subprojects {
    apply plugin: 'java'
    apply plugin: 'war'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'
        implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
        implementation 'com.querydsl:querydsl-apt:5.0.0:jakarta'

       	annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
        annotationProcessor "jakarta.persistence:jakarta.persistence-api"
       	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
        providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
        compileOnly 'org.projectlombok:lombok'
        runtimeOnly 'com.mysql:mysql-connector-j'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }

    tasks.named('bootJar') {
   		enabled = false
   	}

   	tasks.named('jar') {
   		enabled = true
   	}

    tasks.named('test') {
        useJUnitPlatform()
    }
}


project(':chatbot-api-server') {
    dependencies {
        implementation project(':chatbot-core')
    }
}



JPAQueryFactory Bean 등록

package com.egemony.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QueryDslConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory() {
        return new JPAQueryFactory(entityManager);
    }

}



사용 방법


MenuCustomRepository 인터페이스 주입받은 후 사용하면 됨!

profile
한-줄

0개의 댓글