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
#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
,因此,在上一版本仍在运行时重建映像…以尽可能减少脱机时间。感谢您提供的提示!