web.xml中的PropertyPlaceholders

时间:2012-07-05 01:31:52

标签: spring configuration java-ee-6 placeholder

我正在使用以下内容:

  • Spring 3.1
  • Java EE 6(GlassFish 3.1.2)
  • Maven用于项目构建等
  • 用于实时部署的Ant

我们有很多工作环境:DEV,UAT,TRAINING,PROD等。在我们的TRAINING环境中,我已经请求将会话超时提升到8小时。在所有其他环境中,它是2小时。我喜欢做的只是在web.xml中使用属性占位符。但我不认为这是可能的:

<session-config>
    <session-timeout>${session.timeout}</session-timeout>
</session-config>

我想到的解决方案是:

  1. 使用Maven过滤 - 我真的不希望这样做。这将意味着一场单独的训练战。
  2. web.xml删除会话超时,并在8小时后将TRAINING中的GlassFish配置为超时 - 我不太喜欢这个,因为我宁愿保持所有环境纯净且同步。
  3. 在一些初始化代码中手动设置。呸。
  4. 我应该提一下,我们使用<env>.properties个文件来配置网络应用。使用VM参数选择属性文件。

    有人能想到另一种更好的解决方案吗?

    提前致谢, 道穆埃尔。

2 个答案:

答案 0 :(得分:0)

如果你可以在一些初始化代码中设置它,那么你就可以从spring获取它。 web.xml是第一个被读取的内容,因此无法对其进行预处理。

那么为什么不这样做呢?创建一些“手动初始化代码”,它与从春天加载会话超时的战争一起部署。

答案 1 :(得分:0)

在SO上查看此question,可以有两种方法但不确定 -

  1. 您可以为每个环境创建不同的web.xml文件,并使用相应的web.xml构建war文件。这是完全可能的。

  2. 您可以使用自定义HttpSessionListener,如上面的链接所示。虽然它有从硬编码值设置的会话超时,但我会尝试从servlet访问上下文初始化参数,如

    Session().getServletContext().getInitParameter("paramName");
    
  3. 并将为不同的环境定义具有不同会话超时值的init参数。我没有测试过这段代码,所以不确定你是否得到了上下文参数。