将 java spring-boot app *.jar 与根文件夹中的其他文件一起部署到 heroku

Posted

技术标签:

【中文标题】将 java spring-boot app *.jar 与根文件夹中的其他文件一起部署到 heroku【英文标题】:Deploy java spring-boot app *.jar to heroku with other files in root folder 【发布时间】:2020-03-14 05:21:33 【问题描述】:

我有一个 qsysprereg2-1.0.jar 的 Spring Boot 应用程序。我将已编译的 jar 文件 + Procfile + 文件夹“config”推入 heroku git,其中我的应用程序文件为“config/config.properties”。只是一些属性。 在 Gradle 中我只有:

apply plugin: 'java'
task stage() 
    println("Go stage...")
  

全部编译部署成功。

结果我有错误:

java.io.FileNotFoundException: config/config.properties (No such file or directory)

当然,因为:

Running bash on ⬢ qprereg... up, run.9546 (Free)
~ $ ls
Procfile  qsysprereg2-1.0.jar  system.properties

git 中没有“config”文件夹。但是“config/config.properties”已经被推入了git。

如何添加文件夹以部署工件?

【问题讨论】:

***.com/questions/24724383/… 也许您可以检查您在构建(工件)之后创建的内部 jar 文件。相关文件是否存在。如果您的工件中没有文件,请尝试使用您的 maven 或 gradle 配置将相关资源添加到您的类路径中。 没有。忘记资源 【参考方案1】:

抱歉,我没有找到好的解决方案。我做了一些技巧。我将所有配置文件作为资源放在 jar 中。在启动应用程序期间,我正在检查 dick 上 jar 之外的文件,然后从资源处理到 dist。新文件毫无问题地保存在磁盘上。代码:

   public static void main(String[] args) 
        try 
            prepareConfig();
         catch (IOException ex) 
            log.error("Config prepare fail.", ex);
            log.throwing(ex);
            throw new RuntimeException(ex);
        
        SpringApplication.run(Application.class, args);
    


    private static void prepareConfig() throws IOException 
        File dir = new File("config");
        if (!dir.exists() || !dir.isDirectory()) 
            log.info("Create config directory");
            Files.createDirectory(dir.toPath());
        
        makeReady("config/config1.properties");
        makeReady("config/config2.properties");
        makeReady("config/config3.properties");
        makeReady("config/configN.properties");
    

    private static void makeReady(String fileName) throws IOException 
        File file = new File(fileName);
        if (!file.exists()) 
            log.info("Create config file ''", file.getName());
            try (final InputStream stream = Application.class.getResourceAsStream("/" + fileName)) 
                Files.copy(stream, file.toPath());
            
        
    

【讨论】:

以上是关于将 java spring-boot app *.jar 与根文件夹中的其他文件一起部署到 heroku的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 默认日志位置

清单错误将 spring-boot 启动为 java 应用程序

spring-boot4

将已有的spring app迁移到spring-boot,手动配置spring-boot?

spring-boot 2.1.0 mongo - CodecConfigurationException:找不到类 java.time.Year 的编解码器

使用 spring-boot 的 Maven 模块