一些Java小知识点

1. 系统属性和环境变量

1.1 系统属性介绍

        系统属性 (System Properties):是由Java程序启动时定义的,在运行Java程序时通过-D选项传入。其作用范围是仅在当前JVM实例中有效,这些属性会随着JVM的生命周期结束而失效。用途是提供与Java程序和JVM运行相关的信息,如:
        (1)当前用户 (user.name);

        (2)操作系统名称 (os.name);

        (3)Java版本 (java.version);

        (4)当前工作目录 (user.dir)。

1.2 代码示例
 

    @Test
    public void getSystemProperties() {
        System.out.println("===== 系统属性(System Properties) =====");
        Properties properties = System.getProperties();
        Set<String> propertyNames = properties.stringPropertyNames();
        for (String propertyName : propertyNames) {
            System.out.println(propertyName + " = " + properties.getProperty(propertyName));
        }
    }

1.3 环境变量介绍

        环境变量 (Environment Variables):操作系统级别的配置,由系统或用户设置 ;Windows系统在 "环境变量" 里面进行设置,Linux系统通过 export VAR_NAME=value或定义在shell的配置文件(如 .bashrc);其作用范围是操作系统级别全局生效,多个进程都可以访问,Java程序可以读取,但无法直接修改操作系统的环境变量;其用途是用于定义系统范围的配置,如:

        (1)Java的安装路径 (JAVA_HOME);

        (2)PATH路径;

        (3)服务器环境信息。

1.4. 代码示例

    @Test
    public void getSystemEnvironment() {
        System.out.println("\n===== 环境变量(Environment Variables) =====");
        Map<String, String> environmentVariables = System.getenv();
        for (Map.Entry<String, String> entry : environmentVariables.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        }
    }

2. 通过代码执行一些本地或远程命令

        在开发过程中,有时会需要通过代码执行一些 命令行 指令,以下是一些示例代码,其中使用到了 hutool工具类。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.8</version>
</dependency>
    // 第一种情况:客户端就是运行在服务器上,需要执行一些命令行指令
    @Test
    public void test2() {
        String command;
        String host = "www.baidu.com";
        String OSName = System.getProperty("os.name");
        if (OSName.contains("Windows")) {
            command = "ping " + host;
        } else {
            command = "ping -c 4 " + host;
        }
        String str = RuntimeUtil.execForStr(command);
        System.out.println(str);
    }
    
    // 第二种情况:客户端没有运行在服务器上,需要远程给服务器发送一些命令行指令;
    @Test
    public void test3(){
        // Windows系统中是用 dir 命令列出目录和文件
        String result = RuntimeUtil.execForStr("cmd /c dir");
        System.out.println(result);
        System.out.println("----");
        
        // 给Linux服务器发送一条指令,执行后获取结果,首先要连接到linux服务器
        Session session = JschUtil.openSession("192.168.2.116", 22, "root", "xxx@123");
        String res = JschUtil.exec(session, "ls -l /opt", Charset.defaultCharset());
        System.out.println(res);
    }

3. SpringBoot项目jar包在服务器上后台执行日志输出问题

3.1 问题说明

        是用SpringBoot框架开发项目后,通常会使用maven工具打成jar包放到服务器上运行,如果直接使用 nohup java -jar xxx.jar & 的方式运行,会默认产生一个nohup.out文件,日积月累,这个文件就会占用很大的磁盘空间。

3.2 解决方式

        (1)只输出错误信息到指定的日志文件中,可以使用如下命令:

nohup java -jar test.jar >/dev/null 2>nohup.out &

        (2) 通常情况下,我们的项目中已经集成了slfj+log4j日志框架,并且也把对应级别的日志输出到对应的级别的日志文件中了,所以在项目启动时,也就不需要指定日志的输出位置了。可以使用如下命令启动服务:

nohup java -jar test.jar >/dev/null 2>&1 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值