第3章 Spring Boot的配置

第3章 Spring Boot的配置

我们知道Spring Boot遵循“约定优于配置”的原则,绝大部分配置项都约定了默认值,Spring Boot甚至可以做到无须任何手动配置就能启动成功,这大大降低了系统配置的复杂程度。当然,Spring Boot也支持自定义修改系统配置,比如系统端口、启动图案、数据库连接等配置。下面介绍Spring Boot在实际项目中使用到的系统配置、如何自定义配置。

3.1 系统配置文件

本节讲述Spring Boot的系统配置文件,包括application.properties和application.yml配置文件的使用以及YML和Properties配置文件有什么区别,最后介绍如何更改Spring Boot的启动图案。

3.1.1 application.properties

Spring Boot支持两种不同格式的配置文件:一种是Properties,另一种是YML。Spring Boot默认使用application.properties作为系统配置文件,项目创建成功后会默认在resources目录下生成application.properties文件。该文件包含Spring Boot项目的全局配置。我们可以在application.properties文件中配置Spring Boot支持的所有配置项,比如端口号、数据库连接、日志、启动图案等。接下来将介绍在Spring Boot项目开发过程中与配置相关的一些知识。

3.1.1.1 基本语法

Spring Boot项目创建成功后会默认resources目录下会自动创建application.properties文件。使用也非常简单,配置格式如下:

# 服务器端口配置
server.port=8081

在上面的示例中配置了应用的启动端口。如果不配置此项,则默认使用8080端口;如果需要使用其他端口,则通过server.port=8081修改系统启动端口。

此外,Properties文件中的配置项可以是无序的,但是为了保证配置文件清晰易读,建议把相关的配置项放在一起。

3.1.1.2 配置文件加载顺序

Spring Boot项目的配置文件默认存放在resources目录中。实际上,Spring Boot系统启动时会读取4个不同路径下的配置文件:

  • 项目根目录下的config目录。
  • 项目根目录。
  • classpath下的config目录。
  • classpath目录。

Spring Boot会从这4个位置全部加载主配置文件,这4个位置中的application.properties文件的优先级按照上面列出的顺序依次降低。如果同一个属性都出现在这4个文件中,则以优先级高的文件为准。

3.1.1.3 修改默认配置文件名

可能有人会问,项目的配置文件必须命名为application.properties吗?当然不是,我们可以通过修改项目启动类,调用SpringApplicationBuilder类的properties()方法来实现自定义配置文件名称。示例代码如下:

 public static void main(String[] args) {
        new SpringApplicationBuilder(SpringbootDemoApplication.class)              .properties("spring.config.location=classpath:/xueden.properties").run(args);

    }

先在resources文件夹下新建一个xueden.properties文件。

在上面的示例中,Spring Boot项目启动加载时默认读取更改名称的配置文件,即可修改默认加载的application.properties文件名。

3.1.2 application.yml

application.yml是以yml为后缀,使用YAML(YAML Ain’t a Markup Language)的配置文件。与XML等标记语言相比,YMAL结构更清晰易读,更适合用作属性配置文件。

3.1.2.1 基本语法

YML基本语法为key:(空格)value的键值对形式,冒号后面必须加上空格。通过空格的缩进来控制属性的层级关系,只要是左对齐的一列数据,都是同一个层级的。具体格式如下:

server:
  port: 8080
# 热部署生效
spring:
  devtools:
    restart:
      enabled: true
      # 设置重启的目录
      additional-paths: src/main/java
      # classpath目录下的WEB-INF文件夹内容修改不重启
      exclude: WEB-INF/**

在上面的示例中,自定义配置了系统的端口号、热部署等属性。

YML文件虽然格式简洁直观,但是对格式要求较高,使用YML配置文件时需要注意以下几点:

  • 属性值和冒号中间必须有空格,如name: Weiz正确,使用name:Weiz就会报错。
  • 需要注意各属性之间的缩进和对齐。
  • 缩进不允许使用tab,只允许空格。
  • 属性和值区分字母大小写。
3.1.2.2 数据类型

YML文件以数据为中心,支持数组、JSON对象、Map等多种数据格式,因此更适合用作配置文件。

  • 普通的值(数字、字符串、布尔值)
    普通的数据通过k:v的键值对形式直接编写,普通的值类型或字符串默认不用加上单引号或者双引号。
    当然,也可以使用双引号("")来转义字符串中的特殊字符,特殊字符转义后就表示它自身的意思,例如:

    name: "xueden \n .cn"
    

    上面的示例会输出:

    xueden
    ​cn
    

    使用单引号(’’)不会转义特殊字符,所有字符都按照普通字符处理,作为字符串数据,例如:

    name: 'xueden \n .cn'
    

    上面的示例会输出:xueden \n .cn。“\n”字符作为普通的字符串,而不转义为换行。

  • 对象、Map(属性和值)

    对象同样是以k:v的键值对方式展现的,只是对象的各个属性和值的关系通过换行和缩进方式来编写。示例代码如下:

    person:
      lastName: xueden
      age: 20
    

    如果使用行内写法,可以将对象的属性和值写成JSON格式,具体写法如下:

    person1: {lastName: xueden,age: 18} 
    
  • 数组(List、Set)

    数组是以- value的形式表示数组中的元素的,具体写法如下:

    person2:
      - xueden
      - moyu
    

    还可以采用行内写法,数组使用中括号的形式,具体写法如下:

    persons3: [xueden, moyu]
    

我们可以看到,YML文件除了支持基本的数据类型之外,还支持对象、Map、JSON、数组等格式,这样可以在配置文件中直接定义想要的数据类型,无须额外转换。这也是程序员喜欢用application.yml的原因之一。

3.1.3 Properties与YML配置文件的区别

Spring Boot中的配置文件有Properties或者YML两种格式。一般情况下,两者可以随意使用,我们可以根据自己的使用习惯选择适合的配置文件格式。这两者完全一样吗?肯定不是,YML和Properties配置文件的区别如下:

  • YML文件以数据为中心,对于数据的支持和展现非常友好。
  • Properties文件对格式的要求没那么严格,而YML文件以空格的缩进来控制层级关系,对格式的要求比较高,缩进格式不对时容易出错。
  • Properties文件支持@PropertySource注解,而YML文件不支持。
  • YML文件支持多文档块的使用方式,使用起来非常灵活。
  • Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。

3.1.4 自定义系统的启动图案

我们知道Spring Boot程序启动时,控制台会输出由一串字符组成的Spring符号的启动图案(Banner 英 [ˈbænə®] 美 [ˈbænər] )以及版本信息(见图3-1)。

在这里插入图片描述

图3-1 Spring Boot程序默认的后台启动画面

Spring Boot自带的启动图案是否可以自定义呢?答案是肯定的。下面通过示例来演示如何自定义Spring Boot的启动图案。

步骤01 在项目的resources目录下新建banner.txt,示例代码如下:

${AnsiColor.BRIGHT_YELLOW}
                             _
  __ __   _  _     ___    __| |    ___    _ _
  \ \ /  | +| |   / -_)  / _` |   / -_)  | ' \
  /_\_\   \_,_|   \___|  \__,_|   \___|  |_||_|
_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
${AnsiColor.BRIGHT_RED}
Application Name: ${application.title}
Application Version: ${application.formatted-version}
Spring Boot Version: ${spring-boot.formatted-version}


在上面的配置中,通过${}获取application.properties配置文件中的相关配置信息,如Spring Boot版本、应用的版本、应用名称等信息。

  • ${AnsiColor.BRIGHT_RED}:设置控制台中输出内容的颜色,可以自定义,具体参考org.springframework.boot.ansi.AnsiColor。
  • ${application.version}:用来获取MANIFEST.MF文件中的版本号,这就是在Application.java中指定SpringVersion.class的原因。
  • ${application.formatted-version}:格式化后的{application.version}版本信息。
  • ${spring-boot.version}:Spring Boot的版本号。
  • ${spring-boot.formatted-version}:格式化后的{spring-boot.version}版本信息。

步骤02 在application.properties中配置banner.txt的信息。

# 是否显示横幅图案
# 可选值有3个,一般不需要修改
# console:显示在控制台
# log:显示在文件
# off:不显示
# spring.main.banner-mode=console
application.version=1.0.0.0
application.formatted-version=v1.0.0.0
spring-boot.version=2.6.2.RELEASE
spring-boot.formatted-version=v2.6.2.RELEASE
application.title=springboot-demo

步骤03 启动项目,查看修改之后的启动横幅图案是否生效,如图3-2所示。

在这里插入图片描述

图3-2 Spring Boot程序默认的后台启动画面

通过系统输出的启动日志可以看到,系统的启动图案已经变成我们自定义的样子,也就是Spring Boot的默认启动图案已经更改成自定义的启动图案。

Spring Boot也支持使用GIF、JPG和PNG格式的图片文件来定义横幅图案。当然,并不会把图片直接输出在控制台上,而是将图片中的像素解析并转换成ASCII编码字符之后再输出到控制台上。

3.2 自定义配置项

本节将介绍Spring Boot实现自定义配置项(也称为配置属性)。在项目开发的过程中,经常需要自定义系统业务方面的配置文件及配置项,Spring Boot如何实现自定义属性配置呢?其实非常简单,Spring Boot提供了@Value注解、@ConfigurationProperties注解和Environment接口等3种方式自定义配置项。

3.2.1 @Value

在实际项目中,经常需要在配置文件中定义一些简单的配置项,Spring Boot提供@Value注解来设置简单的配置项,默认读取application.properties文件中的配置属性。下面通过示例来演示使用@Value注解添加自定义配置项。

首先,在application.properties配置文件中添加自定义配置项:

xueden.hello = xueden

然后,在使用的位置调用@Value注解来获取配置项的值:

  @Value("${xueden.hello}")
    private String xuedenHello;

在上面的示例中,通过@Value注解获取了配置文件中对应的配置项的值。
需要注意的是:

  • 使用@Value注解时,所在类必须被Spring容器管理,也就是使用@Component、@Controller、@Service等注解定义的类。
  • @Value需要传入完整的配置项的Key值。
  • @Value注解默认读取application.properties配置文件,如果需要使用其他的配置文件,可以通过@PropertySource注解指定对应的配置文件。

3.2.2 Environment

Environment是Spring为运行环境提供的高度抽象的接口,它会自动获取系统加载的全部配置项,包括命令行参数,系统属性,系统环境,随机数,配置文件等。使用时无须其他的额外配置,只要在使用的类中注入Environment即可。下面通过示例演示Environment读取系统自定义的配置项。

首先,在application.properties配置文件中增加如下的配置项:

xueden.name = xueden
xueden.age = 18

Environment读取的是系统中所有的配置。我们既可以在application.properties中设置自定义的配置项,又可以在自定义配置文件中添加配置项。

然后,创建单元测试方法,并注入Environment读取系统配置。示例代码如下:

 @Autowired
    private Environment environment;

    @Test
    void getEnv(){
        System.out.println(environment.getProperty("xueden.name"));
        System.out.println(environment.getProperty("xueden.age"));
    }

上面就是Environment使用的示例代码,非常简单。不过,使用Environment时还需要注意以下两点:

  • 使用Environment无须指定配置文件,其获取的是系统加载的全部配置文件中的配置项。

  • 需要注意配置文件的编码格式,默认为ISO8859-1。

3.2.3 @ConfigurationProperties

在实际项目开发中,需要注入的配置项非常多时,前面所讲的@value和Environment两种方法就会比较烦琐。这时可以使用注解@ConfigurationProperties将配置项和实体Bean关联起来,实现配置项和实体类字段的关联,读取配置文件数据。下面通过示例演示@ConfigurationProperties注解如何读取配置文件。

3.2.3.1 创建自定义配置文件

在resources下创建自定义的user.properties配置文件,示例代码如下:

xueden.user.name=张三
xueden.user.age=18
xueden.user.email=11184629@qq.com
xueden.user.sex=男
xueden.user.phone=13800138000

在上面的示例中,创建了自定义的user.properties配置文件。增加了name、age、email等配置项,这些配置项的名称的前缀都是xueden.user。

3.2.3.2 创建实体类

创建UserProperties自定义配置对象类,然后使用@ConfigurationProperties注解将配置文件中的配置项注入到自定义配置对象类中,示例代码如下:

@Configuration
@ConfigurationProperties(prefix = "xueden.user")
@PropertySource(value = "classpath:user.properties")
@Data
public class UserProperties {

    private String name;

    private int age;

    private String email;

    private String sex;

    private String phone;
}

从上面的示例代码可以看到,我们使用了@Configuration注解、@ConfigurationProperties和@PropertySource三个注解来定义UserProperties实体类:

  • @Configuration定义此类为配置类,用于构建bean定义并初始化到Spring容器。

  • @ConfigurationProperties(prefix = “com.weiz.resource”)绑定配置项,其中prefix表示所绑定的配置项名的前缀。

  • @PropertySource(value = “classpath:website.properties”)指定读取的配置文件及其路径。@PropertySource不支持引入YML文件。

    通过上面的UserProperties类即可读取全部对应的配置项。

3.2.3.3 调用配置项

使用配置实体类中的方式也非常简单,只需将UserProperties注入到需要使用的类中,示例代码如下:

    @Autowired
    private UserProperties userProperties;
    @Test
    void getProperties() {
        System.out.println(userProperties.getName());
        System.out.println(userProperties.getSex());
        System.out.println(userProperties.getAge());
        System.out.println(userProperties.getEmail());
        System.out.println(userProperties.getPhone());
    }

3.2.4 使用配置文件注意事项

在实际项目中会碰到很多读取配置文件的应用场景,需要注意各种坑,否则会让你很惆怅。所以,我总结了一些使用配置文件时需要注意的事项:

  • 使用YML文件时注意空格和格式缩进。
  • Properties文件默认使用的是ISO8859-1编码格式,容易出现乱码问题。如果含有中文,在@PropertySource添加属性encoding = "UTF-8"配置即可。
  • Properties配置的优先级高于YML文件。因为YML文件的加载顺序先于Properties文件,如果两个文件存在相同的配置,后面加载的Properties中的配置会覆盖前面YML中的配置。
  • @PropertySource注解默认只会加载Properties文件,YML文件不能使用此注解。
  • 简单值推荐使用@Value,复杂对象推荐使用@ConfigurationProperties。
  • 只有Spring容器中的组件才能使用容器提供的各类方法,所以,配置读取类需要增加@Component注解才能加入Spring容器中。

3.3 其他配置

上一节介绍了自定义的配置,根据项目的需要自定义配置属性。Spring Boot支持很多非常实用的参数配置功能。本节介绍Spring Boot配置生成随机数、配置引用等实际项目中的实用配置。

3.3.1 随机数

在项目开发过程中,可能需要配置生成随机数,比如说随机配置的服务器端口、随机生成登录密钥等等。Spring Boot支持在系统加载时配置随机数,使用${random}可以生成各种不同类型的随机值,从而简化代码生成的麻烦,例如生成int值、long值、string字符串。

Spring Boot提供的RandomValuePropertySource配置类可以很方便地生成随机数,可以生成integer、long、uuids和string类型的数据。下面通过示例来演示如何配置生成随机数。
首先,在application.properties中添加随机数的配置项。代码如下所示:

# 随机字符串
xueden.random.value = ${random.value}
# uuid
xueden.random.uuid = ${random.uuid}
# 随机int
xueden.random.number=${random.int}
# 随机long
xueden.random.bignumber=${random.long}
# 10以内的随机数
xueden.random.test1=${random.int(10)}
# 10-20的随机数
xueden.random.test2=${random.int[10,20]}

上面的示例中,在application.properties配置文件中增加配置项以使用${radom.xxx}的形式实现生成随机数。

然后,创建配置映射类XuedenRandomValue获取随机数配置项,读取配置项的方式和读取普通配置项的方式一样:通过@Value或者@ConfigurationProperties注解来读取。示例代码如下:

@Component
@Data
public class XuedenRandomValue {

    @Value("${xueden.random.value}")
    private String secret;
    @Value("${xueden.random.number}")
    private int number;
    @Value("${xueden.random.bignumber}")
    private long bigNumber;
    @Value("${xueden.random.uuid}")
    private String uuid;
    @Value("${xueden.random.test1}")
    private int number2;
    @Value("${xueden.random.test2}")
    private int number3;

}

在上面的示例中,我们创建了XuedenRandomValue配置生成类,通过@Value注解读取了配置文件中的配置。

最后,验证随机数配置是否生效。创建单元测试,验证随机数是否生成成功。示例代码如下:

    @Autowired
    private XuedenRandomValue randomValue;
    @Test
    void getRandom() {
        System.out.println(randomValue.getSecret());
        System.out.println(randomValue.getUuid());
        System.out.println(randomValue.getBigNumber());
        System.out.println(randomValue.getNumber());
        System.out.println(randomValue.getNumber2());
        System.out.println(randomValue.getNumber3());
    }

在上面的示例中,首先注入了自定义的随机数生成配置类,然后调用了相关的配置项来验证随机数规则是否生效。

3.3.2 配置引用

Spring Boot支持使用占位符获取之前的属性配置,也就是在后一个配置的值中直接引用先前定义过的配置项,直接解析其中的值。这样做的好处是:在多个具有相互关联的配置项中,只需要对其中一处配置项预先设置,其他地方都可以引用,省去了后续多处修改的麻烦。

使用格式为:${name},name表示先前在配置文件中已经设置过的配置项名。下面通过示例演示如何在配置文件中实现参数引用。
我们修改application.properties配置文件,示例代码如下:

xueden.name = xueden
xueden.age = 18
xueden.des = 我的名字叫 ${xueden.name},今年${xueden.age}岁了。

在上述示例中,首先设置了xueden.name=xueden和xueden.age = 18接着在xueden.des配置项中使用 x u e d e n . n a m e 和 {xueden.name}和 xueden.name{xueden.age}来分别引用xueden.name和xueden.age配置项的值。xueden.des获取到的是:我的名字叫 xueden,今年18岁了。

${xueden.name}还可以使用“:”指定默认值,避免没有配置参数导致程序异常,示例代码如下:

xueden.des = 我的名字叫 ${xueden.name:哈哈},今年${xueden.age}岁了。

随机数和配置引用非常简单,在项目开发过程中非常实用。

3.4 日志配置

我们知道日志对于系统监控、故障定位非常重要,比如当生产系统发生问题时,完整清晰的日志记录有助于快速定位问题。接下来介绍Spring Boot对日志的支持。

3.4.1 Spring Boot日志简介

Spring Boot自带spring-boot-starter-logging库实现系统日志功能,spring-boot-starter-logging组件默认使用LogBack日志记录工具。系统运行日志默认输出到控制台,也能输出到文件中。下面通过示例来演示Spring Boot项目配置日志的功能。

修改pom.xml文件,添加spring-boot-starter-logging依赖。代码如下所示:

   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-logging</artifactId>
   </dependency>

启动项目,查看控制台的日志输出情况,如图3-3所示。

在这里插入图片描述

图3-3 Spring Boot控制台启动日志

在默认情况下,Spring Boot会用LogBack来记录日志,并用INFO级别输出到控制台。运行应用程序,可以看到很多INFO级别的日志。

3.4.2 配置日志格式

在Spring Boot项目中配置日志功能之后,如何定制自己的日志格式、自定义记录的信息呢?Spring Boot提供了logging.pattern.console和logging.pattern.file配置项来定制日志输出格式,只需在application.properties文件中添加logging.pattern.console的配置项即可:

logging.pattern.console=%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy-MM-dd-HH:mm} [%thread] %-5level %logger- %msg%n

上述配置的示例中,对应符号的含义如下:

  • %d{HH:mm:ss.SSS}:日志输出时间。
  • %thread:输出日志的进程名,这在Web应用以及异步任务处理中很有用。
  • %-5level:日志级别,使用5个字符靠左对齐。
  • %logger-:日志输出者的名称。
  • %msg:日志消息。
  • %n:平台的换行符。

修改完配置项再重启项目,查看控制台的日志输出情况,如图3-4所示。

在这里插入图片描述

图3-4 Spring Boot控制台启动日志

Spring Boot控制台启动日志的格式已经改成配置的格式。

3.4.3 日志输出级别

一般而言,系统的日志级别为TRACE 英 [treɪs] 美 [treɪs] < DEBUG < INFO < WARN < ERROR < FATAL 英 [ˈfeɪtl] 美 [ˈfeɪtl] ,级别逐渐提高。如果日志级别设置为INFO,则意味着TRACE和DEBUG级别的日志都不会输出。

Spring Boot通过logging.level配置项来设置日志输出级别,下面通过示例演示Spring Boot日志输出级别。

首先,添加Log级别测试类LogDemo,示例代码如下:

在上面的示例中,针对每个日志级别输出了一行日志。我们可以调整输出的日志级别,让其只在该级别以后的高级别生效。
然后,配置日志输出级别,在application.properties中添加如下配置:

logging.level.root=warn

在上面的示例中,使用logging.level.root指定整个项目的日志级别为WARN。当然,我们也可以对某个包指定单独的日志级别,例如:

logging.level.root=INFO
logging.level.cn.xueden.helloworld.properties=WARN

在上面的配置示例,我们将整个项目的日志级别设置为INFO,同时将指定包cn.xueden.helloworld.properties下的日志级别设置为WARN。

最后,启动项目验证日志的输出情况,如图3-5所示。

在这里插入图片描述

图3-5 系统控制台启动日志

如图3-5所示,Spring Boot控制台输出的系统启动日志为INFO级别,而cn.xueden.helloworld.properties下LogDemo的日志级别设置为WARN,输出了WARN和ERROR的日志。

3.4.4 保存日志文件

一般情况下,在开发环境中习惯通过控制台查看日志,但是生产环境中需要将日志信息保存到磁盘上,以便于日后的日志查询。应该如何配置才能将日志信息保存到日志文件内呢?下面演示保存日志文件的过程。
在resources目录下的application.properties配置文件中添加如下配置项:

logging.file.name=D:/var/log/spring_log.log

重新启动项目,可以看到在D:/var/log目录下生成了spring_log.log文件,该文件的内容和控制台打印输出的内容一致,如图3-6所示。

在这里插入图片描述

图3-6 Spring Boot保存的日志文件

3.5 实现系统多环境配置

在实际项目开发的过程中,需要面对不同的运行环境,比如开发环境、测试环境、生产环境等,每个运行环境的数据库、Redis服务器等配置都不相同,每次发布测试、更新生产都需要手动修改相关系统配置。这种方式特别麻烦,费时费力,而且出错的概率极大。庆幸的是,Spring Boot为我们提供了更加简单方便的配置方案来解决多环境的配置问题,下面就来演示Spring Boot系统如何实现多环境配置。

3.5.1 多环境的配置

通常应用系统可能在开发环境(dev)、测试环境(test)、生产环境(prod)中运行,那么如何做到多个运行环境配置灵活、快速切换呢?Spring Boot提供了极简的解决方案,只需要简单的配置,应用系统就能灵活切换运行环境配置。

3.5.1.1 创建多环境配置文件

创建多环境配置文件时,需要遵循Spring Boot允许的命名约定来命名,格式为application-{profile}.properties,其中{profile}为对应的环境标识。在项目resources目录下分别创建application-dev.properties、application-test.properties和application-prod.properties三个配置文件,对应开发环境、测试环境和生产环境,如图3-7所示。

在这里插入图片描述

图3-7 Spring Boot各系统环境配置文件

如图3-7所示,根据应用系统中常见的三个运行环境拆分成了多个不同的配置文件,分别独立配置上面各运行环境的配置项。具体如下所示:

  • application.properties为项目主配置文件,包含项目所需的所有公共配置。
  • application-dev.properties为开发环境配置文件,包含项目所需的单独配置。
  • application-test.properties为测试环境配置文件。
  • application-prod.properties为生产环境配置文件。
3.5.1.2 修改配置文件

通常情况下,开发环境、测试环境和生产环境使用的数据库是不一样的,所以接下来以不同环境配置不同数据库为例来演示多环境的配置。
首先,修改application.properties,配置系统的启动端口:

# 服务器端口配置
server.port=8099

在上面的示例中,application.properties包含项目所需的所有公共配置,这里配置系统的启动端口,所有环境的启动端口都是8099。

然后,修改application-dev.properties开发环境的配置,增加数据库的连接配置,代码示例如下:

# 指定数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库jdbc连接url地址
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_demo_dev
# 数据库账号
spring.datasource.username=root
spring.datasource.password=root

配置数据库连接的相关属性,我们看到开发环境配置的数据库是springboot_demo_dev。

其他环境的配置文件修改对应的配置连接即可,以上项目的多环境配置就完成了。接下来演示切换项目运行环境。

3.5.2 多环境的切换

前面讲了如何配置多环境,那么,在实际测试、运行过程中如何切换系统运行环境呢?这个也非常简单,通过修改application.properties配置文件中的spring.profiles.active配置项来激活相应的运行环境。如果没有指定任何profile的配置文件,Spring Boot默认会启动application-default.properties(默认环境)。
指定项目的启动环境有以下3种方式:

  • 配置文件指定项目启动环境

    Spring Boot支持通过spring.profiles.active配置项目启动环境,在application.properties配置文件中增加如下配置项指定对应的环境目录:

    # 系统运行环境
    spring.profiles.active=dev
    

    在上面的示例中,通过在application.properties配置文件中设置spring.profiles.active的配置项来配置系统的运行环境。这里配置的是dev开发环境。

  • IDEA编译器指定项目启动环境

    一般在IDEA启动时,直接在IDEA的Run/debug Configuration页面配置项目启动环境,如图3-8所示。

    在这里插入图片描述

图3-8 IDEA编译器指定项目启动环境

如图3-8所示,项目调试运行时,IDEA编译器可以通过VM options、Program arguments、Active profiles三个参数设置启动方式。

-Dspring.profile.active=dev
  • 命令行启动指定项目环境

在命令行通过java -jar命令启动项目时,需要如下指定启动环境:

java -jar xxx.jar --spring.profiles.active=dev

如上所示,程序打包之后,可以在命令行使用java -jar的方式启动,并设置启动参数spring.profiles.active=dev,以开发环境为默认配置。在application-{profile}.properties中配置完成后,启动项目时,在系统启动日志中可以看到加载的是哪个环境的配置文件,如图3-9所示。

在这里插入图片描述

图3-9 在Spring Boot项目启动日志中可以看到加载的是哪个环境的配置文件

在上面的启动日志中可以看到系统目前启动的是dev开发环境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨鱼老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值