gpt4 book ai didi

docker - Docker 容器中的 Spring Boot 资源

转载 作者:行者123 更新时间:2023-12-02 12:39:14 24 4
gpt4 key购买 nike

我正在将 Docker 用于 Spring Boot 应用程序,到目前为止一切正常。

我在 src/main/resources/db/data/dummydata.csv 中有一个资源文件

在引导类中,此文件用于将虚拟数据导入数据库。

私有(private)乐趣 getDummyData(): 列表 {
var fileReader: BufferedReader? =空

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

我在这里想念什么?

最佳答案

以下对我有用..,您需要使用 InputStream 而不是文件。

...

@Autowired
private ResourceLoader resourceLoader;

...
  Resource resource= resourceLoader.getResource("classpath:/account_info.html");

InputStream inputStream= resource.getInputStream();

Assert.notNull(inputStream,"Could not load template resource!");

String email = null;

try {
byte[] bdata = FileCopyUtils.copyToByteArray(inputStream);
email = new String(bdata, StandardCharsets.UTF_8);
} catch (IOException e) {
logger.warn("IOException", e);
}finally {
if ( inputStream != null) {
IOUtils.closeQuietly(inputStream);
}
}

关于docker - Docker 容器中的 Spring Boot 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50451425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com