Ресурсы Spring Boot в контейнере Docker - PullRequest
0 голосов
/ 21 мая 2018

Я использую Docker для приложения Spring Boot, и пока все работает.

У меня есть файл ресурсов в src/main/resources/db/data/dummydata.csv

В классе начальной загрузки этот файл используется для импорта фиктивных данных в базу данных.

личное удовольствие getDummyData (): List {var fileReader: BufferedReader?= null

val dummyData = ArrayList<DummyDataEntity>()

try {
    var line: String?

    val res = ResourceUtils.getFile("classpath:db/data/dummydata.csv")
    fileReader = BufferedReader(FileReader(res.path))

    // Read CSV header
    fileReader.readLine()

   ... Processing the data ...

} catch (e: Exception) {
    e.printStackTrace()
} finally {
    try {
        fileReader!!.close()
    } catch (e: Exception) {
        e.printStackTrace()
    }

    return dummyData
}

}

Когда я запускаю приложение в IntelliJ, все работает нормально, но когда я запускаю его в Docker, оно не может быть найдено.

Образ Jar и Docker создается с использованием Kotlin DSL Gradle.

import com.palantir.gradle.docker.DockerExtension
import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension
import org.gradle.tooling.model.GradleTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.springframework.boot.gradle.tasks.bundling.BootJar

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath(Libs.springBootGradlePlugin)
        classpath(Libs.kotlinGradlePlugin)
        classpath(Libs.kotlinAllOpen)
        classpath(Libs.gradleDocker)
    }
}

plugins {
    // Apply the java-library plugin to add support for Java Library
    `java-library`
}

apply {
    plugin("kotlin")
    plugin("kotlin-spring")
    plugin("org.springframework.boot")
    plugin("io.spring.dependency-management")
    plugin("com.palantir.docker")
}

repositories {
    mavenCentral()
}

dependencies {
    compile(Libs.kotlinReflect)

    // Spring Boot
    compile(Libs.springBootStarterDataJpa)
}

configure<DependencyManagementExtension> {
    imports {
        mavenBom(Libs.vaadinBom)
    }
}

val bootJar: BootJar by tasks
bootJar.baseName = "reporting-app-site"
bootJar.version = "0.0.1"

configure<DockerExtension> {
    name = "brabantia/${bootJar.baseName}"
    files(bootJar.archivePath)
    buildArgs(mapOf("JAR_FILE" to bootJar.archiveName))
    dependsOn(tasks["build"])
}

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "1.8"

Jar содержит BOOT-INF/classes/db/data/dummyData.csv, но при запуске приложения выдается ошибка

java.io.FileNotFoundException: class path resource [db/data/dummydata.csv] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/app.jar!/BOOT-INF/classes!/db/data/dummydata.csv

Чего мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...