IDEA远程部署调试Java应用程序

基本概述

在工作中,我们可能会遇到本地无法连接开发环境数据库等资源,但又想在本地直接开发、调试。

这时候就能通过IDEARun on ...功能实现。

其原理是通过SSH连上远程服务器,部署应用到远程服务器后,本地连接上远程服务器部署的应用。

PS:这种操作方式比在远程服务器上搭建代理服务,安全性要高的多得多。

准备工作

远程服务器准备

安装JDK

[root@switch-sz-service-test ~]# yum install -y java-1.8.0-openjdk-devel.x86_64

# 可以看到Java的版本是1.8
[root@switch-sz-service-test ~]# java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

配置JAVA_HOME

# 可以看到JAVA_HOME是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64
[root@switch-sz-service-test ~]# find / -name java
/etc/pki/ca-trust/extracted/java
/etc/pki/java
/etc/alternatives/java
/etc/java
/var/lib/alternatives/java
/usr/bin/java
/usr/lib/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64/bin/java
/usr/lib/jvm/java
/usr/share/bash-completion/completions/java
/usr/share/java
[root@switch-sz-service-test ~]# ll /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64
total 180
-rw-r--r-- 1 root root 1522 Jul 22 01:18 ASSEMBLY_EXCEPTION
drwxr-xr-x 2 root root 4096 Oct 4 00:29 bin
drwxr-xr-x 3 root root 132 Oct 4 00:29 include
drwxr-xr-x 4 root root 95 Oct 4 00:29 jre
drwxr-xr-x 3 root root 144 Oct 4 00:29 lib
-rw-r--r-- 1 root root 19274 Jul 22 01:18 LICENSE
drwxr-xr-x 2 root root 204 Oct 4 00:29 tapset
-rw-r--r-- 1 root root 155003 Jul 22 01:18 THIRD_PARTY_README # 配置JAVA_HOME
[root@switch-sz-service-test ~]# vim /etc/profile # 在最后面添加上如下语句
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64
export JAVA_HOME # 可以看到已经配置好了JAVA_HOME了
[root@switch-sz-service-test ~]# source /etc/profile
[root@switch-sz-service-test ~]# echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64
[root@switch-sz-service-test ~]#

项目准备

创建一个SpringBoot项目

使用Spring Initializr创建一个SpringBoot项目,参考项目:springboot-remote-deploy-demo

创建一个Controller类

package com.switchvov.springboot.remote.deploy.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author switch
* @since 2021/10/3
*/
@RestController
@RequestMapping("/hello")
@Slf4j
public class HelloController {
@GetMapping("/{name}")
public String hello(@PathVariable("name") String name) {
String hello = "hello " + name;
log.info(hello);
return hello;
}
}

启动应用,验证结果

package com.switchvov.springboot.remote.deploy.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class SpringbootRemoteDeployDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRemoteDeployDemoApplication.class, args);
}
}
$ curl http://127.0.0.1:8080/hello/world
hello world%

PS:从如上步骤,可以看到已经成功在本地执行了,接下来就是要让他远程部署到服务器上,并且可以调试。

应用配置

修改应用配置

右键点击SpringbootRemoteDeployDemoApplication类旁边的启动符,弹出选项框,点击Modify Run Configuration...选项,弹出界面如下图

创建远程服务器

左键点击Run on选项框,弹出选项框,点击SSH...选项,弹出界面如下图

输入服务器地址Host,用户名Username,点击Next按钮,跳转界面如下图

输入密码Password(或者使用密钥),点击Next跳转界面如下图

这一步,主要是验证是否能登录上服务器,以及服务器上基本环境是否安装好,点击Next跳转界面如下图

Successfully connected to root@120.78.218.44:22

> pwd
/root
Command finished with exit code 0 Checking rsync connection...
/usr/bin/rsync -n -e "ssh -p 22 " root@120.78.218.44: root@120.78.218.44's password: dr-xr-x--- 190 2021/10/04 00:56:11 . Process finished with exit code 0 Starting introspection for Java...
> echo ${SHELL}
/bin/bash
Command finished with exit code 0
> echo ${JAVA_HOME}
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el8_4.x86_64
Command finished with exit code 0
> java -version
openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)
Command finished with exit code 0 Introspection completed

可以看到项目部署路径Project path on target,JDK Home路径JDK home path以及JDK版本JDK version都已经设置好了,点击Finish返回之前的界面

PS:可以自己修改部署路径之类的配置

保存应用配置

可以看到远程服务器已经配置好了,点击OK按钮配置完成

验证结果

本地验证

点击SpringbootRemoteDeployDemoApplication的启动按钮,在启动日志中可以看到已经部署到服务器上,同时也能看到本地端口63006映射到了服务器的8080端口。

$ curl http://localhost:63006/hello/world
hello world%

在本地访问映射到服务器的端口63006,也能正常访问。

PS:可以启动,当然也可以进行调试。

服务器验证

在远程服务器上,可以看到springboot-remote-deploy-demo已经被部署在/root路径下了,且访问http://127.0.0.1:8080/hello/world会正确返回hello world

