创建从属性文件中读取配置参数的Tomcat部署有哪些可接受的做法?
能够提供WAR文件并指定客户端只需要在特定目录中创建或编辑属性文件,这将是一件好事。这是一种有点常规的做事方式吗?有比这更好的方法吗?
答案 0 :(得分:14)
我们经常通过提供WAR和Context XML文件来分发webapps,该文件放在tomcat/conf/Catalina/localhost
目录中,并且可以从任何路径加载webapp。有一份参考文件here。这提供了以下优点:
如果您确实需要属性文件,可以在指向属性文件的上下文XML文件中设置参数,读取ServletContextListener中的参数,然后读入属性文件。
答案 1 :(得分:9)
我们处理这个问题的方式:
这比直接修改context.xml连接信息要多一些前期工作,但随着时间的推移它应该得到回报。开发服务器将设置为指向开发的GlobalNamingResources,测试服务器指向测试等。然后,可以将相同的WAR文件复制到每个服务器而不进行任何编辑。
这不是使用属性文件,但我认为它实现了相同的目标。允许用户/客户设置数据库连接信息。
GlobalNamingResource示例:
<Resource name="jdbc/dbconnection" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1546:SID"
username="scott" password="tiger" maxActive="8" maxIdle="4"
validationQuery="select 1 from dual"
testOnBorrow="true"/>
war文件中的context.xml示例:
<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
<ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection"
type="javax.sql.DataSource"/>
</Context>
答案 2 :(得分:8)
将配置存储在战区之外是一种很好的做法。在我们的WAR中,我们有一个默认位置来查找属性文件。如果默认值不起作用,您可以通过JVM参数或conf / Catalina / [host]目录中的上下文片段中定义的上下文参数指定位置。例如,
<Context docBase="/server/app.war"
swallowOutput="true" unpackWAR="false" useNaming="false">
<Parameter name="config-file" value="/config/db.properties" override="true" />
</Context>