在 IntelliJ IDEA 中远程部署 Java 程序

news2024/11/17 9:42:41

文章目录

  • 远程调试与远程部署的区别
  • 远程部署的步骤
  • 完整源代码

笔者的运行环境:

  • 客户端:

    • 部署成功过的客户端的 Java 版本:

      • Java 17.0.7
    • 部署成功过的客户端的 Java 程序:

      • Spring Boot 3.1.0
    • 部署成功过的客户端的 IntelliJ IDEA 版本:

      • IntelliJ IDEA 2022.3.1 (Ultimate Edition)
    • 部署成功过的客户端的 Windows:

      • Windows 10 教育版
  • 服务端:

    • 部署成功过的服务端的 Java 版本:

      • Java 17.0.7
    • 部署成功过的服务端的 Linux:

      • RedHat Enterprise Linux 9 x86_64

远程调试与远程部署的区别

  在 IntelliJ IDEA 中进行远程调试与远程部署是不同的。

  远程调试指的是事先以其它方法将 Java 应用打包并放在远程服务器中,然后以调试模式运行该 Java 应用,最后使用本地的 IntelliJ IDEA 进行远程连接该应用。

  远程部署指的是直接使用本地的 IntelliJ IDEA 将本地的 Java 应用打包、部署到远程服务器,并远程运行该应用。

  可以看出,远程部署要比远程调试方便很多。

  关于在 IntelliJ IDEA 中远程调试 Java 程序,可见笔者的另一篇博客:

  在 IntelliJ IDEA 中远程调试 Java 程序:
https://blog.csdn.net/wangpaiblog/article/details/120376176

远程部署的步骤

  1. 相当于远程调试,远程部署仅仅提供了自动打包、部署、运行的功能。远程连接的原理其实是一样的。这里以 Spring Boot 为例,演示一下如何将 Spring Boot 项目远程部署到服务器。

    首先,读者需要知道如何查看远程服务器的 IP。关于这方面的内容,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

  2. 为了方便说明,笔者在 Spring 官网网站上下载了一个 Spring Boot 的 Demo 项目。

    官方下载网址:https://start.spring.io/

    在这里插入图片描述

  3. 现在开始简单改造一个这个项目。编写一个简单的控制器等等。这些内容过于简单,这里不作详细介绍。

    • Spring Boot 配置
    server:
      port: 12345
    spring:
      application:
        name: remote_deployment
    management:
      endpoints:
        web:
          exposure:
            # 公开所有端点
            include: '*'
    
    • 控制器
    /**
     * @since 2023-7-10
     */
    @Controller
    @RequestMapping("/remote_deployment")
    public class RemoteDeploymentController {
        /**
         * @since 2023-7-10
         */
        @GetMapping("/test")
        @ResponseBody
        public String remoteDeploymentTest(String para) {
            System.out.println(para);
            return para;
        }
    }
    
  4. 使用 IntelliJ IDEA 打开该项目,IntelliJ IDEA 应该就会自动生成它的一些配置。如下图操作,填入远程服务器的一些配置信息。

    在这里插入图片描述

  5. 这里选择 SSH 协议来连接。


    【注意】

    • SSH 默认的端口号是 22。此端口号指的是与本地 IntelliJ IDEA 远程连接的端口号,不是此 Spring Boot 应用的端口号。
    • 下面显示的路径是这个 Spring Boot 项目的所有依赖的上传路径,不是此 Spring Boot 项目的上传路径。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  6. 上面的配置完成之后,会在配置中显示出来。不过要注意,下面显示的路径是此 Spring Boot 项目的上传路径,而上面配置的路径是这个 Spring Boot 项目的所有依赖的上传路径。

    在这里插入图片描述

  7. 不过,配置完成不要先急着运行。很多 Linux 系统上面都有防火墙,默认会阻止所有的远程访问。对于笔者的 RedHat Enterprise Linux 9 x86_64,默认的防火墙为 firewalld,而不是 iptables。(很多早期的 Linux,使用的防火墙是 iptables,但 RedHat 从 RHEL 7 开始就用 firewalld 取代了 iptables。)

    • 一个偷懒的方法就是,永久地关闭防火墙。关闭的方法如下:

      systemctl stop firewalld

      systemctl mask firewalld

      firewall-cmd --reload

    • 另一个方法是,在防火墙中永久开放上述 Spring Boot 应用的端口号。开放的方法如下:

      firewall-cmd --zone=public --add-port=5005/tcp --permanent

      firewall-cmd --reload

      单独开放完端口 5005 之后,可以输入以下命令查看是否生效:

      firewall-cmd --zone=public --query-port=Spring Boot 应用的端口号/tcp

      实际上,也可以输入以下命令查看所有开放的端口:

      firewall-cmd --zone=public --list-ports

  8. 现在,就可以尝试运行这个 Spring Boot 项目了。运行时,IntelliJ IDEA 会在上面填写的服务器的部署目录下上传 Spring Boot 的所有依赖 JAR 包。

    在这里插入图片描述

    在这里插入图片描述

  9. 运行之后,需要对接口进行测试。可以选择用 Postman 来测试这个 Spring Boot 应用。

    在这里插入图片描述

    在这里插入图片描述

  10. 可以看出,上面的测试很成功。但是,IntelliJ IDEA 远程部署的能力还不只如此。它还支持直接打断点和以调试的方式运行此应用。

    以这个方式运行实际上和前面介绍的远程调试没有区别,但这比远程调试方便太多。

    在这里插入图片描述

