从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数据源,然后: