1.获取进程ID
在开发中,有时候需要获取当前SpringBoot 应用的进程号。 ApplicationPid 类提供一个简单的方法来获取进程ID
ApplicationPid pid=new ApplicationPid();
System.out.printf("进程ID: %s%n", pid.toString());
此外,我们可以通过在 META-INF/spring.factories 中注册监听器,将进程ID 写入到一个文件中。通过配置 spring.pid.file 属性,我们可以指定文件路径
spring.pid.file= d:/app.pid
我们还可以通过 ManagementFactory 获取进程ID
String pid=ManagementFactory.getRuntimeMXBean().getName.split("@")[0];
2.应用运行主目录
ApplicationHome 类提供了访问应用主程序主目录的方法。无论Jar文件,解压文件,还是直接运行的应用程序。都可以找到一个合理的主目录
ApplicationHome home =new ApplicationHome();
System.out.printf("dir: %s, source: %s%n", home.getDir(), home.getSource());
在ide中运行和打包jar后运行,输出的结果会有所不同。
3,获取java版本
javaVersion 类可以用来获取当前运行的java 版本
System.out.printf("Java Version: %s%n", JavaVersion.getJavaVersion());
javaverson 是一个枚举类,定义了从17到22的版本,还可以进行版本比较。
4,应用临时目录
ApplicationTemp 类提供了访问应用程序特定临时目录的功能,不同的Spring Boot 应用程序将获得不同的临时目录
ApplicatipnTemp temp=new ApplicationTemp;
System.out.printf("临时目录: %s%n", temp.getDir());
无论是在 IDE 下还是在 Jar 方式运行,Windows 平台下临时目录都位于 Temp 文件夹下。
- 系统属性/环境变量访问SystemProperties 类可以方便地访问系统属性。如果属性不存在,它还会尝试从环境变量中获取。
System.out.printf("java.home=%s%n", SystemProperties.get("java.home"));
get 方法支持可变长参数,可以传递多个 key,获取时遍历遇到非 null 的直接返回。
- 实例化对象Instantiator 是一个简单工厂,可以通过注入可用参数来实例化对象。
public interface DAO {}
public class A implements DAO {}
public class B implements DAO {}
Instantiator<DAO> instant = new Instantiator<>(DAO.class, p -> {});
List<DAO> ret = instant.instantiate(List.of("com.pack.A", "com.pack.B"));
System.out.printf("%s%n", ret);
这可以方便地一次性实例化多个同类型的类。7. 资源加载PropertiesPropertySourceLoader 和 YamlPropertySourceLoader 可以用来加载 .properties、.xml、.yaml 资源文件。
PropertiesPropertySourceLoader propertyLoader = new PropertiesPropertySourceLoader();
List<PropertySource<?>> list = propertyLoader.load("pack", new ClassPathResource("pack.properties"));
System.out.printf("pack.*: %s%n", list.get(0).getSource());
YamlPropertySourceLoader yamlLoader = new YamlPropertySourceLoader();
List<PropertySource<?>> yamls = yamlLoader.load("pack", new ClassPathResource("pack.yml"));
System.out.printf("pack.*: %s%n", yamls.get(0).getSource());
加载后的 List 可以注册到 Environment 中,在系统中直接访问。8. 获取 basePackages如果需要在代码中获取当前应用启动类所在的基包 basePackages,可以通过以下方式:
private ConfigurableApplicationContext context;
System.out.printf("basePackages: %s%n", AutoConfigurationPackages.get(context));
内部注册的是一个 BasePackages Bean,该类是静态私有的,因此只能通过上述方式访问。