zoukankan      html  css  js  c++  java
  • Spring-一个由@ImportResource加载引起的问题

    事情的起因

    项目A中依赖了项目B提供的jar包,其中有一部分配置是从jar以xml形式引入的,xml中要求有类似数据库这样的profile的环境配置。会产生一个很奇怪的问题,通过最外层的application.properties文件定义的属性不能被正常解析。

    目录结构:

    项目A:

    - src/main/resources
    |- application.properties
    |- my.properties
    |- context.xml
    - libraries
    |- B.jar
    |-- my2.properties
    |-- context2.xml
    

    代码:
    application.properties

    my.name=application
    

    my.properties

    my.name=my1
    

    context.xml

    <import resource="classpath:context2.xml"/>
    <context:property-placeholder ignore-unresolvable="true" order="2" location="classpath:my.properties"/>
    <bean id="bean1" class="Bean">
        <property name="name"  value="${my.name}" />
    </bean>
    

    my2.properties

    my.name=my2
    

    context2.xml

    <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    	<property name="ignoreUnresolvablePlaceholders" value="true"></property>
    	<property name="location">
    		<value>classpath:my2.properties</value>
    	</property>
    </bean>
    

    运行后,注入的${my.name}只有两种情况,my1 或者my2. 不会是application

    Spring 加载配置文件顺序

    1. application.properties是最先加载的,相同类似的还有application.yml , config/application.properties , application-${profile}.properties
    2. 其他property
    3. @ImportResource引入的xml

    为什么会有这种问题

    如果一个key,user.name 在 application.properties内配置,同时又在xml引用的my.properties文件中引用,会造成在加载xml的Beanfatory中读取到my.properties中的配置,非application.properties的配置

    解决办法

    1. 把application.properties配置到context:property-placeholder/解决,但这个会破坏springboot的profile特性,appliction-${profile}.properties/yml是应对多环境加载的一个优雅方案
    2. my.properties中的信息不配置,默认读取application-${profile}.properties中的,只有1个项目没有问题,涉及jar包传递的不好处理,具有局限性
  • 相关阅读:
    Oracle基础(二)之排序(order by)、限定查询(where)
    Python文件操作
    Python基础二
    Python基础一
    Linux系统学习之 三:新手必须掌握的Linux命令3
    Linux系统学习之 二:新手必须掌握的Linux命令2
    Linux系统学习之 一:新手必须掌握的Linux命令1
    Centos7.5虚拟机无法ping通网关、外网IP地址
    记一次mybatis的坑
    关于正则的那些事儿
  • 原文地址:https://www.cnblogs.com/jason0529/p/13538790.html
Copyright © 2011-2022 走看看