项目上线部署的时候,领导要求直接jar包运行,特此研究了一下。

前期准备:

1.待运行的jar包:ROOT.jar

2.装好了jdk的linux环境

具体操作如下:

在/home/greatwall目录下建立一个项目jar目录用于存放我们打的包

将打包好的jar包上传到localJar目录下,注意打包时的项目端口号,我用的是9080端口

检查当前是否有进程占用待启动项目的端口号,如果没有可以考虑启用项目了,如果有,需杀掉此进程释放9080端口号

停止运行jar包也是此操作

启用项目jar,注意此处需要nohup后台启动项目,否则关闭服务器会导致项目停止运行

nohup Java -jar 包名.jar &            //意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行 

可以查看通过查看nohup.out来查看项目启动情况,也可以查看项目配置的日志路径来查看

日志显示缺少达梦驱动(项目用到了达梦驱动,maven下不下来,我给单独放在了lib包下,打包估计没打进来)

我的解决方案是,首先查看当前linux服务器的jdk安装路径 

命令最后一行可看到我的jdk装在了/usr/java/jdk1.8.0.231目录下,将lib下的达梦驱动jar包放到 jdk所在目录/jre/lib/ext目录下即可

此时再次运行nohup java -jar xxx.jar  &    命令即可 正常启动

 

1.lunix系统

通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少

在这里插入图片描述
open files那一行就代表系统目前允许单个进程打开的最大句柄数,这里是1024。
使用命令lsof -p 进程id | wc -l可以统计进程打开了多少文件

解决方法

ulimit -n 20480
这样就可以把当前用户的最大允许打开文件数量设置为20480了,但这种设置方法在重启后会还原为默认值。
ulimit -n命令非root用户只能设置到4096。

2.代码检查

代码一些连接对象或者io流对象用完之后是否用finally及调用close进行关闭关闭

结合日志,我们来看一下SSL双向认证的全过程: 

 

第一步: 客户端发送ClientHello消息,发起SSL连接请求,告诉服务器自己支持的SSL选项(加密方式等)。 

  1. *** ClientHello, TLSv1  



第二步: 服务器响应请求,回复ServerHello消息,和客户端确认SSL加密方式: 

Bash代码  收藏代码
  1. *** ServerHello, TLSv1  



第三步: 服务端向客户端发布自己的公钥。 

第四步: 客户端与服务端的协通沟通完毕,服务端发送ServerHelloDone消息: 

Bash代码  收藏代码
  1. *** ServerHelloDone  



第五步: 客户端使用服务端给予的公钥,创建会话用密钥(SSL证书认证完成后,为了提高性能,所有的信息交互就可能会使用对称加密算法),并通过ClientKeyExchange消息发给服务器: 

Bash代码  收藏代码
  1. *** ClientKeyExchange, RSA PreMasterSecret, TLSv1  



第六步: 客户端通知服务器改变加密算法,通过ChangeCipherSpec消息发给服务端: 

Bash代码  收藏代码
  1. main, WRITE: TLSv1 Change Cipher Spec, length = 1  



第七步: 客户端发送Finished消息,告知服务器请检查加密算法的变更请求: 

Bash代码  收藏代码
  1. *** Finished  



第八步:服务端确认算法变更,返回ChangeCipherSpec消息 

Bash代码  收藏代码
  1. main, READ: TLSv1 Change Cipher Spec, length = 1  



第九步:服务端发送Finished消息,加密算法生效: 

Bash代码  收藏代码
  1. *** Finished  



那么如何让服务端也认证客户端的身份,即双向握手呢?其实很简单,在服务端代码中,把这一行: 

Java代码  收藏代码
  1. ((SSLServerSocket) _socket).setNeedClientAuth(false);  



改成: 

Java代码  收藏代码
  1. ((SSLServerSocket) _socket).setNeedClientAuth(true);  


通过比对单向认证的日志输出,我们可以发现双向认证时,多出了服务端认证客户端证书的步骤: 

Bash代码  收藏代码
  1. *** CertificateRequest  
  2. Cert Types: RSA, DSS  
  3. Cert Authorities:  
  4. <CN=localhost, OU=cn, O=cn, L=cn, ST=cn, C=cn>  
  5. <CN=localhost, OU=cn, O=cn, L=cn, ST=cn, C=cn>  
  6. *** ServerHelloDone  



Bash代码  收藏代码
  1. *** CertificateVerify  
  2. main, WRITE: TLSv1 Handshake, length = 134  
  3. main, WRITE: TLSv1 Change Cipher Spec, length = 1  



