最近公司有个需求,要求读 tomcat 中某 properties 文件信息,由于项目是部署到 windows 上的,由于项目的特殊性,会经常移到项目所以这个需求的最大突破点就如何动态获取 tomcat 目录的基础路径,在网上有很多方法比如 1.通过配置 tomcat 环境变量,从而在系统环境变量中获取 2.使用 system.getProperty()方法来获取

本文主要介绍第二种方法 system.getProperty(),这种方法 结合 catalina.base 使用
简单介绍一下 catalina.base

  • catalina.base是 Tomcat 服务器的一个系统属性,它表示 Tomcat 实例的基本目录路径。当 Tomcat 服务器启动时,它会设置这个系统属性,指示当前 Tomcat 实例的基本路径。
  • 在 Java 代码中,你可以使用System.getProperty("catalina.base")来获取该系统属性的值。这个值是一个字符串,表示 Tomcat 实例的基本目录路径。
  • catalina.base系统属性可用时,意味着 Tomcat 服务器已经正确启动,并且该属性已设置为相应的值。这样,你就可以使用该属性来获取 Tomcat 实例的相关信息,如 Tomcat 的安装路径、配置文件路径等。
  • 请注意,确保在获取catalina.base属性之前,Tomcat 服务器已经启动,并且 Java 代码在 Tomcat 服务器内部执行。否则,catalina.base属性可能不可用或返回null

接下来请看实例操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private JedisPool getJedisPool() {
Properties properties = new Properties();
FileInputStream fis = null;
JedisPool jedisPool=null;
try {
//指定tomcat路径
String catalinaBase = System.getProperty("catalina.base")+ "\\conf\\redis-data-cache.properties";
// 创建文件输入流
fis = new FileInputStream(catalinaBase);
// 加载文件内容到Properties对象
properties.load(fis);
// 读取属性值
String propertyValue = properties.getProperty("redis.hosts");
String[] serverDisposition= propertyValue.split(":");
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(8);
jedisPoolConfig.setMaxIdle(8);
jedisPoolConfig.setMinIdle(0);
jedisPool = new JedisPool(serverDisposition[0],Integer.parseInt(serverDisposition[1]));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return jedisPool;

}