当前位置: 首页 > 知识库问答 >
问题:

Docker容器中的Spring Boot资源

杜晨朗
2023-03-14

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

私人乐趣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
}

}

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

我错过了什么?

共有1个答案

邹毅
2023-03-14

下面的操作对我很有效...你需要使用一个输入流而不是一个文件。

...

@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);
        }
    }
 类似资料:
  • Iv创建了两个Springboot应用程序,Iv对其进行了文档化并创建了本地容器。当我通过intellij在我的机器上本地运行应用程序时,它们工作正常。localhost:8080上的应用程序A有一个Spring WebClient,其中有一个base Urllocalhost:8081配置为调用在端口8081上运行的应用程序B。这工作得很好。 当我将这些容器添加到 docker compose

  • 我拉出了mysql docker映像,并用命令运行容器: 此时,springBoot在本地工作。它与MySQL连接: 现在,我希望springBoot应用程序也在单独的docker容器上,在同一服务器上。为此,我使用了DockerFile: 同样,它无法连接到数据库:

  • 我认为这是因为容器没有JAVA_HOME变量集。我执行了和尝试命令,但它没有显示java可执行文件。此外,java和javac命令不起作用。 有人知道我做错了什么吗?如有任何帮助,不胜感激。提前感谢!

  • 我正在尝试对我的Spring Boot应用程序进行dockerize。 这是我的docker作曲文件 我的dockerfile 我可以看到我的战争已经展开。在日志中我可以看到 在/usr/local/tomcat/webapps目录中,我可以看到这个根目录。war和根文件夹存在。我用以下命令启动docker: 当我访问localhost:8080Tomcat说Http状态404-未找到。 这里是执

  • 在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟

  • 我不是docker的专家,也许我缺少一些基本配置。有什么想法为什么我不能使用POI?提前道谢。