Java 在何处/如何设置Tomcat.war文件的配置资源
我需要修改.war文件的源代码树,以便添加一些特定于应用程序的配置信息(在本例中为jdbc连接字符串,但可能有其他属性,如资源)。将配置信息放在何处以及如何从Servlet中访问配置信息的最佳实践是什么Java 在何处/如何设置Tomcat.war文件的配置资源,java,configuration,tomcat,Java,Configuration,Tomcat,我需要修改.war文件的源代码树,以便添加一些特定于应用程序的配置信息(在本例中为jdbc连接字符串,但可能有其他属性,如资源)。将配置信息放在何处以及如何从Servlet中访问配置信息的最佳实践是什么 我猜这与此有关,但当我尝试阅读它时,我的眼睛会变得呆滞。对于JDBC连接字符串的特定情况,我建议使用Tomcat托管连接池。您可以在此处阅读有关此操作的更多信息: 这需要更多的工作,但我认为从长远来看,它会更好地为您服务。对于web应用程序配置,您可以将配置放在类路径的某个位置。然后,如果您喜
我猜这与此有关,但当我尝试阅读它时,我的眼睛会变得呆滞。对于JDBC连接字符串的特定情况,我建议使用Tomcat托管连接池。您可以在此处阅读有关此操作的更多信息:
这需要更多的工作,但我认为从长远来看,它会更好地为您服务。对于web应用程序配置,您可以将配置放在类路径的某个位置。然后,如果您喜欢Spring,您可以通过应用程序访问它:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:my-config.properties</value>
</list>
</property>
</bean>
例如,如果将my-config.properties放在.jar文件和WEB-INF/classes中,则将使用WEB-INF/classes中的属性。您可以使用此机制在prod服务器上默认测试配置并覆盖prod配置。Hmm。在应用程序的Java端获得所需内容的最简单方法似乎是使用
Servlet.getServletConfig()。
例如getInitParameter(“myApp.connectionString”)
但我不知道该放在哪里。本文讨论了context.xml的各种排列,但我想确保这个参数只影响我的servlet,而不影响任何其他参数。我也不想在.war文件中找到它,这样我就可以使这个参数独立于应用程序(例如,如果我安装了升级)
更新:我发现,${CATALINA_HOME}/conf/server.xml中的go-here(或can-go-here)可以访问键/值参数:
<Server port=... >
...
<Service name="Catalina" ...>
<Engine name="Catalina" ...>
...
<Host name="localhost" ...>
<Context path="/myWarFile">
<Parameter name="foo" value="123" />
<Parameter name="bar" value="456" />
...
</Context>
</Host>
</Engine>
</Service>
</Server>
您可以在“common”类加载器common.loader中的
CATALINA_HOME/conf/CATALINA.properties
中添加属性文件的路径。谢谢。。。从长远来看,你可能是对的,但这可能是我将长期开发的唯一一款Tomcat应用程序+我没有太多的空闲时间来考虑如何调整我的应用程序。apache文档不是很清楚。在花时间梳理我的头发(唉…)和查看JIRA server.xml之后,现在这就更有意义了。但是,如何从Java应用程序中访问数据源?示例页面给出了一个JSP示例,但没有给出Java代码示例。它们还包括下面的几个示例(例如,在PostgreSQL部分的步骤4中)。这个问题中还有另一个示例:这是一个仅链接的答案。您能用链接源的摘录来丰富它吗?这些参数在web.xml文件的servlet标记中配置,使用:init param、param name和param value。哪个web.xml文件?是在my.war文件中还是在${CATALINA_HOME}/conf中?如果是前者,我不需要这样做,如果是后者,我不理解适当的语法。相反的呢?如果我想在web应用程序中有一个属性文件,以防找不到Tomcat文件。有办法做到这一点吗?WEB应用程序中不是有WEB\u INF/类吗?
<Server port=... >
...
<Service name="Catalina" ...>
<Engine name="Catalina" ...>
...
<Host name="localhost" ...>
<Context path="/myWarFile">
<Parameter name="foo" value="123" />
<Parameter name="bar" value="456" />
...
</Context>
</Host>
</Engine>
</Service>
</Server>
<Server port=... >
<Service name="Catalina" ...>
<Engine name="Catalina" ...>
<Host name="localhost" ...>
<Context path="/jira" docBase="${catalina.home}/atlassian-jira"
reloadable="false">
<Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
username="jirauser"
password="..."
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/jiradb1?autoReconnect=true&useUnicode=true&characterEncoding=UTF8"
maxActive="20"
validationQuery="select 1"
/>
</Context>
</Host>
</Engine>
</Service>
</Server>