Spring 开发问题

252 天前
 nnegier

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

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

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

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

3157 次点击
所在节点    Java
21 条回复
Imindzzz
252 天前
nohup
tairan2006
252 天前
Linux 的话 Systemd 就行
Windows 就 nssm
Noita
252 天前
linux screen
heeeeeem
252 天前
1.nohup java -jar xxx.jar &
2.手动部署,需要每次 kill
3.idea 有云服务商的插件,可以上传包并执行命令
Bingchunmoli
252 天前
screen ,nuhup 配合&,或者做成服务
unfrost
252 天前
啊这,不管是 Linux 还是 Windows 都直接打成服务启动就好了,做成 jar 。Linux 做一个 System 文件 systemctl start/stop service_name ,就好了。Windows 的话 可以找一下 Git 上的打服务的工具 https://github.com/winsw/winsw ; IDE 直接部署服务器可以去了解一下 jenkins [但是这个一般是用于集成测试,实际生产环境应该都是手动部署的吧]
Ayanokouji
252 天前
msaionyc
252 天前
nohup
每次部署之前查服务进程 id 然后 kill 掉,再 java -jar 。
你可以把这套东西做成脚本,直接执行。包括拉代码,打包,部署的整套流程都可以在脚本里执行
nothingistrue
252 天前
先学习一些 Linux 、Windows 上控制后台程序的简单知识。
mango88
252 天前
supervisor
Oneice
252 天前
通过 Maven 插件实现自动部署: https://gitee.com/dt_research_institute/deploy-helper
ljsh093
252 天前
javaw -jar
imokkkk
252 天前
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
252 天前
可以看看 java service wrapper
sankooc
251 天前
pm2
dog82
251 天前
你得用 springboot 才能打可执行 jar 包哈
javak
251 天前
200 块,我手把手教你
S4msara
251 天前
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
251 天前
推荐一个优质的 spring/boot/data/security/cloud 的中文文档,无广告,无须登录,无须关注,在线读。

https://springdoc.cn/docs/
EscYezi
251 天前
可以用 pm2 管理启动停止,比 systemd 简单不少

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

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

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

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

© 2021 V2EX