记录一次springboot项目部署

一、准备工作
1、关闭防火墙

#centos 7 关闭防火墙
systemctl stop firewalld.service

#查看防火墙的状态 no runing
firewall-cmd --state
#

2、阿里云服务需要打开网络安全组,开放自己项目所有相应的端口
请添加图片描述
二、部署项目
1、先把项目打成jar包
在这里插入图片描述
2、生成的jar包在项目target下
在这里插入图片描述
3、把jar包上传到Linux服务器中
在这里插入图片描述
4、把项目配置文件application.properties(yml) 单独上传,以指定外部配置文件的方式启动项目

#控制台启动,打印信息
java -jar xdvideo-0.0.1-SNAPSHOT.jar --Dspring.config.location=application.properties

#守护进程启动
nohup java -jar xdvideo-0.0.1-SNAPSHOT.jar --Dspring.config.location=application.properties &

5、为什么要以指定外部配置文件的方式启动项目?

1、因为正常启动配置文件都被打成了jar包,在jar里面,如果需要修改配置文件就需要把修改之后的项目重新打包再上传比较麻烦
2、官方推荐做法,可以随时在线上修改配置文件,只需要重新启动项目即可

6、输入ip+端口号进行访问
请添加图片描述
请添加图片描述

可能会用到的命令

#centos 7 关闭防火墙
systemctl stop firewalld.service

#查看防火墙的状态 no runing
firewall-cmd --state

#控制台启动,打印信息
java -jar xdvideo-0.0.1-SNAPSHOT.jar --Dspring.config.location=application.properties

#守护进程启动
nohup java -jar xdvideo-0.0.1-SNAPSHOT.jar --Dspring.config.location=application.properties &

#动态查看日志文件(nohup.out)
tail -f nohup.out
#查看一次日志后N行
tail -N nohup.out

#根据端口查询pid进程
#ps:lsof 命令需要先 yum install lsof 安装
lsof -i:8031
#杀死进程
kill -9 pid

### 如何配置Spring Boot以确保应用程序仅能部署一次 为了确保Spring Boot应用程序仅能部署一次,可以通过多种方式实现这一目标。以下是几个主要的技术手段: #### 1. 使用端口锁定机制 通过指定唯一的端口号并验证其可用性可以防止重复部署。如果尝试启动另一个实例,则会因端口冲突而导致失败。 ```properties server.port=8080 ``` 此方法依赖于操作系统层面的网络资源分配规则[^4]。当第二个进程试图绑定到已经被占用的同一端口时,将会抛出异常从而阻止第二次部署。 #### 2. 实现单例模式的服务注册表 创建一个服务注册中心,在每次应用启动时向该注册中心报告自己正在运行的状态。如果有任何现有的记录表明当前服务已经存在,则立即终止新实例的初始化流程。 下面展示了一个简单的Redis键值存储作为示例来完成这项工作: ```java @Component public class SingletonService implements ApplicationListener<ContextRefreshedEvent> { private final String redisKey = "singleton-service"; @Autowired private RedisTemplate<String, String> redisTemplate; @Override public void onApplicationEvent(ContextRefreshedEvent event) { ValueOperations<String, String> ops = redisTemplate.opsForValue(); Boolean acquiredLock = ops.setIfAbsent(redisKey, UUID.randomUUID().toString()); if (!acquiredLock){ throw new IllegalStateException("Another instance of this service is already running."); } } } ``` 上述代码片段利用了Redis中的`SETNX`(Set if Not Exists)命令特性[^5],只有在key不存在的情况下才会成功设置新的value,因此非常适合用来检测是否有其他实例先一步完成了注册操作。 #### 3. 文件锁机制 另一种常见做法是在本地磁盘上建立独占访问权限的临时文件或者目录结构。每当一个新的Spring Boot应用实例准备上线之前都会检查这些标志物是否存在;一旦发现它们已被占据就主动退出而不继续执行后续逻辑。 例如,可以在Linux系统下借助flock()函数达成目的: ```bash #!/bin/bash exec flock -n /var/lock/myapp.lock || exit 1 java -jar myapp.jar ``` 这段脚本会在shell层面上运用POSIX标准定义的功能——即针对特定路径名申请互斥型加锁请求。假如无法获得许可权柄的话(意味着别的程序正持有相同位置上的锁),那么整个脚本就会立刻停止运作而不是进一步加载Java虚拟机及其关联组件[^6]。 --- ### 总结 综上所述,有三种主流策略可供选择用作保障单一版本Spring Boot项目在线存活状态下的唯一性约束条件:一是依靠固定的监听地址与端口组合形成天然屏障效应;二是引入外部中间件比如NoSQL数据库充当协调者角色协助判断是否满足预期情形;三是采用底层I/O接口设计专门服务于此类特殊需求的小工具集锦方案。每种途径各有优劣长短之处需视具体业务背景灵活选用最为适宜的那一款。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值