美文网首页
spring的xml配置文件中获取环境变量,动态配置文件路径

spring的xml配置文件中获取环境变量,动态配置文件路径

作者: aker0215 | 来源:发表于2019-04-17 15:22 被阅读0次

    场景

    想要一个发布包部署uat和生产环境,但是uat和生产的数据库以及周边服务提供方的url不一致,同一套配置不能通用。
    之前都是在maven打包阶段选取profile,然后把对应环境的配置替换到发布包里。这个包只适用于特定的环境

    解决方案

    1. 发布环境添加环境变量,DEPLOY_ENV=dev(或者uat/prod等等)标记当前环境
    2. 本地存放多套配置文件,分别放到对应环境目录下
    3. 配置加载的时候,文件路径加上 System.getenv("DEPLOY_ENV") 获取当前环境信息
    4. spring的properties配置文件读取增加环境变量的配置,如:
    <bean id="propertyConfigurer" 
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:config/#{systemEnvironment['DEPLOY_ENV']?:'dev'}/datasource/jdbc.properties</value>
                    <value>classpath:config/#{systemEnvironment['DEPLOY_ENV']?:'dev'}/fxt/server.properties</value>
                </list>
            </property>
        </bean>
    

    其中 #{systemEnvironment['DEPLOY_ENV']?:'dev'} 用来获取环境变量DEPLOY_ENV,默认为“dev”

    优缺点

    缺点很明显,一个包里边需要放所有环境的配置信息,可能会到只所有环境信息泄露的安全问题?多套配置管理繁琐,当然之前通过maven打包的时候放入对应环境的配置也是需要维护多套环境的配置,这点上并没有什么优化

    优点就是可以一个包通用所有环境了,通过自动化发布脚本配置对应环境的DEPLOY_ENV环境变量。

    后续如果抛弃springMVC的话,可以引入spring cloud的config server组件,方便不同环境的配置问题

    相关文章

      网友评论

          本文标题:spring的xml配置文件中获取环境变量,动态配置文件路径

          本文链接:https://www.haomeiwen.com/subject/pmrnwqtx.html