在 @*** [email protected] 之前,服务端向客户端发起了需要证书的请求 @*** [email protected] 。 

在客户端向服务端发出 @Change Cipher [email protected] 请求之前,多了一步客户端证书认证的过程 @*** [email protected] 。 

客户端与服务端互相认证证书的情景,可参考下图: 

 

关于IDEA java.io.IOException:Couldn’t create PTY问题的解决

试了很多的方法,都没有成功,通过查看网络上的资料最终成功解决。

1、问题描述

打开idea出现下图问题
在这里插入图片描述

2、解决步骤

这里要解决的是更改Start directory的设置,更改步骤是:File–Settings–Tools–Terminal,将其中的Start directory更改设置,可以随便设置一个保存文件夹,如图所示
在这里插入图片描述
以下通过点击加号“+”可以使用Terminal。
在这里插入图片描述
不忘初心,方得始终!

关于IDEA java.io.IOException:Couldn’t create PTY问题的解决

试了很多的方法,都没有成功,通过查看网络上的资料最终成功解决。

1、问题描述

打开idea出现下图问题
在这里插入图片描述

2、解决步骤

这里要解决的是更改Start directory的设置,更改步骤是:File–Settings–Tools–Terminal,将其中的Start directory更改设置,可以随便设置一个保存文件夹,如图所示
在这里插入图片描述
以下通过点击加号“+”可以使用Terminal。
在这里插入图片描述
不忘初心,方得始终!

需要引的依赖

Java代码


Java代码中没有对生成二维码的地址做判断,如果D盘中没有“二维码生成”这个文件甲则会保存,需要做的朋友可以自行加一个判断。不存在则创建,存在则执行。

版权声明:本文为博主原创文章,未经博主允许不得转载

jdk环境变量配置

计算机右键→属性→高级系统设置→环境变量

系统变量位置


在下面的系统变量新建
- 新建JAVA_HOME 值为JDK的安装路径
- 新建classpath 值为.;lib路径(用到的相关类库)(前面一定要有.;)
- 寻找到Path 在最前面添加 %JAVA_HOME%bin; (分号是起到分隔作用)

设置三个变量


例如我的jdk路径是安装在:D:softwareJavajdk8,那么

  • JAVA_HOME:D:softwareJavajdk8
    JAVA_HOME
  • classpath:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;D:softwareJavajre8bin
    这里写图片描述

  • Path:%JAVA_HOME%bin;(如果在最前面家记得在末尾加上分号,在最后加的话,注意原来Path的变量值末尾有没有分号,如果没有,先输入;号再输入上面的代码)我这里是写在最前面了
    这里写图片描述

    即:
    这里写图片描述

看是否配置成功

配置完后打开cmd,输入java,回车,显示了正确的用法
这里写图片描述

输入javac, 没报错,显示用法,那么就是配置成功了。
这里写图片描述

也有人说输入java -version 显示版本号就是配置成功。上面的图也有~

  • javap - Java反编译工具,根据字节码反汇编为Java代码

在这里插入图片描述

  • jps - 显示当前所有进程的Pid

在这里插入图片描述

  • jstat - 监控虚拟机,在jvm性能优化时经常用到

e.g jstat -gc -h10 pid 1000 每1秒更新一次pid进程的gc情况
在这里插入图片描述

  • jcmd - jps的替代工具,可以查看本地jvm信息
    在这里插入图片描述

  • jinfo - 查看jvm的全部参数

  • jhat - 分析Java堆的命令

  • jmap - 打印进程内存中对象的情况,在内存泄露或内存溢出时经常用到的命令

在这里插入图片描述

  • jstack - 打印指定Java进程或者远程调试服务的Java堆栈信息,在死锁或者CPU 100%时候去看JVM中运行的线程,如果是64位机器,则-J-d64

在这里插入图片描述

大家好,本人跟着高琪老师的java300集自学,在java飞机项目那个图片加载的问题里,困惑了好久,突然把图片换了一下,它就加载出来了,大家可以试试,图片在最下面

在这里插入图片描述@[TOC](这个是之前报错的图片在这里插入图片描述
这个是运行完成的图片在这里插入图片描述

需要引的依赖

Java代码


Java代码中没有对生成二维码的地址做判断,如果D盘中没有“二维码生成”这个文件甲则会保存,需要做的朋友可以自行加一个判断。不存在则创建,存在则执行。

版权声明:本文为博主原创文章,未经博主允许不得转载