从context.xml加载Bean属性值
目前我们正在从属性文件加载我们的JDBC源代码值,如下所示:
这个段。 适用于基于classpath的app.properties文件并摆脱app.properties。
我们想从context.xml加载这些值(放在META-INF
或$CATALINA_HOME/conf/context.xml
)。 它将帮助我们在prod / staging服务器上加载正确的值。
将不胜感激任何帮助或替代方法/建议。 (如果已经回答了类似的问题,请分享链接)谢谢!
正如Alan Hay所说,您可以将数据源配置外部化为Tomcat自己的context.xml,然后让Spring执行JNDI查找以检索它。 这是我在一些项目中常用的方法。
你需要实现的目标是:
1.将数据源配置添加到$ CATALINA_HOME / conf / context.xml
2.在应用程序的META-INF / context.xml中添加资源链接
3.修改Spring配置以在JNDI中查找数据源
4.移动驱动程序和数据源jar
由于数据源配置现在是容器管理的,因此您应该将数据库驱动程序和数据源jar放入$ CATALINA_HOME / lib中,以便Tomcat在创建数据源时可以使用它们。 这些jar不再需要驻留在应用程序的WEB-INF / lib中。
我这样做,我的类路径中有默认属性文件,我有一个属性文件,我用它来覆盖那些默认(开发)属性:
在我的春季档案中:
classpath:jdbc.properties classpath:camel.properties classpath:email.properties ${external_config}
在开发中,我使用类路径中的属性文件。
在不同的环境,登台,集成,生产中,我们使用以下参数启动应用程序:
-Dexternal_config=file:c:/staging.properties
这样我可以为所有环境提供相同的构建,并可以选择我的覆盖属性文件的位置。
因此, ${external_config}
是依赖于环境的配置文件的占位符。 Spring查找名为external_config的环境变量,该变量应指向配置文件。 如果找不到该文件,Spring会使用ignoreResourceNotFound = true忽略它;
Spring 3.1引入了对环境特定配置文件的支持。 定义一些配置文件,将它们与一些属性文件相关联,例如test.properties,live.properties,并在服务器start -Dspring.profiles.active = Test上设置环境变量。 干净简单。
http://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/
上面提到的其他选项是转移到通过JNDI查找的容器托管连接池,即在每个服务器上定义名为xyz的JNDI数据源,然后: