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 &