Spring 开发问题

2023-08-30 05:31:26 +08:00
 nnegier

我想问一下,怎么部署呢?我目前不是 Docker ,所以我想咨询单机下的部署问题。我目前还是拷了一个 tomcat 到服务器然后解压运行,将 spring 弄成 war 放进去。

但我知道部分朋友是直接打成 jar 包然后运行,这里我有个疑问,是用的哪个命令呢,java -jar 它显然会独占命令行窗口,其次怎样去管理这些已经跑起来的 jar 呢?是通过查端口号来进行 kill 吗?那这样岂不是每次发新包都要 kill 然后再 run 。

最后一个问题是,有没有办法在 IDE 里面直接部署到服务器呢? Docker 我知道有种方式可以,但我目前还是单机,故不考虑那种方式。

我这些问题的根源还是我对这些不熟,不敢动,先行谢谢大家了。

3494 次点击
所在节点    Java
21 条回复
Imindzzz
2023-08-30 06:26:05 +08:00
nohup
tairan2006
2023-08-30 07:31:19 +08:00
Linux 的话 Systemd 就行
Windows 就 nssm
Noita
2023-08-30 08:17:45 +08:00
linux screen
heeeeeem
2023-08-30 08:41:10 +08:00
1.nohup java -jar xxx.jar &
2.手动部署,需要每次 kill
3.idea 有云服务商的插件,可以上传包并执行命令
Bingchunmoli
2023-08-30 08:42:08 +08:00
screen ,nuhup 配合&,或者做成服务
unfrost
2023-08-30 08:47:44 +08:00
啊这,不管是 Linux 还是 Windows 都直接打成服务启动就好了,做成 jar 。Linux 做一个 System 文件 systemctl start/stop service_name ,就好了。Windows 的话 可以找一下 Git 上的打服务的工具 https://github.com/winsw/winsw ; IDE 直接部署服务器可以去了解一下 jenkins [但是这个一般是用于集成测试,实际生产环境应该都是手动部署的吧]
Ayanokouji
2023-08-30 09:08:54 +08:00
msaionyc
2023-08-30 09:09:15 +08:00
nohup
每次部署之前查服务进程 id 然后 kill 掉,再 java -jar 。
你可以把这套东西做成脚本,直接执行。包括拉代码,打包,部署的整套流程都可以在脚本里执行
nothingistrue
2023-08-30 09:34:27 +08:00
先学习一些 Linux 、Windows 上控制后台程序的简单知识。
mango88
2023-08-30 09:49:55 +08:00
supervisor
Oneice
2023-08-30 09:56:22 +08:00
通过 Maven 插件实现自动部署: https://gitee.com/dt_research_institute/deploy-helper
ljsh093
2023-08-30 09:58:57 +08:00
javaw -jar
imokkkk
2023-08-30 10:09:05 +08:00
run.sh


#!/bin/sh
function runShell() {
#set jvm heap size
JVM_ARGS="-Xms256M -Xmx1g -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M"
#打印 GC 日志
#JVM_ARGS=${JVM_ARGS}" -XX:+PrintGCDetails -Xloggc:jvm.log -XX:+PrintGCDateStamps "
#when jvm oom, auto generate dump file
JVM_ARGS=${JVM_ARGS}" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=sdm_oom.hprof "
#jasypt 加解密
JVM_ARGS=${JVM_ARGS}" -Djasypt.encryptor.password=deviskaifa "
#JVM_ARGS=${JVM_ARGS}" -Djasypt.encryptor.algorithm=PBEWithMD5AndDES "

## 设置临时目录
TMP_DIR=./tmp
if [ ! -d $TMP_DIR ];then
mkdir $TMP_DIR
else
echo tmp dir $TMP_DIR exist
fi
TMP_DIR_ARG=" -Djava.io.tmpdir="${TMP_DIR}

##### 开启 jmx ,方便使用 JVisualVM 监控系统
# -Dcom.sun.management.jmxremote.port=1099 这个是配置远程 connection 的端口号的,要确定这个端口没有被占用
# -Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl
# -Dcom.sun.management.jmxremote.authenticate=false 指定了 JMX 是否启用鉴权(需要用户名,密码鉴权)
# -Djava.rmi.server.hostname=192.168.1.54 这个是配置 server 的 IP 的
#JVM_ARGS=${JVM_ARGS}" -Djava.rmi.server.hostname=192.168.1.54 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

### remote debug 开启远程调试
## -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
#JVM_ARGS=${JVM_ARGS}" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 "

# 获取启动 jar 包
JAR_NAME=`ls | grep jar`
path=$(cd "$(dirname "$0")"; pwd)
cd $path

nohup java ${JVM_ARGS} ${TMP_DIR_ARG} -jar ${JAR_NAME} $1 $2 $3 $4 $5 $6 > /dev/null 2>error.log &

echo $! > tpid
echo Starting...
echo please use tailf logs/*.log to check success or not.
}

if [ ! -f "tpid" ];
then
runShell
else
tpid=$(cat "tpid")
running=$(ps -ef |awk '{print $2}'|grep -w $tpid)
if [ "$running" ];
then
echo "Process(pid:$tpid) is already running."
else
runShell
fi
fi
shanghai1943
2023-08-30 10:41:56 +08:00
可以看看 java service wrapper
sankooc
2023-08-30 13:42:34 +08:00
pm2
dog82
2023-08-30 15:18:04 +08:00
你得用 springboot 才能打可执行 jar 包哈
javak
2023-08-30 15:50:03 +08:00
200 块,我手把手教你
S4msara
2023-08-30 16:07:12 +08:00
1.打成 Jar 包的前提是使用了 Spring Boot ;
2.java -jar 独占命令行窗口可以使用 nohup java -jar xxx.jar > /dev/null 2>&1 &或者 nohup java -jar xxx.jar > log.out &,区别在于前者不将 console 日志输出到日志文件,后者输出;
3.ps -ef | grep java 查正在运行中的 Java 程序,如果 jar 包名称存在相同,则用端口查然后 kill -9 ;
4.如果不想每次都 kill 再 run ,可以自己写 shell 脚本,把发版流程( e.g. 上传新版本到发版目录>关闭运行中程序>拷贝并覆盖旧版本>运行程序)用脚本写好,手动的部分就只有上传新版本到发版目录和运行脚本了,或者可以使用 Jenkins ;
5.是否使用 Docker 与程序是否单机无关。
KevinBlandy
2023-08-30 16:39:15 +08:00
推荐一个优质的 spring/boot/data/security/cloud 的中文文档,无广告,无须登录,无须关注,在线读。

https://springdoc.cn/docs/
EscYezi
2023-08-31 01:22:07 +08:00
可以用 pm2 管理启动停止,比 systemd 简单不少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969347

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX