3.4 配置文件

在第2章介绍Spring Boot项目结构的时候简单提到了配置文件,本节将对Spring Boot的配置文件进行介绍。

3.4.1 配置文件类型

在使用IntelliJ IDEA创建Spring Boot项目时,IDE会在src/main/java/resources目录下创建一个application.properties文件。在这种情况下,我们使用配置的时候需要使用下面的格式(以端口号配置为例),如代码清单3-7所示。

代码清单3-7 properties文件配置端口号

    server.port=8888

当然,我们也可以将配置文件application.properties后缀修改为.yml格式,即文件全名为application.yml。在这种格式下,端口配置如代码清单3-8所示。

3.4.2 自定义属性

前面介绍了两种配置文件的格式,这里以properties文件为例,在application.properties中自定义几个属性,如代码清单3-9所示。

代码清单3-9 Spring Boot配置自定属性

    book.name=Spring Boot 2实战之旅
    book.author=杨洋

在类中,如果需要读取配置文件的内容,那么只需要在属性上使用@Value("${属性名}"),新建一个TestController,在其中创建一个test1方法进行测试。TestController的完整内容如代码清单3-10所示。

启动工程,在浏览器上访问http://localhost:8080/test1,可以看到浏览器显示:“本书书名是:Spring Boot 2实战之旅,作者是:杨洋”。

注 意

在application.properties中配置中文值,读取时会出现中文乱码问题。因为Java默认会使用ISO-8859-1的编码方式来读取*.properties配置文件,而SpringBoot应用则以UTF-8的编码方式来读取,就导致产生了乱码问题。

对于这个问题,官方推荐的做法是:“Characters that cannot be directly represented in this encoding can be written using Unicode escapes”,大致意思就是使用Unicode的方式来展示字符。例如上述代码中的book.author=杨洋应该配置成book.author=\u6768\u6d0b。

3.4.3 使用随机数

在配置文件中,还提供了随机数供我们使用,即在配置文件中使用${random}来生成不同类型的随机数,大致分为随机数、随机uuid、随机字符串等。在配置文件内添加几种利用随机数创建的属性,如代码清单3-11所示。

代码清单3-11 配置文件使用随机数

    # 随机字符串
    book.value=${random.value}
    # 随机int值
    book.intValue=${random.int}
    # 随机long值
    book.longValue=${random.long}
    # 随机uuid
    book.uuid=${random.uuid}
    # 1000以内随机数
    book.randomNumber=${random.int(1000)}
    # 自定义属性间引用
    book.title=书名是: ${book.name}

在配置了这么多属性后,可以使用JavaBean模式来给属性赋值,创建一个BookConfigBean实体类。由于自定义属性的前缀都是由book开头的,因此我们可以在实体类上加入注解@ConfigurationProperties(prefix = "book"),同时需要在启动类上加入注解@EnableConfigurationProperties(BookConfigBean.class),表明启动这个配置类。实体类内容如代码清单3-12所示(这里省略了set、get方法)。

到这里,配置就完成了。接下来在TestController中利用@Autowired注解注入BookConfigBean类,并且创建一个test2方法进行测试。test2方法及注入BookConfigBean类的内容如代码清单3-13所示。

在浏览器上访问http://localhost:8080/test2进行测试,显示结果如下:

3.4.4 多环境配置

在开发Spring Boot项目的时候,可能有这样的情况,一套程序需要在不同的环境中发布,数据库配置、端口配置或者其他配置各不相同,如果每次都需要修改为对应环境配置,不仅耗费人力,而且特别容易出现错误,造成不必要的麻烦。

通常情况下,我们可以配置多个配置文件,在不同的情况下进行替换。而在Spring Boot项目中,我们新建几个配置文件,文件名以application-{name}.properties的格式,其中的{name}对应环境标识,比如:

• application-dev.properties:开发环境。

• application-test.properties:测试环境。

• application-prod.properties:生产环境。

然后,可以在主配置文件(application.properties)中配置spring.profiles.active来设置当前要使用的配置文件。比如,在主配置文件中配置本次指定使用的配置文件后缀,配置内容如代码清单3-14所示。

代码清单3-14 application.properties配置文件

    spring.profiles.active=test

创建application-dev.properties配置文件,在文件中配置端口号为8081,配置文件内容如代码清单3-15所示。

代码清单3-15 application-dev.properties配置文件

    server.port=8081

创建application-test.properties配置文件,在文件中配置端口号为8082,配置文件内容如代码清单3-16所示。

代码清单3-16 application-test.properties配置文件

    server.port=8082

启动项目或者打成JAR包形式都会自动读取对应配置文件,可以在控制台看到启动端口号为8082。

3.4.5 自定义配置文件

前面介绍了多环境配置文件,我们也可以使用自定义配置文件,比如新建一个test.properties,配置文件内容如代码清单3-17所示。

代码清单3-17 test.properties配置文件

    com.book.name=Spring Boot 2实战之旅
    com.book.author=杨洋

与之前一样,新建一个javabean来读取配置文件。新建一个ConfigBean,在类上加上注解@PropertySource(value = "classpath:test.properties"),并且和之前一样需要加入@ConfigurationProperties(prefix = "com.book"),实体类代码如代码清单3-18所示(省略了set、get方法)。

同样,在TestController中注入bean并且创建测试方法,内容如代码清单3-19所示。

使用浏览器访问http://localhost:8080/test3,可以看到显示如下内容:

    {"name":"Spring Boot 2实战之旅","author":"杨洋"}