本文共 2181 字,大约阅读时间需要 7 分钟。
背景
在服务架构中,有些springboot工程只是简单的作为服务,并不提供web服务。或者并不提供对外的访问服务,这个时候我们只想能以后台进程去运行,因为项目只是作为客户端去做一些操作系统或者去请求其他任务的事情,并不想要启动端口。
我们以Spring Boot (v2.3.3.RELEASE)为例进行讲解。
大家会问,这个Spring Boot在运维领域有关系吗?不过我觉得有关系,我虽然是是干运维领域的,但是我有时候会写一些工具,用过的语言有Python,Golang,PHP以及Spring Boot,Vue,JavaScripts,我觉得这几门语言都是很好的语言。能帮助自己写不同的工具,因为这几门语言我都懂。
好我们来看看Spring Boot的如果实现。
实现无端口启动
网上说如果要无端口模式,分web项目和非web项目来处理。如果是非web项目就把下面的依赖去掉。
org.springframework.bootgroupId> spring-boot-starter-webartifactId> dependency>
对于Sring Boot来讲,我们觉得没必要去除依赖(当然你也可以去掉依赖),就可以让进程常驻内存。具体步骤如下:
(1) 首先我们正常的新建Spring Boot web项目。
(2)修改配置文件:application.properties
# 无端口模式启动web项目spring.main.web-application-type=none
到处为止,我们启动Spring Boot的时候会自动关闭。因为没有去执行所以就结束了。所以我们可以使用定时任务,从而让它常驻进程并且不启动端口
(3)添加定时任务从而让它常驻进程。(启一个定时任务不做任何事情是为了让进程能常驻内存)
package yeyese.noport.task; import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled; import java.time.LocalDateTime; @Configuration //1.主要用于标记配置类,兼备Component的效果。@EnableScheduling // 2.开启定时任务public class SaticScheduleTask { //3.添加定时任务 @Scheduled(cron = "*/30 * * * * ?") //或直接指定时间间隔,例如:5分钟 private void configureTasks() { System.err.println("测试无端口模式启动,然后执行定时任务: " + LocalDateTime.now()); } }
验证
到此,我们看到进程常驻了,并且没有启动端口。
我们放到Linux服务器上去跑一下看看:
#ps -ef |grep java www 6616 1 6 15:00 ? 00:00:03 java -jar noport-0.0.1-SNAPSHOT.jarroot 6689 6670 0 15:01 pts/0 00:00:00 grep --color=auto java #netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1069/sshd tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 1069/sshd
转载地址:https://blog.csdn.net/weixin_39785600/article/details/111283085 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!