springboot运维篇--springboot项目打包

1.springboot项目jar方式部署

直接使用idea
在这里插入图片描述
直接使用命令
跳过测试用例快速打包

mvn clean -D skipTests package

将这个应用打成jar包,直接使用java-jar的命令执行

  • 需要注意的是,需要 jar 命令行启动需要依赖 Maven 插件的支持,必须确认在打包的时候 SpringBoot 项目有对应的 Maven 插件:
<!--这个插件,可以将应用打包成一个可执行的jar包-->
 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
            </plugin>
        </plugins>
    </build>

2.jar运行方式临时属性的设置

程序包打好了,可以发布了。但是程序包打好以后,里面的配置都已经是固定的了,比如
配置了服务器的端口是8080。如果8080端口目前正在被占用,我们如何启动springbootl项目
呢?
SpringBoot提供了灵活的配置方式,如果你发现你的项目中有个别属性需要重新配置,
可以使用临时属性的方式快速修改某些配置。方法也特别简单,在启动的时候添加上对应参
数就可以了。

java -jar xxx.jar --server.port=8081 --server.servlet.contextPath=/ssm

总结

  1. 使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
  2. 临时属性添加方式:java -jar 工程名.jar --属性名=值
  3. 多个临时属性之间使用空格分隔
  4. 临时属性必须是当前boot工程支持的属性,否则设置无效

3.springboot项目打包成war包

传统的部署方式:将项目打成war包放入tomcat的webapps目录下面,启动tomcat,
即可访问。

SpringBoot项目改造打包成war的流程

  1. pom.xml配置修改
    <packaging>jar</packaging>
    修改为
    <packaging>war</packaging>
  1. pom文件添加如下依赖
   		 <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
  1. 排除springboot内置的tomcat干扰
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                   
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  1. 如果是war包发布,需要增加SpringBootServletInitializer-子类,并重写其configure方法,或者将main函数所在的类继承SpringBootServletInitializer,并重写configure方法
    当时打包为war时上传到tomcat服务器中访问项目始终报404错就是忽咯了这个步骤!!!
    改造之前
@SpringBootApplication
public class MyAthApplication  implements WebMvcConfigurer {

    public static void main(String[] args) {
        SpringApplication.run(MyAthApplication.class, args);
    }
    }

改造之后

@SpringBootApplication

public class MyAthApplication  extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(MyAthApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        //注意这里指向原先main方法执行的application启动类
      return builder.sources(MyAthApplication.class);
    }
    }

这种改造方式也是官方比较推荐的方法
5. pom文件中不要忘了maven编译插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

  1. 在IDEA中使用mvn clean命令清除旧的包,并使用mvn package生成新的war包
    注意事项
将项目打成war包,部署到外部的tomcat中,这个时候,不能直接访问spring boot项目
中配置文件配置的端口。application.yml中配置的server.port配置的是spring boot内置的
tomcat的端口号,打成war包部署在独立的tomcat上之后,配置的server.port是不起作用
的。一定要注意这一点!!

4.jar包和war包方式对比

  1. SpringBoot项目打包时能打成jar与war包,对比两种打包方式:
    jar更加简单方便,使用java-jar xxx.jar就可以启动。所以打成jar包的最多。
    而war包可以部署到tomcat的webapps中,随Tomcat的启动而启动。具体使用哪种方式,
    应视应用场景而定。
  2. 打jar包时不会把src/main/webapp下的内容打到jar包里(你认为的打到jar包里面,路径是不行的会报404)
    打war包,时会把src/main/webapp下的内容打到war包里
  3. 打成什么文件包进行部署与项目业务有关,就像提供rest服务的项目需要打包成jar文
    件,用命令运行很方便。。。而有大量css、js、html,且需要经常改动的项目,打成war包
    去运行比较方便,因为改动静态资源可以直接覆盖,很快看到改动后的效果,这是jar包不能比的。

项目打成jar包运行,一段时间后,前端要对其中某几个页面样式进行改动,使其更美观,那么改动几个css、html后,需要重新打成一个新的jar包,上传服务器并运行,这种改动频繁时很不友好,文件大时上传服务器很耗时,那么w包就能免去这种烦恼,只要覆盖几个css与html即可)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考网络工程师知识点总结(三)

目录 41、特殊地址 42、子网划分 43、CIDR路由汇聚 44、IP数据报 45、ARP协议 46、ICMP协议 47、IPv6地址表示及类型 48、IPv6地址前缀 49、IPv4过渡IPv6 50、UDP传输层协议 51、TCP传输层协议 52、TCP头部中常见字段的含义&#xff1a; 53、TCP的流量控制和拥塞控…

浏览器插件实现国税网自动登录,以及解决浏览器记住密码会自动填充表单无法修改的问题

公司的做账系统&#xff0c;用户在系统里设置保存了国税网的账号密码以后&#xff0c;下次点击进入国税网&#xff0c;能够直接进入国税系统。 之前的解决方案是pupptteer模拟登录一遍拿到cookie等登录凭证后&#xff0c;保存到数据库&#xff0c;然后插件请求接口拿到cookie&…

Illumination Adaptive Transformer

