Spring AOT Graalvm Native image with Spring Data Ldap Repository

81 views Asked by At

I'm trying to convert my springBoot API from JIT compilation to AOT compilation with GraalVM.

To do this, I'm building a docker image with buildtools :

gradle plugin :

    id("org.graalvm.buildtools.native") version "0.9.27"

build command : gradle bootBuildImage

run cmd : docker run --rm -p 8080:8080 myproject:0.0.1-SNAPSHOT

error during API startup :

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.myproject.managers.UserManager required a bean of type 'com.myproject.domain.repository.user.UserRepository' that could not be found.

It seems that the UserRepository Bean Definition doesn't exist, GraalVM can't find the UserRepository Bean.

This is my UserRepository and My UserManager (kotlin) :

@Repository
interface UserRepository: LdapRepository<User> {
    fun findByUserId(uuid: String): Optional<User>
    fun findByMobile(mobile: String): Optional<User>
    fun findByMail(mail: String): Optional<User>
}
@Component
class UserManager(
    private val userRepository: UserRepository
) {
...
}

Do you know how I can make my Ldap Spring Data Repository compatible with AOT ?


PS this is a part of my build.gradle.kts (I can change the versions if necessary) :

plugins {
    id("org.springframework.boot") version "3.1.0"
    id("io.spring.dependency-management") version "1.1.0"
    kotlin("jvm") version "1.8.21"
    kotlin("plugin.spring") version "1.8.21"
    kotlin("plugin.noarg") version "1.8.21"
    kotlin("kapt") version "1.8.22"
    id("org.graalvm.buildtools.native") version "0.9.27"
}

val springVersion = "3.1.4"
val ktlVersion = "1.8.21"
val springLdapVersion = "3.1.4"

dependencies {
    // kotlin
    implementation(kotlin("stdlib", ktlVersion))
    implementation(kotlin("reflect", ktlVersion))
    testImplementation(kotlin("test", ktlVersion))
    // spring
    implementation("org.springframework.boot:spring-boot-starter-web:$springVersion")
    testImplementation("org.springframework.boot:spring-boot-starter-test:$springVersion")
    // ldap
    implementation("org.springframework.boot:spring-boot-starter-data-ldap:$springLdapVersion")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

0

There are 0 answers