zoukankan      html  css  js  c++  java
  • 六、spring boot 核心

    6.1 基本配置

    6.1.1 入口类和@SpringBootApplication

    Spring Boot通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法其实就是一个标准的Java应用的入口方法。在main方法中使用SpringApplication.run(Ch522Application.class,args),启动Spring Boot应用项目。

    @SpringBootApplication是Spring Boot的核心注解,是一个组合注解。源码如下:

    @Target(ElementType.TYPE) 
    @Retention(RetentionPolicy.RUNTIME) 
    @Documented 
    @Inherited 
    @Configuration 
    @EnableAutoConfiguration 
    @ComponentScan 
    public @interface SpringBootApplication { 
        Class<?>[] exclude() default {}; 
        String[] excludeName() default {}; 
    } 
    

    @SpringBootApplication注解主要组合了@Configuration、@EnableAutoConfiguration、@ComponentScan;若不使用@SpringBootApplication注解,则可以在入口类上直接使用@Configuration、@EnableAutoConfiguration、@ComponentScan。

    其中,@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。

    6.1.2 关闭特定的自动配置

    @SpringBootApplication的源码我们可以看出,关闭特定的自动配置应该使用@SpringBootApplication注解的exclude参数,例如:

    @SpringBootApplication(exclude ={DataSourceAutoConfiguration.class}) 
    

    6.1.3 定制Banner

    1.修改Banner
    (1)在Spring Boot启动的时候会有一个默认启动图案

      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
    
    

    (2)我们在src/main/resources下新建一个banner.txt。
    (3)通过 http://patorjk.com/software/taag 网站生成字符,如敲入的为“KK”,将网站生成的字符复制到banner.txt中。

    2.关闭banner
    (1)main里的内容修改为:

    SpringApplication app = new SpringApplication(Ch522Application.class); 
    app.setShowBanner(false); 
    app.run(args); 
    

    6.1.4 Spring Boot的配置文件

    Spring Boot使用一个全局的配置文件application.properties或application.yml,放置在src/main/resources目录或者类路径的/config下。

    6.1.5 starter pom

    Spring Boot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需要的starter pom,相关的技术配置将会消除,就可以得到Spring Boot为我们提供的自动配置的Bean。

    例如:

    名称 描述
    spring-boot-starter spring boot核心starter,包含自动配置,日志,yaml配置文件的支持
    spring-boot-starter-aop 使用spring-aop和AspectJ支持面向切面编程

    6.1.6 使用xml配置

    Spring Boot提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用xml配置,这时我们可以通过Spring提供的@ImportResource来加载xml配置。
    例如:

    @ImportResource({"classpath:some-context.xml","classpath:another-context.xml"}) 
    

    6.2 外部配置

    Spring Boot允许使用properties文件、yaml文件或者命令行参数作为外部配置。

    6.2.1 命令行参数配置

    Spring Boot可以是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:

    java -jar xx.jar
    

    可以通过命令修改Tomcat端口号

    java -jar xx.jar --server.port=8090
    

    6.2.2 常规配置

    在Spring Boot里,我们只需在application.properties定义属性,直接使用@Value注入即可。

    示例
    (1)application.properties增加属性:

    book.author=zzj
    book.name=spring boot
    

    (2)修改入口类

    package com.wisely.ch5_2_2; 
    
    @RestController 
    @SpringBootApplication 
    public class Ch522Application { 
        
         @Value("${book.author}") 
         private String bookAuthor; 
         @Value("${book.name}") 
         private String bookName; 
        
         @RequestMapping("/") 
            String index() { 
                return "book name is:"+bookName+" and book author is:" + bookAuthor; 
            } 
      
        public static void main(String[] args) { 
            SpringApplication.run(Ch522Application.class, args); 
        } 
    } 
    

    6.2.3 类型安全的配置(基于properties)

    上例中使用@Value注入每个配置在实际项目中会显得格外麻烦,因为我们的配置通常会是许多个,若使用上例的方式则要使用@Value注入很多次。

    Spring Boot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。

    示例
    (1)新建spring boot项目
    (2)添加配置,application.properties

    author.name=zzj
    author.age=20
    

    (3)类型安全的Bean,代码如下:

    package com.wisely.ch6_2_3.config; 
      
    import org.springframework.boot.context.properties.ConfigurationProperties; 
      
    @Component 
    @ConfigurationProperties(prefix = "author") //1 
    public class AuthorSettings { 
        private String name; 
        private Long age; 
      
        public String getName() { 
            return name; 
        } 
      
        public void setName(String name) { 
            this.name = name; 
        } 
      
        public Long getAge() { 
            return age; 
        } 
      
        public void setAge(Long age) { 
            this.age = age; 
        } 
    } 
    

    ①通过@ConfigurationProperties加载properties文件内的配置,通过prefix属性指定properties的配置的前缀,通过locations指定properties文件的位置,例如:
    @ConfigurationProperties(prefix = "author",locations = {"classpath:config/author.properties"})

    (4)检验代码

    package com.wisely.ch6_2_3; 
    
    @RestController 
    @SpringBootApplication 
    public class Ch623Application { 
        
        @Autowired 
        private AuthorSettings authorSettings; //1 
        @RequestMapping("/") 
        public String index(){ 
               return "author name is "+ authorSettings.getName()+" and author age is "+authorSettings.getAge(); 
        } 
        public static void main(String[] args) { 
            SpringApplication.run(Ch623Application.class, args); 
        } 
    } 
    

    6.3 日志配置

    Spring Boot支持Java Util Logging、Log4J、Log4J2和Logback作为日志框架,无论使用哪种日志框架,Spring Boot已为当前使用日志框架的控制台输出及文件输出做好了配置。

    logging.file=/logs/mylog   日志文件名
    logging.level.org.springframework=DEBUG  日志级别
    

    6.4 Profile 配置

    Profile是Spring用来针对不同的环境对不同的配置提供支持的,全局Profile配置使用application-{profile}.properties(如application-prod.properties)。
    通过在application.properties中设置spring.profiles.active=prod来指定活动的Profile。

    6.5 Spring Boot运行原理

    Spring Boot关于自动配置的源码在spring-boot-autoconfigure-1.3.0.x.jar内。

    6.5.1 运行原理

    关于Spring Boot的运作原理,我们还是回归到@SpringBootApplication注解上来,这个注解是一个组合注解,它的核心功能是由@EnableAutoConfiguration注解提供的。

    @Target(ElementType.TYPE) 
    @Retention(RetentionPolicy.RUNTIME) 
    @Documented 
    @Inherited 
    @Import({ EnableAutoConfigurationImportSelector.class, AutoConfigurationPackages.Registrar.class }) 
        public @interface EnableAutoConfiguration { 
            Class<?>[] exclude() default {}; 
            String[] excludeName() default {}; 
    } 
    

    这里的关键功能是@Import注解导入的配置功能,EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。

  • 相关阅读:
    shell 自动登录 上传 下载
    用例设计----PICT&Allpairs
    已有实例 Oracle 下新增实例
    【原创】安卓兼容性测试
    【原创】某版本性能测试
    【原创】Jmeter正则表达式提取json中多个关联值
    【转】四种常见的 POST 提交数据方式
    rfw使用接口库测试--FAIL : UnicodeEncodeError: 'ascii' codec can't encode characters in position
    【原创】Robotframework 简介
    java学习笔记_内存分析
  • 原文地址:https://www.cnblogs.com/phtjzzj/p/7591903.html
Copyright © 2011-2022 走看看