• SpringBoot 打包与运行


    一、SpringBoot 程序打包

    1、在Springboot工程 pom文件中,引入 spring-boot-maven-plugin 插件。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、SpringBoot程序是基于Maven创建的,在Maven中提供有打包的指令,叫做package,通过Idea Maven插件功能package,进行打包。或是通过Terminal的命令:mvn package
    在这里插入图片描述

    会产生一个与工程名类似的jar文件,其名称是由模块名+版本号+.jar组成的,如:springboot_ssmp_demo-0.0.1-SNAPSHOT.jar

    在这里插入图片描述
    打包后在项目目录下,会产生target目录
    在这里插入图片描述
    在这里插入图片描述
    3、随后,在target当前目录中,进入命令行,java -jar 工程包名.jar ,程序正常运行
    在这里插入图片描述

    二、SpringBoot程序打包失败

    若未在Springboot工程 pom文件中,引入 spring-boot-maven-plugin 插件,则打包后,程序执行会报以下错:

    springboot_ssmp_demo-0.0.1-SNAPSHOT.jar中没有主清单属性
    
    • 1

    在这里插入图片描述
    对比正常打包,与缺少spring-boot-maven-plugin 插件的情况下的打包。会发现两者 jar的大小差别巨大。这是为什么呢?
    在这里插入图片描述

    1、区别一(lib jar):

    对比打开两者的jar,会发现两者真正的区别是BOOT-INF,而 BOOT-INF 下主要便是当前工程运行需要使用的jar包。SpringBoot程序为了让自己打包生成的程序可以独立运行,不仅将项目中自己开发的内容进行了打包,还把当前工程运行需要使用的jar包全部打包进来了。

    在这里插入图片描述

    2、区别二(MANIFEST.MF):

    两个程序包的最外层目录,查看名称相同的文件夹META-INF下都有一个叫做MANIFEST.MF的文件。

    • 小容量文件的MANIFEST.MF
    Manifest-Version: 1.0
    Implementation-Title: springboot_ssmp_demo
    Implementation-Version: 0.0.1-SNAPSHOT
    Build-Jdk-Spec: 1.8
    Created-By: Maven JAR Plugin 3.2.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 大容量文件的MANIFEST.MF
    Manifest-Version: 1.0
    Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
    Implementation-Title: springboot_ssmp_demo
    Implementation-Version: 0.0.1-SNAPSHOT
    Spring-Boot-Layers-Index: BOOT-INF/layers.idx
    Start-Class: com.ty.SpringbootSsmpDemoApplication
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Build-Jdk-Spec: 1.8
    Spring-Boot-Version: 2.7.16
    Created-By: Maven JAR Plugin 3.2.2
    Main-Class: org.springframework.boot.loader.JarLauncher
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Start-Class: com.ty.SpringbootSsmpDemoApplication:是我们 springboot 工程的启动类。

    Main-Class: org.springframework.boot.loader.JarLauncher: org.springframework.boot.loader.arLauncher类内部要查找Start-Class属性中配置的类,并执行对应的类,对应的就是我们的启动类。

    综合以上,可以了解到:

    1. SpringBoot程序添加配置后会打出一个特殊的包,包含Spring框架部分功能,原始工程内容,原始工程依赖的jar包
    2. 首先读取MANIFEST.MF文件中的Main-Class属性,用来标记执行java -jar命令后运行的类
    3. JarLauncher类执行时会找到Start-Class属性,也就是启动类类名
    4. 运行启动类时会运行当前工程的内容
    5. 运行当前工程时会使用依赖的jar包,从lib目录中查找

    spring-boot-maven-plugin插件用于将当前程序打包成一个可以独立运行的程序包

    二、SpringBoot 运行配置

    1、临时属性配置

    SpringBoot提供了灵活的配置方式,在启动的时候添加上对应参数就可,多个临时属性之间使用空格分隔,临时属性必须是当前boot工程支持的属性,否则设置无效。

    常用的如:

    设置端口:java –jar springboot_ssmp_demo-0.0.1-SNAPSHOT.jar –-server.port=80

    设置日志级别:java –jar springboot_ssmp_demo-0.0.1-SNAPSHOT.jar --logging.level.root=debug

    指定应用程序的活动配置文件:java –jar springboot_ssmp_demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=

    设置外部配置文件名称:java –jar springboot_ssmp_demo-0.0.1-SNAPSHOT.jar --spring.config.name=

    设置外部配置文件位置:java –jar springboot_ssmp_demo-0.0.1-SNAPSHOT.jar --spring.config.location=

    除了这些常用的参数,还有其他特定于应用程序的参数,可以自定义和配置。

    2、属性加载优先级

    加载优先:临时属性 > 配置文件

    官方文档中,有说明配置读取的优先顺序。https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

    在这里插入图片描述

  • 相关阅读:
    空间滤波-反谐波平均滤波器
    肖sir__linux讲解vim命令(3.1)
    Spring配置 + xml的IOC控制反转 + Setter注入
    基于springboot+vue的网咖网吧管理系统 elementui
    Linux man手册使用方法小计
    02 Infini-gateway部署实战+ES热备测试
    Mybatis:Mybatis的各种查询功能(5)
    卡塔尔世界杯在哪里可以看直播?
    SCHNOKA施努卡:表面缺陷检测大致经历了三个阶段
    Ubuntu 使用 nginx 搭建 https 文件服务器
  • 原文地址:https://blog.csdn.net/weixin_41422086/article/details/133948652