작성
·
74
0
안녕하세요
비슷한 이유로 queryDSL 에서 불편함을 가지고 있어 jOOQ 에 관심이 생겼습니다.
마침 이렇게 좋은 강의 만들어주셔서 정말 감사합니다.
다름이 아니라 kotlin 을 주로 사용해서 kotlin 으로 jOOQ 사용시 컴파일 단계에서 힙메모리 부족 현상이 생기는데 혹시 kotlin 으로 힙메모리 부족 현상을 겪으신 적 있으신가요
만약 있으시면 해결하신 지혜를 얻고 싶어 글 남깁니다
gradle 설정은 아래와 같이 했습니다
해결과정 동안 힙메모리 설정 추가하여 늘려봐도 메모리 부족 현상이 발생하네요
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val jooqVersion: String by extra("3.19.5")
plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25"
id("org.springframework.boot") version "3.4.0"
id("io.spring.dependency-management") version "1.1.6"
id("nu.studer.jooq") version "9.0"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-jooq"){
exclude(group = "org.jooq", module = "jooq")
}
implementation("org.jooq:jooq:$jooqVersion")
// jOOQ
implementation(project(":jOOQ-custom"))
jooqGenerator (project(":jOOQ-custom"))
jooqGenerator("org.jooq:jooq:$jooqVersion")
jooqGenerator("org.jooq:jooq-meta:$jooqVersion")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly("com.mysql:mysql-connector-j")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
val dbUser: String = System.getProperty("db-user") ?: "root"
val dbPassword: String = System.getProperty("db-password") ?: "passwd"
jooq {
version.set(jooqVersion)
configurations {
create("sakilaDB") {
generateSchemaSourceOnCompilation.set(true)
jooqConfiguration.apply {
logging = org.jooq.meta.jaxb.Logging.WARN
jdbc.apply {
driver = "com.mysql.cj.jdbc.Driver"
url = System.getenv("DB_URL") ?: "jdbc:mysql://localhost:3306/sakila"
user = dbUser
password = dbPassword
}
generator.apply {
name = "org.jooq.codegen.KotlinGenerator"
database.apply {
name = "org.jooq.meta.mysql.MySQLDatabase"
excludes = "sys"
}
generate.apply {
isDaos = true
isRecords = true
isFluentSetters = true
isJavaTimeTypes = true
isDeprecated = false
}
target.apply {
directory = "src/generated"
}
strategy.name = "com.example.jooq.custom.generator.JPrefixGeneratorStrategy"
}
}
}
}
}
sourceSets {
main {
java {
srcDirs("src/main/kotlin", "src/generated")
}
}
}
답변 2
1
gradle 설정 잘못됐나보네요
강사님 설정 토대로 다시 짜니까 잘됩니다
대단하십니다
질문을 삭제할까 하다 후기 느낌으로 그냥 남겨놓겠습니다
실제 후기는 완강 후 남기도록 하겠습니다
감사합니다
저 같은 경우 메모리 부족 현상이 나타났던 이유가 gradle 설정이 잘못돼서 무한히 돌아서 그런 것 같습니다
후반부에 나오는 flyaway 적용 하기 전 gradle.kt 입니다. 저는 아래와 같이 해서 해결 했는데 안 되는 이유는 다양하게 있을 수 있어서 한 번 적용해보시고 안 되면 다른 방향으로 찾아보셔야 할 것 같습니다. 강의 마지막 세션만 남겨두고 주크로 프로젝트에 몇 번 적용해보는데 매번 한 번에 세팅 성공한 적이 없을 정도로 강사님이 강의 초반에 말씀하신 것처럼 세팅이 까다롭더라고요. 그래들 설정 정보에 대한 지식을 쌓아서 커스텀할 정도 돼야 자유롭게 쓸 수 있지 않을까 싶습니다.
import org.jooq.meta.jaxb.ForcedType
val jooqVersion: String by extra("3.19.5")
plugins {
kotlin("jvm") version "1.9.25"
kotlin("plugin.spring") version "1.9.25"
id("org.springframework.boot") version "3.4.0"
id("io.spring.dependency-management") version "1.1.6"
id("nu.studer.jooq") version "9.0"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-jooq")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
runtimeOnly("com.mysql:mysql-connector-j")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
jooqGenerator(project(":jOOQ-custom"))
jooqGenerator("org.jooq:jooq")
jooqGenerator("org.jooq:jooq-meta")
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll("-Xjsr305=strict")
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
val dbUser: String = System.getProperty("db-user") ?: "root"
val dbPassword: String = System.getProperty("db-passwd") ?: "passwd"
jooq {
configurations {
create("sakilaDB") {
generateSchemaSourceOnCompilation.set(false) // 기본적으로 스키마 소스 생성을 비활성화합니다.
jooqConfiguration.apply {
jdbc.apply {
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/sakila"
user = dbUser
password = dbPassword
}
generator.apply {
name = "org.jooq.codegen.KotlinGenerator" // 코틀린 제너레이터 명시
database.apply {
name = "org.jooq.meta.mysql.MySQLDatabase"
inputSchema = "sakila"
forcedTypes = listOf(
ForcedType().apply {
userType = "java.lang.Long"
includeTypes = "int unsigned"
},
ForcedType().apply {
userType = "java.lang.Integer"
includeTypes = "tinyint unsigned"
},
ForcedType().apply {
userType = "java.lang.Integer"
includeTypes = "smallint unsigned"
}
)
}
generate.apply {
isDaos = true
isRecords = true
isFluentSetters = true
isJavaTimeTypes = true
isDeprecated = false
}
target.apply {
directory = "src/generated"
}
strategy.name = "com.example.jooq.custom.generator.JPrefixGeneratorStrategy"
}
}
}
}
}
sourceSets {
main {
kotlin {
srcDirs(listOf("src/main/kotlin", "src/generated"))
}
}
}
저는 build.gradle.kt 에서 jOOQ 설정을 아래와 같이 수정했더니 돌아갔습니다