首页 > 其他分享 >SpringBoot 的 jar 包及应用配置文件加载

SpringBoot 的 jar 包及应用配置文件加载

时间:2022-09-30 16:55:49浏览次数:92  
标签:配置 java SpringBoot 配置文件 application 包及 jar yaml

SpringBoot 打包

如果你手动使用 jar 命令打过 jar 包(如下图)
jar 包

那么一定知道该 jar 包与使用 spring-boot-maven-plugin 插件打出来的 jar 包(如下图)不一样。
SpringBoot jar 包

SpringBoot 运行 jar 包

执行 java -jar xx.jar 命令时,会去解析 MATE-INF 文件夹中的 MANIFEST.MF 清单文件,然后找到 Main-class ,反射运行其中的 main 方法。这个是最根本的原因。

spring-boot-maven-plugin 插件打包后的 jar 包结构有所变动,新增 org loader 代码目录和 BOOT-INF 目录,META-INF 目录不变,但是其中的 MANIFEST.MF 发生改变,其中新增 Start-Class 表示真正的启动类,而原本的 Main-Class 则指向 JarLauncher, JarLauncher 启动时会去注册协议,创建 ClassLoader,加载并反射运行 Start-Class 中的 main 方法,来启动程序。重写 Jar 协议是在 SpringBoot loader 源码中的 JarFile 中进行的,同时重新实现 URLStreamHandler 来解决嵌套 Jar 的问题。

配置文件读取

未使用配置中心

java -jar xx.jar 启动的时候会找指定的 profile,开发和测试环境部署到 K8s 后没有指定 ConfigMap,使用的是 jar 包内的 application.yamlapplication-dev.yaml

生产环境基础的配置使用的也是 jar 包里的 application.yaml,但是配置了 ConfigMap,其内容就是 application-test.yaml,所以加在这个 yaml 里的配置需要写到发布文档中,在 application.yaml 变更的配置不需要写到发布文档中。

使用配置中心

如果微服务已经接入 Nacos,用的是 SpringCloud 的 bootstrap.yaml(指定使用哪个环境以及服务名称),具体的配置已经放到 Nacos 中,如 xx-service-dev.yaml(包含 application.yamlapplication-test.yaml 的内容),变更的配置都需要写到发布文档中。
Nacos

无论哪种方式,为了安全,账号密码等都需要配置在 ConfigMap 中。

参考资料

【Java 基础】Jar 包结构结构分析和操作详解
终于搞懂了 SpringBoot jar 包启动的原理
为什么 SpringBoot 可以直接运行 jar 包?
详解 java -jar 命令及 SpringBoot 通过 java -jav 启动的过程

标签:配置,java,SpringBoot,配置文件,application,包及,jar,yaml
From: https://www.cnblogs.com/ageovb/p/16745435.html

相关文章

  • 如何修改redis配置文件(添加密码验证)
    操作步骤:1:找到redis的配置文件,2:停止redis服务,3:修改配置文件,4启动服务1,找到redis的配置文件首先直接试试whereisredis.conf 看能不能返回路径试过2个不同......
  • 使用阿里云 SpringBoot 仓库初始化项目
    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=5&vd_source=cf8900ba33d057d422c588abe5d5290d使用IDEA新建项目选择SpringInitizlizr选择web工......
  • 使用阿里云 SpringBoot 仓库初始化项目
    本文基于:https://www.bilibili.com/video/BV15b4y1a7yG?p=5&vd_source=cf8900ba33d057d422c588abe5d5290d使用IDEA新建项目选择SpringInitizlizr选择web工......
  • Springboot 之 HandlerMethodArgumentResolver 运用
    介绍在项目中,如果需要在Header中获取请求头,一般使用RequestHeader注解。代码案例如下:@RequestMapping("/normalHeaders") publicMap<String,Object>normalHeader......
  • Springboot 之 JDBC 多数据源实现
    简介Springboot中使用JdbcTemplate实现多数据源比较简单。查看JdbcTemplate源码;可以发现JdbcTemplate提供了传入DataSource的方式构建不同的JdbcTemplate实例......
  • 学习笔记:springBoot整合七牛云
    在项目开发的过程中,文件存储是一大问题,本人遇到的情况是服务器的操作系统从原来的Linux变成了windowServer,但是,自己写的文件上传具有SFTP功能,服务器对于一些路径出现了乱......
  • SpringBoot集成Dubbo案例
    SpringBoot集成Dubbo:Case​​1、什么是Duubo?​​​​2、概念架构​​​​2.1提供者​​​​2.2消费者​​​​2.3注册中心​​​​3、SpringBoot集成Dubbo步骤​​​​:o......
  • SpringBoot文件上传深入浅出
    前言文件上传原理浏览器发起HTTPPOST请求,指定请求头:Content-Type:multipart/form-dataContent-Type:指定了文件类型服务端解析请求内容,执行文件保存处理,返回成功消息。不......
  • Git 配置文件 浅析
    config文件位置仓库级配置文件:在所创建仓库下./.git/config针对该仓库。在进入仓库的情况下,你可以传递--local选项让Git强制读写此文件,默认情况下用的就是它。......
  • SpringBoot之Mybatis开启SQL记录和Pagehelper
    配置mybatismybatis:#mapper路径mapper-locations:classpath:mapper/*.xmlconfiguration:#日志输出log-impl:org.apache.ibatis.logging.stdout.StdO......