java - 在 Tomcat 中将配置与 WAR 分离的优雅方法

标签 java spring configuration tomcat

我正在尝试找到在 Tomcat 中运行的 Spring webapp 中传递复杂配置的最佳方法。目前我使用 JNDI 将数据源和字符串从 Tomcat 上下文传递到 webapp,这很好用。

但是,假设我需要选择通知服务的实现。 Spring 无法有条件地选择要实例化的 bean(尽管过去我使用 JNDI 字符串通过设置 contextConfigLocation 来导入预定义的 bean 配置)。

我还看到许多 webapps 提供了一个配置工具来创建一个自定义的 WAR 文件。在我看来,这是一种糟糕的形式,如果没有其他原因,它会阻止从上游重新部署 WAR,而无需进行许多检查以确保重新应用所有配置。

理想情况下,我可以提供一个 Spring XML 文件,该文件存在于 webapp 之外的文件系统中。但是,spring import 指令似乎无法解析 ${} 变量,因此无法提供自定义。

我可以在这里使用任何技术来正确地将复杂的配置与 web 应用分开吗?

最佳答案

如果我想要配置一组特定的 bean,并且此配置必须与 WAR 文件分开,我通常会执行以下操作:

applicationContext.xml中:

<!-- here you have a configurer based on a *.properties file -->
<bean id="configurer" 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="file://${configDir}/configuration.properties"/>
    <property name="ignoreResourceNotFound" value="false" />
    <property name="ignoreUnresolvablePlaceholders" value="false" />
    <property name="searchSystemEnvironment" value="false" />
</bean>

<!-- this is how you can use configuration properties -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="${smtp.host}"/>
</bean>

configuration.properties中:

smtp.host=smtp.your-isp.com

您还需要使用 -DconfigDir=/path/to/configuration/directory 启动 Tomcat

关于java - 在 Tomcat 中将配置与 WAR 分离的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719857/

相关文章:

spring - hibernate 问题

configuration - 如何为严密的防火墙配置 Apache Spark 随机工作端口?

读取 PDPage 时出现 java.io.IOException : RandomAccessBuffer already closed,

java - 如何在不调整大小的情况下将组件添加到 JFrame 中?

java - Spring Hibernate - 查询以将附加列映射到我的实体 - java.sq.SQLException : Column not found

java - 在线 cooking 书..我可以使用 Springtool 和 Java 吗?

emacs - 为 Latex 配置 emacs - void-variable LaTeX-mode-hook

asp.net-core - 手动触发IOptionsMonitor<>.OnChange

Java 进程生成器 : external process hangs

java - 来自其他类的@Autowired @Bean