[root@switch-sz-service-test ~]# pwd
/root
[root@switch-sz-service-test ~]# ll
total 4
drwxr-xr-x 38 root root 4096 Oct 4 01:08 springboot-remote-deploy-demo
[root@switch-sz-service-test ~]# curl http://127.0.0.1:8080/hello/world
hello world[root@switch-sz-service-test ~]#

参考文档

分享并记录所学所见

IDEA远程部署调试Java应用程序的更多相关文章

  1. 使用 Eclipse 远程调试 Java 应用程序

    Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...

  2. 远程debug调试java代码

    远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试.生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试. 整体过程是通过修改远程服务JAV ...

  3. 使用pycharm进行远程开发部署调试设置 与 远程部署调试是否必须使用远程主机的解释器?

    远程开发部署调试目的: 配置pycharm远程部署调试主要用于本地代码与远程服务器上的代码进行同步,使得本地代码经过修改后,可以很容易的同步到远程服务器上.同时设置pycharm的解释器为远程服务器的 ...

  4. 利用 Eclipse IDE 的强大功能远程调试 Java 应用程序

    II. Eclipse 连接套接字模式下的 VM 调用示例(具体引用实践) 说明:不管采用哪种方式,调试的源代码都在eclipse的环境下 一.调试方式一(将目标应用程序作为调试的服务器,eclips ...

  5. 配置Tomcat、maven远程部署调试总结。

    注意:可以搞两个环境,一个本地tomcat 一个服务器上的tomcat ,然后都采用如下配置.这样就可以 在本地调试,调试好后,再发布到服务器端.非常方便.  ==================== ...

  6. 在idea中用tomcat远程部署调试

    适用于生产环境下的调试. 1.catalina配置 在服务器的bin下创建setenv.sh,内容如下 1099是jmx,最后是服务器ip 2.启动tomcat ./catalina.sh jpda ...

  7. 使用 MyEclipse远程调试 Java 应用程序

    远程调试,需要本程序和服务器上的程序源码是相同的,这我们服务器使用的是tomcat7.在本地通过MyEclipse 10来调试服务器上的代码,需要本地能访问到服务器,我的服务器是在linux下. 1. ...

  8. 使用Idea远程部署调试tomcat

    转自:http://blog.csdn.net/jane1229/article/details/52402119 远程服务器的配置: 1.在远程服务器安装jdk和tomcat 2.配置环境变量 PA ...

  9. Eclipse快速入门:远程调试Java应用

    Eclipse快速入门:远程调试Java应用 2012年03月27日00:00 it168网站原创 作者:皮丽华 编辑:皮丽华 我要评论(0) 标签: Eclipse , Java , Java框架, ...

随机推荐

  1. AOP的底层实现-CGLIB动态代理和JDK动态代理

    AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来 ...

  2. 用C++实现的Euler筛法程序

    Euler筛法介绍 以筛出100以内(含100)的所有素数为例来说明一下欧拉筛法的原理. 和Eratosthenes筛法一样,Euler筛法也从2开始筛,但Eratosthenes筛法会把2的倍数一批 ...

  3. 实例说明C++的virtual function的作用以及内部工作机制初探

    C++为何要引入virtual function? 来看一个基类的实现: 1 class CBase 2 { 3 public: 4 CBase(int id) : m_nId(id), m_pBas ...

  4. Mysql 5.6 编译报错

    编译安装 mysql(下面是编译参数) /usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \ -DMYSQ ...

  5. 从零开始实现简单 RPC 框架 8:网络通信之 Request-Response 模型

    Netty 在服务端与客户端的网络通信中,使用的是异步双向通信(双工)的方式,即客户端和服务端可以相互主动发请求给对方,发消息后不会同步等响应.这样就会有一下问题: 如何识别消息是请求还是响应? 请求 ...

  6. MySQL——优化

    MySQL数据库优化: 1.优化角度 安全: 数据可持续性 性能: 数据的高性能访问 2.优化范围(优化顺序---->) (1)存储.主机和操作系统: 主机架构稳定性 I/O规划及配置 swap ...

  7. Python - 面向对象编程 - 三大特性之封装

    简单介绍封装 封装是面向对象编程的一大特点 封装可以被认为是一个保护屏障,防止该类的属性.方法和数据结构被外部随意访问 要访问该类的属性.私有方法.数据结构,必须由指定的方法控制访问 深入理解封装 在 ...

  8. 为老的vueCli项目添加vite支持

    1.前言 接手公司的某个项目已经两年了,现在每次启动项目都接近1分钟,hmr也要好几秒的时间,but vite2发布之后就看到了曙光,但是一直没有动手进行升级,昨天终于忍不住了,升级之后几秒钟就完成了 ...

  9. Identity用户管理入门五(登录、注销)

    一.建立LoginViewModel视图模型 using System.ComponentModel.DataAnnotations; namespace Shop.ViewModel { publi ...

  10. Spring5(七)——AOP注解

    一.AOP注解 1.介绍 上一节介绍了 AspectJ 框架如何实现 AOP,具体的实现方式是通过 xml 来进行配置的.xml 方式思路清晰,便于理解,但是书写过于麻烦.这一节介绍注解的方式来进行 ...