美文网首页springbootjava进阶干货Spring Boot
Spring Boot实际应用讲解(二):配置详解

Spring Boot实际应用讲解(二):配置详解

作者: ZYRzyr | 来源:发表于2017-11-14 11:02 被阅读481次

    文/ZYRzyr
    原文链接:http://www.jianshu.com/p/d4c7f33c9b37

    本文提纲
    一、默认配置
    二、自定义配置(属性)
    三、适配多环境
    四、最后

    本文运行环境

    Ubuntu 16.04 LTS
    JDK 8 +
    IntelliJ IDEA ULTIMATE 2017.2
    Maven 3.5.0
    Spring Boot 1.5.8.RELEASE
    

    一、默认配置

    Spring Boot提供了很多默认配置,不需要进行显示声明,并且大多数的默认配置已经能满足实际的开发,节省了很多时间。
    通常一个moudle中的配置文件为:application.ymlapplication.properties,里面可以声明如数据库连接、tomcat、缓存等等非常多的配置,可根据项目实际需要进行配置。.yml.properties区别仅在于.yml使用YAML语法进行书写,更方便人阅读,所以本系列文章,均使用.yml作为后缀的配置文件。
    某些情况下,需要改变配置参数,比如项目运行时进行配置参数修改,需要遵循以下配置优先级:

    1. 命令行参数
    2. 来自java:comp/env的JNDI属性
    3. Java系统属性(System.getProperties())
    4. 操作系统环境变量
    5. RandomValuePropertySource 属性类生成的 random.* 属性
    6. 应用以外(jar包外部)的 application.yml(或 properties)(带spring.profile)文件
    7. 打包在应用内(jar包内部)的 application.yml(或 properties)(带spring.profile)文件
    8. 应用以外(jar包外部)的 application.yml(或 properties)(不带spring.profile)文件
    9. 打包在应用内(jar包内部)的 application.yml(或 properties)(不带spring.profile)文件
    10. @Configuration注解类上的@PropertySource
    11. SpringApplication.setDefaultProperties 声明的默认属性

    由于涉及内容众多,本系列暂不展开细讲。

    二、自定义配置(属性)

    2.1 定义属性类

    一本书的属性包含:书名、价格、页数等,定义一个Book类,如下:

    package com.zyr.demo.domain;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component  //将该类作为Bean注入Spring容器
    @ConfigurationProperties(prefix = "book")  //配置文件中user前缀的属性将自动绑定到本类对应的字段
    public class Book {
        private String name;
        private Double price;
        private Integer page;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Double getPrice() {
            return price;
        }
    
        public void setPrice(Double price) {
            this.price = price;
        }
    
        public Integer getPage() {
            return page;
        }
    
        public void setPage(Integer page) {
            this.page = page;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "name='" + name + '\'' +
                    ", price=" + price +
                    ", page=" + page +
                    '}';
        }
    }
    

    2.2 添加配置参数

    类定义完成后,就可在application.ymlkey-value的形式,增加想自定义的配置,如下:

    #Book.java的属性
    book:
      name: 一本书
      price: 35.5
      page: 128
    

    配置完成后,当使用Book类的时候,其字段将自动赋值配置中的值。

    2.3 测试

    编写Book的测试类,如下:

    package com.zyr.demo.domain;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import static org.junit.Assert.assertEquals;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class BookTest {
    
        @Autowired
        private Book book;
    
        @Test
        public void test() {
            assertEquals("一本书", book.getName());
            assertEquals(35.5, book.getPrice(), .001);
            assertEquals(128, book.getPage(), .001);
        }
    }
    

    运行测试用例,测试通过,说明上面的自定义配置成功。

    2.4 另外

    Spring BootRandomValuePropertySource类,提供了很多生成随机数的工具,如随机字符串,随机整数,指定范围内的随机数等等。
    直接将application.ymlbook的参数修改如下:

    #Book.java的属性
    book:
      name: ${random.value} #赋值随机字符串
      price: ${random.int}  #赋值随机整数
      page: ${random.int}   #赋值随机整数
    

    BookTest.test改为打印输出Book,多次运行,控制台每次显示的Book的值都不一样:

    @Test
    public void test() {
        System.out.println(book);
    }
    

    三、适配多环境

    通常在一个实际的项目中,会有开发环境,生产环境等,并且在不同的环境中,对应的配置如:数据库配置,端口号配置,缓存配置等,一般会不同,所以需要针对不同的环境,编写不同的配置文件,公用的配置直接写在application.yml中。

    3.1 新增配置文件

    在与application.yml同级的地方,即resources文件夹下新增如下两个配置文件:

    application-dev.yml        //开发环境配置文件
    application-pro.yml        //生成环境配置文件
    

    3.2 使用指定环境的配置文件

    通过在application.yml使用spring.profiles.active配置,即可使用指定环境的配置文件,如:

    #文件`application.yml`
    
    spring:
      profiles:
        active: dev  #使用开发环境配置
    
    文件`application-dev.yml`
    
    #Book.java的属性
    book:
      name: ${random.value} #赋值随机字符串
      price: ${random.int}  #赋值随机整数
      page: ${random.int}   #赋值随机整数
    
    文件`application-pro.yml`
    
    #Book.java的属性
    book:
      name: 一本书
      price: 35.5
      page: 128
    

    3.3 测试

    现在是开发环境,运行上面的测试用例BookTest.test,控制台输出随机数的Book

    Book{name='d326d313d13023c9b32f9f76efe90063', price=1.8404973E9, page=1297575634}
    

    application.yml改为:

    spring:
      profiles:
        active: pro #使用生成环境配置
    

    再次运行测试用例BookTest.test,控制台输出application-pro.yml中指定的Book的值:

    Book{name='一本书', price=35.5, page=128}
    

    最后

    本文介绍了实际开发中Spring Boot常用的配置情况,关于application.yml中详细的配置说明,请参考官方说明

    本文代码已上传至我的GitHub仓库,进入以后将branches切换为2-Config即可看见。

    前篇:
    Spring Boot实际应用讲解(一):Hello World

    后续将推出以下文章,敬请关注!

    Spring Boot实际应用讲解(三):表单验证
    Spring Boot实际应用讲解(四):RESTful API
    Spring Boot实际应用讲解(五):AOP之请求日志
    Spring Boot实际应用讲解(六):MySQL + Spring-data-jpa(Hibernate)
    Spring Boot实际应用讲解(七):统一异常处理
    Spring Boot实际应用讲解(八):MySQL + Mybatis
    Spring Boot实际应用讲解(九):MySQL + Mybatis + Redis

    文中若有错之处,还请各位批评指正,谢谢!

    原文作者/ZYRzyr
    原文链接:http://www.jianshu.com/p/d4c7f33c9b37

    请进入这里获取授权:https://101709080007647.bqy.mobi

    相关文章

      网友评论

        本文标题:Spring Boot实际应用讲解(二):配置详解

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