覆盖配置

leap提供了非常强大的覆盖配置功能,所谓覆盖配置,就是我们通过配置覆盖系统或者框架做好的默认配置,这使得leap可以做一个开箱即用的产品,也可以开箱定制配置。

在leap的配置中,很多地方可以使用override=true来指定覆盖默认配置。

property配置覆盖

假设我们在配置文件conf/config/property.xml中有如下配置:

<property name="property1">property1</property>

另外在conf/config.xml中有如下配置:

<property name="property1" override="true">override-property1</property>

那么最终启动完成后,读取的配置是:

property1=override-property1

如果我们把override="true"去掉,则会启动报错,提示有重复的配置。

bean配置覆盖

假设我们在配置文件conf/beans/bean.xml中有如下配置:

<bean type="demo.bean.BeanService" class="demo.bean.BeanService" lazy-init="false" primary="true">
</bean>

conf/beans.xml中有如下配置:

<bean type="demo.bean.BeanService" class="demo.bean.BeanService" lazy-init="false" primary="true" override=true>
    <property name="service" ref-id="beanservice"></property>
</bean>

最终生成的bean是包含service属性的bean,如果没有使用override="true"这里会抛出重复的bean的异常。

注意:这里的primary="true"表示的是主要的bean,同一个type可以有多个bean,但是只能有一个主要的bean,在依赖注入的时候会优先选择主要的bean,如果需要覆盖主要的bean则需要使用override

sql配置覆盖

同样的,下面是一个覆盖leap内部sql的sql配置例子:

<command key="security.findUserDetailsById" override="true">
    select * from User where id = :userId
</command>

leap中默认使用了一个sql配置,key是security.findUserDetailsById,我们依然可以通过override的方式覆盖默认的配置。

默认配置覆盖规则

在leap中,几乎所有的默认配置都是可以由我们覆盖并重新配置的,但是我们需要先了解leap的覆盖规则:

配置了override=true之后,leap会根据配置读取的先后顺序,使用后读到配置覆盖先读到的配置。

注意这个规则,如果反过来的话,leap是无法覆盖配置的,也就是说,如果在先读到的配置中写了override=true,后读到的配置没有写,那么leap依然会抛出重复配置的异常。

所以我们还需要了解leap对配置的读取顺序:

  • leap会先读取目录深度最深的配置
  • 同一目录深度下,leap根据配置文件名排序并读取

按照这个顺序,一般来说,jar包中打包的配置是最早读取的,其次就是conf中目录最深的配置,然后依次到最外层配置。

results matching ""

    No results matching ""