Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot静态资源在我构建的jar中,但不在部署到Docker的jar中_Java_Spring Boot_Docker_Static Files - Fatal编程技术网

Java Spring Boot静态资源在我构建的jar中,但不在部署到Docker的jar中

Java Spring Boot静态资源在我构建的jar中,但不在部署到Docker的jar中,java,spring-boot,docker,static-files,Java,Spring Boot,Docker,Static Files,我想知道这篇文章的标题是否应该是“我无知”。这显然是一个常见的问题,我读过多篇关于它的文章,但在某些地方我缺少知识或。。。什么 /问题/24661289/spring boot不提供静态内容 /问题/54735747/spring boot未从jar内部提供静态文件 /问题/63061943/how-to-load-static-files-with-spring-boot-inside-a-docker-container-hosted-on-aw 我已经确认,我的问题是静态资源没有到达D

我想知道这篇文章的标题是否应该是“我无知”。这显然是一个常见的问题,我读过多篇关于它的文章,但在某些地方我缺少知识或。。。什么

  • /问题/24661289/spring boot不提供静态内容
  • /问题/54735747/spring boot未从jar内部提供静态文件
  • /问题/63061943/how-to-load-static-files-with-spring-boot-inside-a-docker-container-hosted-on-aw
我已经确认,我的问题是静态资源没有到达Docker。使用CLI,我可以解压jar,看到没有html、js或css文件

然而,我已经确认了我正在使用的罐子(我想我正在使用它,无论如何,我不知道它怎么会不可能)里面有它们。这就好像他们被有意地抽离和排除在外

这是我的application.properties:

#FOR LOCAL
#spring.datasource.url=jdbc:postgresql://localhost:5432/library

#FOR DOCKER
spring.datasource.url=jdbc:postgresql://postgresqldb:5432/library

spring.datasource.username=postgres
spring.datasource.password=password
spring.datasource.driver-class-name=org.postgresql.Driver

#The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

#Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=create
spring.datasource.initialization-mode=always

#This enables app to serve the static content. Not sure why I need it, but it makes it work locally.
server.contextPath=/
这是我的文件

FROM openjdk:8-jdk-alpine

ARG JAR_FILE=build/libs/microservice1-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} bookws.jar

ENTRYPOINT ["java","-jar","/bookws.jar"]
这是我的docker-compose.yaml

version: '3.1'
services:
  app:
    container_name: bookws
    image: bookws
    build: ./
    ports:
      - "8080:8080"
    depends_on:
      - postgresqldb
  postgresqldb:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=library
以下是我的主要java文件:

//package and imports excluded for brevity

@SpringBootApplication
public class Microservice1Application {

    public static void main(String[] args) {
        SpringApplication.run(Microservice1Application.class, args);
    }

}
我的静态资源存储在src/main/resources/static中

static/index.html
static/js/book-crud.js
static/js/jquery-3.5.0.min.js
static/js/jquery-ui-1.12.1.min.js
static/css/main.css
static/img/ (some .pngs and some .jpgs)
编辑:添加my build.gradle文件:

plugins {
    id 'org.springframework.boot' version '2.3.3.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

group = 'com.familam.learning'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-hateoas'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
//  annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

提前感谢您提供的任何见解!!如果我需要添加任何进一步的信息,我很乐意。我缺少的最简单的东西是什么?

我的问题不在于配置,而在于我对docker compose的工作原理一无所知。docker compose命令“up”不会重新构建docker映像。您需要先运行“docker compose build”命令。这就是我所缺少的。

如果我只是无知,请原谅我。为什么您谈论的是两个不同的jar文件?为什么您不能将您所拥有的jar文件部署到Docker,因为您知道该文件包含所有正确的内容?是什么使得DOCKER版本不同,为什么?我会考虑查看JB或Spring的DOCKER支持,而不是维护自己的DOCKFILE,硬编码的JAR版本。否则,请显示您的Maven/Gradle版本scripts@Steve我想你的问题正是我想知道的——为什么它们不同。我想我正在把它部署到Docker中。当我分别解压它们(使用CLI访问Docker中的一个)时,我不明白为什么它们是不同的。@OneCricketeer Gradle脚本补充道,谢谢!我现在就开始研究Jib和Spring的Docker支持。非常感谢。嗯,看来我所做的任何改变都没有改变。它是否可能每次都使用相同的映像,而不是使用重新构建的jar并创建新映像?也许我错过了一个命令。我所输入的是:“docker compose up”,ctr-c杀死它,然后“docker compose down”删除它。我应该在那里做些别的事情来创建一个新的图像吗?或者,你可以一次完成这两件事:
docker compose-up--build
,但实际上,可能最好是
docker compose-build&&docker compose-up--force rebuild
,因此,在上一版本仍在运行时重建映像…以尽可能减少脱机时间。感谢您提供的提示!