zoukankan      html  css  js  c++  java
  • SpringBoot2(006):关于配置类(Configuration Classes)和自动配置(Auto-configuration)

    Spring Boot2系列文章可以通过这里进行回顾:SpringBoot2(001):入门介绍、官网参考和博客汇总


      接下来这一篇主要是对 配置类(Configuration Classes) 和 自动配置(Auto-configuration) 进行说明,分别参考 15. Configuration Classes 和 16. Auto-configuration ,目录如下:

    1、配置类(Configuration Classes)

      Spring Boot 支持 基于 xml 的配置,但更偏向于使用基于 Java 的配置,通常建议使用定义有 main 方法的主 @Configuration 类(主配置类)

    小提示:对于基于 xml 的 spring 配置,建议尽可能使用对等的基于 java 的配置进行替换,使用 Enable* 注解会是一种比较好的切入方式。

    1.1、导入其他的 Configuration Classes

      所有的 @Configuration 并不需要都放置在同一个类中,可以考虑分散在多个类,并且通过 @Import 注解 导入。另一种方式则是通过使用 @ComponentScan 自动扫描 spring 配置,其中就包含了 @Configuration classes 。这对于导入其他项目的配置类或者公共配置类就显得比较重要了。毕竟默认的 @SpringBootApplication 只会扫描所在的 root package ,并不一定所有的配置类都会在这个默认包路径下。

      举个例子,在 com.wpbxin 这个 root package 下,我们建一个 config 包,也就是 com.wpbxin.config,专门用于存放各种 @Configuration ,这样,主类就完全不需要关注到底需要进行哪些扫描配置,因为这些都会被默认加载, config 中的任何增删在代码层面对主类都是无感的:

    package com.wpbxin.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Import;
    
    @Configuration
    @Import({com.wpbxin.config.XMLConfig.class,com.wpbxin.config.MapperConfig.class})
    public class ImportConfig {
    
    }
    
    
    package com.wpbxin.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.wpbxin.mapper")
    public class MapperConfig {
    
    }

     

    1.2、导入 xml 配置

      确实还是需要使用 xml 配置的,建议还是从 @Configuration 类开始,通过 @ImportResource 注解来加载 xml 配置文件。举个例子,如果旧项目中配置了 dubbo 的xml文件,可以通过以下这种方式引进来,后续如果换成其他 RPC 框架,可以直接新增配置类即可,这样对代码的侵入性就会降低很多:

    package com.wpbxin.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.ImportResource;
    
    @Configuration
    @ImportResource("classpath:dubbo-*.xml")
    public class XMLConfig {
    
    }

     

    2、自动配置(Auto-configuration)

      Spring Boot 的 auto-configuration(自动配置)会基于工程应用中添加的 jar 依赖进行自动配置。例如,如果 classpath 中有 HSQLDB,并且应用中没有手动配置数据库连接的 bean,Spring Boot 会自动配置一个默认的内存数据库。

      要开启使用 auto-configuration ,我们只需添加 @EnableAutoConfiguration注解 或者 @SpringBootApplication 注解中的一个到某一个 @Configuration 类中就可以。

    小提示:@EnableAutoConfiguration注解 或者 @SpringBootApplication 注解,必须二选一,而且通常建议配置在主 @Configuration 类中。

    2.1、逐步替换自动配置

      Auto-configuration 是非侵入式的,任何时候都可以使用自定义配置来替换默认的自动配置,比如自定义的 DataSource。

      可以通过 --debug 参数开启 debug 级别日志信息的记录,来查看具体加载了哪些自动配置项和相关的加载状态。

    2.2、如何关闭特定的 Auto-configuration Classes

      如果发现有不需要的自动配置项,可以通过使用 @EnableAutoConfiguration 的 exclude 属性来关闭指定的自动配置,例如这里关闭 DataSource 配置:

    import org.springframework.boot.autoconfigure.*;
    import org.springframework.boot.autoconfigure.jdbc.*;
    import org.springframework.context.annotation.*;
    
    @Configuration
    @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    public class MyConfiguration {
    
    }

       如果指定的类没有在 classpath 里,还可以使用注解的 excludeName 属性并指定全限定名。最后,还可以通过使用 spring.autoconfigure.exclude 来排除限定的自动配置列表类。

    小提示:通过注解级别和使用属性级别都可以排除特定的自动配置项。

    3、参考

  • 相关阅读:
    /etc/security/limits.conf 配置
    docker 私有仓库镜像的存储位置
    docker 私有仓库镜像的存储位置
    docker 数据映射方案
    docker 数据映射方案
    docker 容器开启ssh服务
    docker 容器开启ssh服务
    docker 容器扩盘
    docker 容器扩盘
    Python爬虫从入门到精通——基本库re的使用:正则表达式
  • 原文地址:https://www.cnblogs.com/wpbxin/p/11961764.html
Copyright © 2011-2022 走看看