第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)。
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所示。
通过系统输出的启动日志可以看到,系统的启动图案已经变成我们自定义的样子,也就是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所示。
在默认情况下,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所示。
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所示,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.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所示,根据应用系统中常见的三个运行环境拆分成了多个不同的配置文件,分别独立配置上面各运行环境的配置项。具体如下所示:
- 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编译器可以通过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所示。
在上面的启动日志中可以看到系统目前启动的是dev开发环境。