Abstract. 现实世界中具有挑战性的照明条件&#xff08;低光、曝光不足和曝光过度&#xff09;不仅会产生令人不快的视觉外观&#xff0c;还会影响计算机视觉任务。现有的光自适应方法通常单独处理每种情况。更重要的是&#xff0c;它们中的大多数经常在 RAW 图像上运行或过度…

Linux进程地址空间

文章目录 1.程序地址空间回顾2.进程地址空间 1.程序地址空间回顾 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局图 可是我们对他并不理解&#xff01; 来段代码感受一下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> in…

麒麟KYLINOS中使用备份还原系统

原文链接&#xff1a;麒麟KYLINOS中使用备份还原系统 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟KYLINOS备份还原的第二篇文章&#xff0c;使用备份还原系统&#xff0c;主要通过麒麟KYLINOS系统自带的备份还原工具&#xff0c;将之前备份的系统文件进行还原&am…

SecureCRT 超时自动断开连接问题解决方法

很多人在使用SecureCRT时&#xff0c;会遇到这种情况&#xff1a;SecureCRT 超时自动断开连接&#xff0c;这种情况会给工作带来很多不便&#xff0c; 比如在做数据库还原操作时&#xff0c;连接突然断掉了&#xff0c;会导致还原操作失败&#xff0c;很是令人困扰。 那么我们…

儿童HPV感染有哪些症状?皮肤性病科谭巍主任讲述五大要点

HPV&#xff0c;人乳头瘤病毒&#xff0c;是一种常见的感染性强的病毒&#xff0c;相比成人儿童也会感染HPV。家长及时了解儿童感染HPV的症状对于早期发现和治疗至关重要。为了帮助家长们更好预防儿童HPV感染&#xff0c;今日特邀劲松中西医医院皮肤性病科主任谭巍详细介绍儿童…

Rust语言代码示例

安装Rust语言&#xff0c;然后创建一个新的Rust项目。接下来&#xff0c;你需要安装一个名为"requests"的Rust包&#xff0c;这个包可以帮助你发送请求。然后&#xff0c;你需要安装一个名为"rust-crawler"的Rust包&#xff0c;这个包可以帮助你编写爬虫程…

电热毯电热床上用品上架亚马逊美国站UL964测试标准要求

美国是一个对安全要求非常严格的国家&#xff0c;美国本土的所有电子产品生产企业早在很多年前就要求有相关检测。而随着亚马逊在全球商业的战略地位不断提高&#xff0c;境外的电子设备通过亚马逊不断涌入美国市场。“为保证消费者得安全&#xff0c;亚马逊始终强调带电得产品…

从0到0.01入门React | 002.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【python自动化】Playwright基础教程(十)元素拖拽元素坐标获取网页源码元素内文本

【python自动化】Playwright基础教程&#xff08;十&#xff09;元素拖拽&元素坐标&获取网页源码&元素内文本 本文目录 文章目录 【python自动化】Playwright基础教程&#xff08;十&#xff09;元素拖拽&元素坐标&获取网页源码&元素内文本playwright…

开发vue3 UI组件库,并且发布到NPM

目录 1.创建vue3工程 2.创建package文件 3.编写组件&#xff0c;并且导出 4.编写package.json 5.npm账号注册登录并发布 6.从npm安装使用 7.注意事项 1.创建vue3工程 &#xff08;1&#xff09;初始化Vue项目 cnpm create vite &#xff08;2&#xff09;进入文件夹…

LeetCode(10)跳跃游戏 II【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 45. 跳跃游戏 II 1.题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nu…

桥接模式(结构型)

目录 一、前言 二、桥接模式 三、总结 一、前言 桥接模式&#xff08;Bridge Pattern&#xff09;是一种常用的设计模式&#xff0c;它可以将抽象部分与它的实现部分分离&#xff0c;使它们可以独立地变化。桥接模式通常用于需要在多个维度上扩展一个类的情况&#xff0c;或…

牛客网上错题总结及重写(C语言)(2)

每日一言 空不是无&#xff0c;空是一种存在&#xff0c;你得用空这种存在填满自己。 --三体 题目BC43 我当时为什么把它收藏起来呢?? 正确代码 #include <stdio.h> int main() {int n 0;scanf("%d",&n);printf("%d",n/12*42);return 0; }题…

分发饼干(贪心算法+图解)

455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最…

AI:72-基于深度学习的火灾检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

C++网络编程库编写自动爬虫程序

首先&#xff0c;我们需要使用 C 的网络编程库来编写这个爬虫程序。以下是一个简单的示例&#xff1a; #include <iostream> #include <string> #include <curl/curl.h> #include <openssl/ssl.h>const char* proxy_host "duoip"; const in…

腾讯云服务器优惠服务器和优惠折扣,腾讯云用户优惠

腾讯云服务器提供了丰富多样的云服务产品&#xff0c;满足不同用户的需求。其中&#xff0c;推荐的产品包括轻量应用服务器和云服务器CVM&#xff0c;分别适用于不同规模和需求的用户。这些产品提供了各种配置和价格的服务器选项&#xff0c;涵盖了不同的计算需求。 实惠的价格…

8.5 矢量图层点要素分级(Graduated)渲染使用

文章目录 前言分级&#xff08;Graduated&#xff09;渲染QGis代码实现 总结 前言 前面介绍了矢量-点要素-单一符号以及矢量-点要素-分类符号的用法本章介绍分级&#xff08;Graduated&#xff09;渲染说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 分级…