写在前面

  上一篇文章,简单介绍了创建Spring Boot项目,这篇文章主要记录Spring Boot的简单配置、两种配置文件、通过注解获取配置文件里的值以及多环境的配置。


简单的配置

  上一节创建好一个Spring Boot项目之后,会在src/main/resources下创建一个配置文件application.properties。下面在该配置文件内进行简单的配置。配置如下:

#配置地址,默认就是本地地址
  server.address=127.0.0.1
  #配置服务端口,默认为8080
  server.port=8080
  #配置上下文路径,默认是‘/’
  server.context-path=/boot

.yml配置文件

  在Spring Boot中,还有一种配置文件,被更多开发者所使用。是以.yml结尾的一种配置文件。
  我们首先需要创建这个配置文件,在和application.properties同一个目录下,我们新建一个application.yml文件。在该文件下,配置与上一步一样效果的配置。

#需要注意的是,该类型配置文件,冒号与值之间务必要添加空格!!!
  server:
    address: 127.0.0.1
    port: 8080
    context-path: /boot

  与上一步的区别显而易见,有层次感,结构清晰,所以,建议使用该类型的配置文件。PS:后面的所有配置都是使用.yml配置,还有就是,不管你选择哪种,另一种配置文件就能删除了。


通过注解获取配置文件属性

代码中调用配置文件属性

  在配置文件中,我们可以设置一些属性,供代码里面调用,比如,我们设置一个人的名字,我们可以在配置文件里这样配置:

server:
    address: 127.0.0.1
    port: 8080
    context-path: /boot
  name: HowieLi
  age: 18

  在代码里调用name的值,需要使用到@Value注解,代码如下:

package cn.howieli;

  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RestController;

  RestController
  public class HelloController {

      @Value("${name}")  //通过${变量名}调用
      private String name;

      @Value("${age}")
      private int age;

      @RequestMapping(value = "/hello", method = RequestMethod.GET)
      public String hello() {
          return name + age;
      }
  }

  此时启动项目,访问http://localhost:8080/boot/hello,就会显示HowieLi18了。

配置文件中调用配置文件中的属性

  在配置文件中,可以通过${变量名}来调用上面的属性,配置如下:

server:
    address: 127.0.0.1
    port: 8080
    context-path: /boot
  name: HowieLi
  age: 18
  content: "name: ${name}, age: ${age}"

  代码中直接调用content就可以了,访问启动的应用显示name: HowieLi, age: 18

配置文件中配置JavaBean

  生活中一个人的属性有很多,不光有姓名、年龄,可能还要有身高、住址等等属性,如果我们在配置文件中全部配置出来,在代码中一个一个通过注解调用会不会感觉很傻?不过,幸好Spring Boot提供了解决方案。现在我们将配置文件修改如下:

person:
    name: HowieLi
    age: 18

之后,创建一个Person类,为属性必须设置getset方法,亲测,不设置,值会为0null,或者直接NullPointerExcepotion,为方便查看,重写一个toString方法。Person类如下:

package cn.howieli;

  import org.springframework.boot.context.properties.ConfigurationProperties;
  import org.springframework.stereotype.Component;

  @Component    //将Person类交由Spring容器管理
  @ConfigurationProperties(prefix = "person")   //填写配置文件中的前缀
  public class Person {
      private String name;
      private int age;

      public String getName() {
          return name;
      }
      public void setName(String name) {
          this.name = name;
      }
      public int getAge() {
          return age;
      }
      public void setAge(int age) {
          this.age = age;
      }
      @Override
      public String toString() {
          return "Person [name=" + name + ", age=" + age + "]";
      }
  }

  使用@Autowired注解注入,调用数据:

package cn.howieli;

  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RestController;

  @RestController
  public class HelloController {

      @Autowired
      private Person person;

      @RequestMapping(value = "/hello", method = RequestMethod.GET)
      public String hello() {
          return person.toString();
      }
  }

  重新启动项目,访问显示Person [name=HowieLi, age=18]


多环境配置

  在实际开发中,可能会针对不同的环境进行开发,我们作为开发人员,总不能每次部署项目都一个一个的去更改配置吧?我们需要把有限的时间放到更有意义的事上。
  接下来,我们在配置文件所在目录下新键一个作为开发环境的配置文件:application-dev.yml,配置如下:

server:
    address: 127.0.0.1
    port: 8080
    context-path: /boot
  person: 
    name: Lihao 
    age: 20

再创建一个作为生产环境的配置文件:application-prod.yml,配置如下:

server:
    address: 127.0.0.1
    port: 8080
    context-path: /boot
  person: 
    name: HowieLi
    age: 18

此时,修改原配置文件application.yml,配置如下:

spring: 
    profiles:
    active: dev

  此时重新启动应用,访问http://localhost:8080/boot/hello,就会显示Person [name=Lihao, age=20]nameage的值是开发环境下,也就是application-dev.yml配置文件中的值。反之,将dev修改为prod,重新启动应用访问就会显示Person [name=HowieLi, age=18]devprod主要取决于之前创建的两个配置文件。
  补充一点,在使用java -jar命令也可以指定不同的profile启动,命令如下:

java -jar my-spring-boot.jar --spring.profiles.active=dev

  不清楚该命令的可查看我的上一篇博客:Spring Boot学习笔记-STS创建第一个Spring Boot应用 (其它启动方式部分)


结语 

 以上就是我自己的学习笔记,如有补充或有错,请一定要指正,一起进步