Java命令行参数

Java命令行参数

1. JVM参数 (VM 系统变量 Options)

java -Dserver.port=8000 -jar xxx.jar 
java -Xms512m -Xmx1g -XX:MetaspaceSize=256m \
-Duser.home=/opt/data -Dlog.level=INFO \
-jar app.jar \
--server.port=8081 --spring.profiles.active=prod

 JVM参数:以 -X(如 -Xms)、-D(如 -Duser.home)开头

说明 -Dproperty=value 设置系统属性; 相当于在IDEA中的`VM Options`,在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用`System.getProperty(“propertyName”)`得到`value`的值。如果`value`中有空格,则需要用双引号将该值括起来,如`-Dname=”space string”`。该参数通常用于设置系统级全局变量值,如配置文件路径,应为该属性在程序中任何地方都可访问。

 

 

2. Program arguments (springboot参数)

java -jar xxx.jar --server.port=8000 --spring.profiles.active=prd

 

说明 Program arguments 为我们传入`main`方法的字符串数组`args[]`,它通常以`--`开头,如`--spring.profiles.active=dev3`;等价于`-Dspring.profiles.active=dev3`如果同时存在,以`Program arguments`配置优先;

IDEA Program arguments: 

--spring.profile.active=dev --logging.level.root=DEBUG

 

类型 参数示例 说明
JVM内存参数 -Xms512m -Xmx1g 初始堆内存 512M,最大堆内存 1G
JVM内存参数 -XX:MetaspaceSize=256m 元空间初始大小 256M(非堆内存,用于类加载)
系统属性参数 -Duser.home=/opt/data 设置系统属性 user.home,代码中通过 System.getProperty("user.home") 获取
Spring Boot参数 --server.port=8081 覆盖 application.properties 中的端口配置
Spring Boot参数 --spring.profiles.active=prod 激活 prod 环境的配置文件(如 application-prod.properties)

 

3. 环境变量 Environment variables

ZOOKEEPER SERVER=192.168.8.168

 

4. 优先级

Program arguments (--priority-program-agrs) > VM options (-D)priority=vm-options) > Environment variable (priority=environment-variablees > 所有application.yml application-prd.yml

*  如下方式,启动端口为8081,即命令行参数 > 系统属性(VM属性)

 * Spring Boot参数中,命令行 --key=value 的优先级高于配置文件。

 


 

 

Environment 类的使用

@Slf4j
@SpringBootTest
class WorkerProcessApplicationTests {
    @Resource
    private Environment environment;
    
    @DisplayName("测试读取配置信息")
    @Test
    public void readProperties(){
        String appName = environment.getProperty("powerjob.worker.app-name");
        System.out.println("--->"+appName);
        //根据激活的配置文件返回
        String port = environment.getProperty("powerjob.worker.akka-port");
        System.out.println("--->"+port);
        // 获取到server.port的值为-1,原因:测试类启动springboot程序时并没有以配置端口启动服务
        String serPort = environment.getProperty("server.port");
        System.out.println("--->"+serPort);

        String token = environment.getProperty("desaysv.extend.token");
        System.out.println("--->"+token);
    }
}

 

Runtime的使用

int cores = Runtime.getRuntime().availableProcessors(); //向 Java 虚拟机返回可用处理器的数目

 System的使用

// windows下输出当前用户的文件路径: C:\Users\zhangsan , liunx下输出 的是斜杠路径/
String oms = System.getProperty("user.home", "oms");

// 使用场景:如指定临时下载文件路径(一般需要即使删除,避免临时文件太多造成磁盘压力)
java.io.File tempfile = sftpUtils.download(attachmentVo.getUrl(),System.getProperty("user.home", "userservice") + "/temp");
finally {
    if(Objects.nonNull(tempfile)){
// 删除临时文件
FileUtil.del(tempfile);
log.info("delete temp file...");
}
}

 

````
posted @ 2022-03-04 10:31  穷苦书生  阅读(563)  评论(0)    收藏  举报