java启动命令中-D和--的区别

java启动命令中-D和–的区别

在 SpringBoot 项目中,启动时,通过 -D-- 添加参数,都可以直接覆盖 ymlproperties 配置文件中的同名配置,如果不存在则相当于添加了一个配置。

1.java -D 添加参数

注意: -D 要放到 -jar 前面,否则参数无效。

java -Dserver.port=1234 -jar test.jar

1.1支持的获取方式

System.getPorperties("server.port");

2.java –– 添加参数

这种方式添加的参数是操作系统的 环境变量

注意: -- 要放到 jar 包后面,否则报错。

java -jar test.jar --server.port=1234

2.1支持的获取方式

System.getEnv("server.port");

3. -DXX VS --XXX 的优先级

结论:--xx 比 -Dxx`的优先级高

application.yml

server:
  port: 18080

使用-DXX 启动

java -Dserver.port=18081 -jar app.jar

Tomcat started on port(s): 18081 (http) with context path ''

使用--XX 启动

java -jar app.jar --server.port=18082

Tomcat started on port(s): 18082 (http) with context path ''

同时使用-DXX Vs --XX 启动

java -Dserver.port=18081 -jar app.jar --server.port=18082

Tomcat started on port(s): 18082 (http) with context path ''

结论:--xx 比 -Dxx`的优先级高

优先级如下:

–长选项参数>-D系统参数>系统全局变量

### 使用 `java -jar` 命令启动服务并指定端口号 通过 `java -jar` 命令启动基于 Spring Boot 或其他框架的服务时,可以轻松指定端口号。以下是具体实现方式及相关注意事项。 --- #### 1. 指定端口号的方式 Spring Boot 提供了多种方式来设置服务的监听端口。最常用的方法是在启动命令中直接传递参数: ```bash java -jar myapp.jar --server.port=8080 ``` 这条命令的作用是将服务绑定到 `8080` 端口[^1]。其中: - `myapp.jar`: 是目标 JAR 文件。 - `--server.port=8080`: 是传递给程序的参数,用于覆盖默认配置中的端口号。 对于非 Spring Boot 的应用程序,可以通过 JVM 系统属性的方式来指定端口: ```bash java -Dserver.port=8080 -jar myapp.jar ``` 这种方式适用于那些读取系统属性(System Properties)来决定端口的应用程序[^2]。 --- #### 2. 后台运行服务 为了在 Linux 系统上以后台模式运行服务,并将日志输出保存到文件中,可以使用以下命令: ```bash nohup java -jar myapp.jar --server.port=8080 > outlog.log 2>&1 & ``` 解释: - `nohup`: 让进程忽略挂起信号(SIGHUP),从而可以在关闭终端后继续运行。 - `> outlog.log`: 将标准输出重定向到 `outlog.log` 文件。 - `2>&1`: 将错误输出(stderr)合并到标准输出(stdout)。 - `&`: 将命令放入后台执行[^1]。 另一种方法是直接使用 `&>` 符号简化日志处理: ```bash java -jar myapp.jar --server.port=8080 &> outlog.log & ``` 这种形式同样实现了后台运行日志记录的功能[^2]。 --- #### 3. 示例场景分析 假设有一个名为 `test.jar` 的 JAR 文件,希望将其部署在 Linux 服务器上的 `8080` 端口,并以后台模式运行,则完整的操作流程如下: 1. 切换至 JAR 文件所在目录: ```bash cd /path/to/jar/ ``` 2. 执行后台启动命令: ```bash nohup java -jar test.jar --server.port=8080 > test.out 2>&1 & ``` 3. 查看日志文件以确认服务状态: ```bash tail -f test.out ``` 4. 如果需要停止服务,可以根据进程 ID 杀死对应的任务: ```bash ps aux | grep test.jar kill -9 <PID> ``` --- #### 4. 注意事项 - **端口冲突**: 在指定端口之前,请确保该端口未被其他服务占用。可以使用以下命令检查端口状态: ```bash netstat -tuln | grep 8080 ``` - **权限问题**: 绑定低于 `1024` 的特权端口(如 `80` 或 `443`)通常需要管理员权限。在这种情况下,可以尝试以下两种方案之一: - 使用 `sudo` 提升权限: ```bash sudo java -jar myapp.jar --server.port=80 ``` - 或者通过反向代理(如 Nginx)转发流量到高范围端口[^3]。 - **JVM 参数优化**: 对于生产环境下的大型应用,建议调整 JVM 参数以提高性能。例如: ```bash java -Xms512m -Xmx1g -jar myapp.jar --server.port=8080 ``` --- ### 总结 通过 `java -jar` 命令启动服务并指定端口号是一项基本技能,在实际开发运维工作中非常实用。无论是简单的小型项目还是复杂的分布式系统,都可以借助这一机制灵活控制服务行为。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半山猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值