Spring Boot使用docker为静态资源返回404

时间:2018-03-17 00:06:05

标签: java angular docker spring-boot

我使用带有泊坞窗的弹簧靴。我在spring boot项目中有静态资源,当我用mvn spring运行时:boot run一切正常,资源可用。但是当我使用命令

从它创建docker图像时
FROM openjdk:8-jdk-alpine
ADD /target/example-*.jar /
EXPOSE 8080
ENTRYPOINT java -jar example-*.jar

然后我的静态资源不能被localhost:8080使用。应用程序已成功启动(日志中没有错误。)

1 个答案:

答案 0 :(得分:1)

jar文件中的资源可能很棘手。

以下是解决问题的一些提示:

  1. 两种方法的404的网址是否相同?

  2. 检查docker中使用的jar文件,你的资源是否存在?

  3. 尝试运行没有docker的jar文件,我怀疑你的资源 缺失。如果缺少,你需要让maven将它们推送到jar,你可能没有遵循springboot约定来获取资源。

  4. 当我需要在父应用程序中包含一个完整的springboot应用程序作为依赖项时,这对我有用:

    位置

    • 资源=>的src /主/资源/ META-INF /资源/静态
    • 查看模板=>的src /主/资源/ WEB-INF /模板

    如果是MVC,请确保映射资源:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/static/**").addResourceLocations("classpath:META-INF/resources/static/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:META-INF/resources/webjars/");
        registry.addResourceHandler("/**").addResourceLocations("classpath:META-INF/");
    }
    

    还需要对我的gradle构建进行一些更改:

    buildscript {
        ext {
            springBootVersion = '2.0.0.M7'
        }
        repositories {
            mavenCentral()
            maven { url "https://repo.spring.io/snapshot" }
            maven { url "https://repo.spring.io/milestone" }
            maven { url 'http://repo.spring.io/plugins-release' }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath 'io.spring.gradle:propdeps-plugin:0.0.9.RELEASE'
            classpath 'org.springframework:springloaded:1.2.6.RELEASE'
        }
    }
    
    ext {
        springBootVersion = '2.0.0.M7'
    }
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'groovy'
    //apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'propdeps'
    apply plugin: 'propdeps-idea'
    
    group = 'com.example.app'
    
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    
    configurations {
        includeInJar
    }
    
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.springframework.boot:spring-boot-starter-groovy-templates')
        compile('org.codehaus.groovy:groovy')
    
        includeInJar("org.webjars:bootstrap:4.0.0")
        includeInJar("org.webjars:jquery:3.3.1")
        configurations.compile.extendsFrom(configurations.includeInJar)
    }
    
    idea {
        module {
            inheritOutputDirs = true
        }
    }
    
    jar {
        from configurations.includeInJar.collect { it.isDirectory() ? it : zipTree(it) }
    }
    
    compileJava.dependsOn(processResources)