完整源代码

  已上传至 GitHub 中,可免费下载:https://github.com/wangpaiblog/remote_deployment

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文浅尝 | 思维树:使用大语言模型反复思考解决问题

笔记整理:许泽众,浙江大学博士,研究方向为知识图谱上的神经符号推理 链接:https://arxiv.org/abs/2305.10601 1. 动机 语言模型是一种强大的工具,可以用于各种需要数学、符号、常识或知识推理的任务。然而,…

初识MyBatis(一)基于配置文件下的一些增删改查

MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架 创建好m…

手机+卫星的科技狂想

最近硬件圈最火热的话题之一,应该就是突然上线、遥遥领先的华为Mate 60 Pro了。 其中,CPU和类5G网速是怎么实现的,是大家特别关注的问题。相比之下,卫星通话这个功能,讨论度就略低一些(没有说不火的意思&am…

62、SpringBoot 使用RestTemplate 整合第三方 RESTful 服务

这节的要点: 就是弄两个项目 , 从 端口9090 这个项目,通过 restTemplate, 去访问 端口8080 的项目,并获取8080项目的数据。 ★ RESTful服务包含两方面的含义 1. 自己的应用要暴露一些功能供别人来调用。此时我们是服…

postgresql-DML

DML 语句 创建示例表插入数据插入单行数据插入多行数据复制数据返回插入的数据 更新数据单表更新跨表更新返回更新后的数据 删除数据单表删除跨表删除返回被删除的数据 合并数据MERGE 语句INSERT ON CONFLICT DML 语句与 CTE 创建示例表 CREATE TABLE dept (department_id int…

面向Ai设计的Mojo编程语言支持下载,当前只有Linux系统版本

据了解,Mojo是Modular AI公司开发的专门面向AI设计的编程语言,号称比Python快68000倍。 Mojo现已开放本地下载运行,除了编译器之外,Mojo SDK还包括一整套开发者和IDE工具,并用来构建和迭代 Mojo应用。 公司方面表示&…

leetcode 589. N 叉树的前序遍历(java)

N 叉树的前序遍历 题目描述前序遍历后序遍历 题目描述 难度 - 简单 LC - 589.N叉树的前序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例…

RK3399平台开发系列讲解(内核调试篇)USB摄像头快速测试

🚀返回专栏总目录 文章目录 一、检测设备二、安装必要的库三、 mjpeg-stream 安装四、实时预览沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇介绍如何快速测试 USB 摄像头。 一、检测设备 将 USB 摄像头插上,查看是否找到设备,输入指令:v4l2-ctl --list-d…

vuex中actions异步调用以及读取值

项目场景: 提示:这里简述项目相关背景: 将根据segmentId查出来的合同信息托管到vuex中,让每个人都可以获取到合同信息 描述以及问题点 1:调用vuex异步函数的语法是 this.$store.dispatch(actions方法名,值) 2&#…

JUC并发编程--------线程安全篇

目录 什么是线程安全性问题? 如何实现线程安全? 1、线程封闭 2、无状态的类 3、让类不可变 4、加锁和CAS 并发环境下的线程安全问题有哪些? 1、死锁 2、活锁 3、线程饥饿 什么是线程安全性问题? 我们可以这么理解&#…

计算机竞赛 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习机器视觉的…

如何设计一个复杂的业务系统

一、设计要干啥 作为一个企业级应用架构,自然会把专注点转移到业务应用功能性设计本身上来。现在来说对于一个复杂业务架构进行设计,我们要想做到又快又好,无非是两种情况:一是架构师本身对业务理解很深、能力超强、炉火纯青&…

QT QMdiArea控件 使用详解

本文详细的介绍了QMdiArea控件的各种操作,例如:新建界面、源代码、添加界面、移除一个子窗口、设置活动子窗口、子窗口级联排列、子窗口平铺排列、关闭当前子窗口、关闭当前子窗口、返回当前子窗口、返回当前子窗口、返回子窗口列表、信号槽、单击信号、…

使用python-docx对doc文档修改页眉时,遇到的一点小问题

之前在百度和google搜到的也修改页眉的方式,代码如下 import docx # 打开 Word 文档 doc docx.Document(sample.docx) # 遍历每个节 for section in doc.sections: # 获取节的页眉 header section.header # 获取页眉中的段落 p header.paragraphs[0] # 替换段落…

冒泡排序、选择排序、插入排序、希尔排序

冒泡排序 基本思想 代码实现 # 冒泡排序 def bubble_sort(arr):length len(arr) - 1for i in range(length):flag Truefor j in range(length - i):if arr[j] > arr[j 1]:temp arr[j]arr[j] arr[j 1]arr[j 1] tempflag Falseprint(f第{i 1}趟的排序结果为&#…

基于51单片机+DS1302时钟模块+4位数码管显示

一、DS1302时钟模块简介 二、绘制Proteus 仿真电路图 三、编写51单片机代码 #include "DS1302.h"// 位定义 sbit DS1302_DATA P3^3; sbit SCLK P3^2; sbit RST P3^1;// 向DS1302写一个字节 void DS1302_Write_Byte(unsigned char addrOrData) {unsigned char i;f…

RocketMQ的架构及概念

RocketMQ就是一个消息中间键用于实现异步传输与解耦 那什么是消息中间键呢? 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展…

CSP 201312-1 出现次数最多的数

答题 用两个map&#xff0c;一个map记录每个数出现的次数并降序排序&#xff0c;另一个map将次数作为键&#xff0c;数本身作为值&#xff0c;降序排序&#xff0c;搞定 #include<iostream> #include<map> using namespace std; int main(){map<int,int,great…

arm栈推导

按照栈生长方向分&#xff1a;可以分为递增栈&#xff08;向高地址生长&#xff09;&#xff1b;递减栈&#xff08;向低地址生长&#xff09; 按照sp执行位置来分&#xff1a;满栈&#xff08;sp指向栈顶元素的位置&#xff09;&#xff1b;空栈&#xff08;sp指向即将入栈的…

ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析

作者&#xff1a;LUCA WINTERGERST 在本博客中&#xff0c;我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据&#xff0c;我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中&#xff0c;我们构建…