首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在启动时在Tomcat配置中指定系统属性?

如何在启动时在Tomcat配置中指定系统属性?
EN

Stack Overflow用户
提问于 2008-12-16 20:59:21
回答 8查看 181.9K关注 0票数 76

我知道我可以通过将参数与"-Dmy.prop=value".一起传递给-D参数来指定Tomcat的系统属性

我想知道是否可以通过在context.xml文件或其他tomcat配置文件中指定属性值来实现这一点。我之所以这样做是因为,首先,这样更容易跟踪我的属性,其次,我有多个上下文在运行,我不知道如何通过-D参数指定上下文特定的属性。

我使用的是Tomcat 5.5版。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-12-18 03:22:57

(更新:如果我可以删除这个答案,我会的,尽管因为它被接受了,所以我不能。我正在更新描述,以提供更好的指导,并阻止人们使用我在原始答案中概述的糟糕的实践)。

您可以通过上下文或环境参数指定这些参数,例如在context.xml中。请参阅此页上标题为"Context Parameters“和"Environment Entries”的部分:

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html

正如@netjeff指出的那样,这些值将通过Context.lookup(String)方法可用,而不是作为系统参数。

指定这些值的另一种方法是在要部署的web应用程序的web.xml文件中定义变量(见下文)。正如@Roberto Lo Giacco指出的那样,这通常被认为是一种糟糕的实践,因为部署的工件不应该是特定于环境的。但是,如果您真的想这样做,下面是配置代码片段:

代码语言:javascript
复制
<env-entry>
    <env-entry-name>SMTP_PASSWORD</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>abc123ftw</env-entry-value>
</env-entry>
票数 14
EN

Stack Overflow用户

发布于 2009-01-26 23:01:09

在只使用System.getProperty()的情况下,cliff.meyer最初的回答建议使用<env-entry>不会有什么帮助。

根据Tomcat6.0docs is for JNDI。所以这意味着它不会对System.getProperty()产生任何影响。

使用cliff.meyer示例中的<env-entry>,下面的代码

代码语言:javascript
复制
System.getProperty("SMTP_PASSWORD");

将返回null,而不是值"abc123ftw“。

根据Tomcat6文档,要使用<env-entry>,必须编写如下代码才能使用<env-entry>

代码语言:javascript
复制
// Obtain our environment naming context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");

// Look up our data source
String s = (String)envCtx.lookup("SMTP_PASSWORD");

注意:我还没有实际尝试过上面的例子。但是我用System.getProperty()尝试过<env-entry>,这肯定不起作用。

票数 29
EN

Stack Overflow用户

发布于 2008-12-28 14:49:59

一般来说,你不应该依赖系统属性来配置webapp --它们可以用来配置容器(例如Tomcat),但不能用来配置运行在tomcat中的应用程序。

cliff.meyers已经提到了你应该在你的way应用中使用的方式。这是标准的方式,也适合您通过context.xml或server.xml方式进行配置的问题。

也就是说,如果您确实需要tomcat中的系统属性或其他jvm选项(如最大内存设置),则应该创建一个名为"bin/setenv.sh“或"bin/setenv.bat”的文件。这些文件不存在于您下载的标准归档中,但如果它们存在,则在启动期间执行内容(如果您通过启动.sh/启动p.bat启动tomcat )。这是将您自己的设置与标准tomcat设置分开的一种很好的方式,并使更新变得更容易。不需要调整startup.sh或catalina.sh。

(如果您将tomcat作为windows服务执行,则通常使用tomcat5w.exe、tomcat6w.exe等来配置该服务的注册表设置。)

编辑:另外,另一种可能性是使用JNDI Resources

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/372686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档