webapp如何从tomcat的conf目录中加载配置?
来源:互联网 发布:为数据而生 周涛 pdf 编辑:程序博客网 时间:2024/04/30 13:04
问题
WebApp中难免访问tomcat中的资源,比如要从conf
中读取配置文件,将日志写到logs
目录中。使用命令 ./startup.sh
可以启动tomcat,但是不同的启动方式,对工作目录影响很大。
比如在bin目录中 ./startup.sh
那么工作目录将是bin目录。此时的 ..
目录是tomcat根目录1,相应的:
../conf ---> conf../logs ---> logs
但是如果是在根目录中执行 ./bin/startup.sh
那么工作目录将变成tomcat的安装目录,此时:
./conf ---> conf./logs ---> logs
如果我们在log4j的配置文件中把日志文件配置成为../logs/app.log
,那么对于第一种运行方式,我们会发现日志出现在${catalina.base}/logs
目录中。但是如果以第二种方式启动tomcat,我们会发现日志出现${catalina.base}/../logs
目录中。于是在做配置的时候,最终访问的是哪个文件就变得十分不确定了。
问题是,如何确定访问tomcat中conf
目录中的某配置文件,或者把日志确定设在logs
目录中呢?
tomcat机制分析
tomcat提供了个渠道,让app知道运行它的tomcat在哪。tomcat会提供一系统形如catalina.xxx
的系统属性2。其中有catalina.home
和catalina.base
可以用来确定当前tomcat的目录。一般来说:
catalina.home
表示tomcat的安装目录,是tomcat代码所在的地方。catalina.base
表示tomcat的运行目录,是webapp相关的数据所处的地方。
如果直接以./startup.sh
的方式运行tomcat,那么这两个变量将指向同一个值,它就是tomcat的安装目录。但是如果在同一台机子上,同时存在多个tomcat实例,那么很可能的情况就是它们的catalina.home
相同,而catalina.base
各处不同。见tomcat多实例配置
在tomcat多实例的情况下,一般来说会以下面这样的形式存在。
<catalina_home>|--- <bin>:tomcat本身|--- <lib>:公共的库`--- <conf>:公共配置<catalina_base>|--- <bin>:只有启动脚本|--- <conf>:服务器的配置,比如端口,权限等等,以及一些webapp使用的配置。|--- <logs>|--- <webapps>|--- <work>`--- <tmp>
所以我们期望的根目录将是catalina.base
指定的目录。
解决方案
对于可以从System.properties
中加载变量的,都可以使用${catalina.base}
表示当前的tomcat的根目录。(比如web.xml
,log4j.properties
,springApplicationContext.xml
等文件)
以下是一段log4j.properties
文件的配置,它会将app.log日志文件保存在tomcat中的conf目录中。
log4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.file=${catalina.base}/logs/app.loglog4j.appender.file.DatePattern='.'yyyyMMddlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss SSS} [%p] %c{1} %m%n
代码中可以通过下面的代码从tomcat的相应目录里加载相关内容:
File conf = new File(System.getProperty("catalina.base"), "conf");File appConf = new File(conf, "app.properties");Properties p = loadProperties(appConf);
- tomcat根目录,我们表示为
${catalina.base}
。相应的它里面的conf
目录也可以表示成${catalina.base}/conf
,以此类推。 ↩ - 系统属性可以通过
System.getProperty(...)
获取。 ↩
- webapp如何从tomcat的conf目录中加载配置?
- 在tomcat中Spring如何管理不同webapp目录下的应用程序
- tomcat会自动加载jakarta-tomcat-5.0\conf\Catalina\localhost目录下的文件吗?
- tomcat webapp目录
- Tomcat安装目录下conf/tomcat-user.xml配置
- tomcat conf目录下文件的作用
- tomcat conf目录下文件的作用
- IDEA TomCat webapp的 deployment配置
- tomcat-conf目录
- c#如何实现从xml中加载树目录,并且显示完整的Text
- tomcat在conf/Catalina/localhost目录下配置项目路径
- tomcat在conf/Catalina/localhost目录下配置项目路径
- tomcat在conf/Catalina/localhost目录下配置项目路径
- tomcat在conf/Catalina/localhost目录下配置项目路径
- tomcat在conf/Catalina/localhost目录下配置虚拟目录
- nginx.conf的配置多个目录
- 在eclipse找不到tomcat的webapp下的项目目录
- tomcat中conf\Catalina\localhost目录下的J2EE项目META-INF配置文件
- Android改变状态栏statusbar背景色
- nginx做简单的负载均衡例子
- hibernate annotation 双向 one-to-one 注解
- PHP输出中文乱码的问题
- Power键 和 HOME键 广播监听的问题
- webapp如何从tomcat的conf目录中加载配置?
- DWR入门教程
- CDN(内容分发网络)技术原理
- 解决mac下安卓模拟器不能X86开启(加速模拟器)
- ShellExecuteEx打开、关闭exe
- JavaScript的垃圾回收机制
- 测试接口是否好用,前台后台数据传输问题!
- 火狐Firebug提示:ReferenceError: "sth" is not defined
- Java的一些工具