@SpringBootApplication
@SpringBootApplication注解是加在项目的启动类上的一个组合注解,它由三个注解组成:@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。
@SpringBootConfiguration:表明这是一个配置类,开发者可以在这个类中配置Bean。
@EnableAutoConfiguration:开启自动化配置,Spring Boot中的自动化配置是非侵入式的,在任意时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置。
@ComponentScan:完成包扫描,默认扫描的类都位于当前类所在包的下面。例如上面的示例中,默认扫描的类是位于 com.tn666.demo下面的所有类。
Tomcat配置
在Spring Boot项目中,可以内置Tomcat、Jetty、Udertow、Netty等容器。当开发者添加了spring-boot-starter-web依赖之后,默认会使用Tomcat作为Web容器。可以在application.properties中配置服务端口号:
server.port=8081
增加此配置后,启动服务后,访问接口时的端口号就修改为8081了
Properties配置
开发中需要手动配置的一些信息,可以放在resources文件夹下面的application.properties中,也可以使用YAML配置来代替application.properties配置,无论是Properties配置还是YAML配置,最终都会被加载到Spring Environment中。
上面介绍Tomcat配置的时候,已经介绍了如何使用application.properties来配置服务的端口号,下面通过示例来说一下如何读取配置。
在application.properties中添加如下配置:
blog.id=1
blog.title=tn666's blog
1、通过@Value来读取配置
在controller文件夹中创建BlogController,在类中增加如下代码:
@RestController
@RequestMapping("blog")
public class BlogController {
@Value("${blog.title}")
private String blogTitle;
@GetMapping(value = "getBlogTitle")
public String getBlogTitle() {
return this.blogTitle;
}
}
调用接口,可以看到打印出tn666's blog
2、通过@ConfigurationProperties将配置文件中的数据注入到属性上
1)在com.tn666.demo下创建文件夹configuration,用于存放配置文件实体类
2)在configuration文件夹下创建类BlogConfig,放入如下代码:
@Component
@ConfigurationProperties(prefix = "blog")
public class BlogConfig {
private Integer id;
private String title;
// 省略getter & setter
}
3)在BlogController类中增加如下方法
@Autowired
private BlogConfig blogConfig;
@GetMapping(value = "getBlogId")
public Integer getBlogId() {
return blogConfig.getId();
}
4)调用接口,可以看到打印出1
YAML配置
YAML是一种专门用来书写配置文件的语言,它利用缩进来表示层级关系,使用起来特别方便,相较于properties的方式,YAML更加直观,所以日常工作中,我更习惯使用YAML配置。上面示例中的blog配置,使用YAML后是如下方式:
blog:
id: 1
title: tn666's blog
在resources目录下新建application.yml文件,放入上面的配置,同时把application.properties文件删除,读取配置的方式,跟上面的示例相同,还是使用@Value和@ConfigurationProperties两种方式。
启动服务后,调用/blog/getBlogTitle和/blog/getBlogId接口,分别打印出tn666's blog和1
YAML还可以支持更复杂的配置,例如:
blog:
id: 1
title: tn666's blog
tags:
- 技术
- Java
- Spring Boot
relation-blog:
- url: https://www.test1.com
title: xiaoming's blog
- url: https://www.test2.com
title: xiaohong's blog
在configuration文件夹下创建配置实体类RelationBlogConfig,类内容如下:
public class RelationBlogConfig {
private String url;
private String title;
// 省略getter & setter
}
在BlogConfig类增加tags和relationBlog属性:
@Component
@ConfigurationProperties(prefix = "blog")
public class BlogConfig {
private Integer id;
private String title;
private List<String> tags;
private List<RelationBlogConfig> relationBlog;
// 省略getter & setter
}
在BlogController中增加getBlogConfig方法:
@GetMapping(value = "getBlogConfig")
public BlogConfig getBlogConfig() {
return blogConfig;
}
调用接口/blog/getBlogConfig,可以看到以json的方式打印出blog的配置:
注:配置中的relation-blog,命名为relation_blog、relationBlog、relationblog、RELATIONBLOG,都是可以的,建议配置文件中全小写,多个单词之间用中划线分隔,如:relation-blog
多环境配置
实际开发中,我们可能有开发环境、测试环境和线上环境,每次修改配置文件不方便也很容易出错,为了解决这些问题,我们可以采用多环境配置的方式。
在resources文件夹下增加配置文件application-dev.yml、application-test.yml和application-prod.yml,并分别进行端口号和blog配置,同时修改application.yml,如下:
application.yml
spring:
profiles:
active: @activeProfile@
application-dev.yml
server:
port: 8080
blog:
id: 1
title: tn666's blog - dev
tags:
- 技术
- Java
- Spring Boot
relation-blog:
- url: https://www.test1.com
title: xiaoming's blog
- url: https://www.test2.com
title: xiaohong's blog
application-test.yml
server:
port: 8081
blog:
id: 1
title: tn666's blog - test
tags:
- 技术
- Java
- Spring Boot
relation-blog:
- url: https://www.test1.com
title: xiaoming's blog
- url: https://www.test2.com
title: xiaohong's blog
application-prod.yml
server:
port: 8082
blog:
id: 1
title: tn666's blog - prod
tags:
- 技术
- Java
- Spring Boot
relation-blog:
- url: https://www.test1.com
title: xiaoming's blog
- url: https://www.test2.com
title: xiaohong's blog
修改pom.xml文件,增加profiles配置(在<dependencies>的同级目录下):
<!-- 环境信息 -->
<profiles>
<profile>
<id>dev</id>
<properties>
<activeProfile>dev</activeProfile>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<activeProfile>test</activeProfile>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<activeProfile>prod</activeProfile>
</properties>
</profile>
</profiles>
修改pom.xml后,Maven需要执行clean & package操作:
启动服务,访问http://localhost:8080/blog/getBlogConfig,可以看到,打印出 application-dev.yml中的配置信息,我们的pom.xml中默认使用application-dev.yml配置文件。
如果要使用application-test.yml配置文件,首先配置环境变量:
配置好之后,启动服务,这时候服务的端口号已经改为8081,访问服务http://localhost:8081/blog/getBlogConfig,可以看到打印出了application-test.yml的配置信息。
上面说的是在IDE中配置环境变量,部署启动服务时配置环境变量会在后续的“启动服务配置”中详细介绍。
若您觉得还可以,请帮忙点赞、分享、收藏三连,您的支持是我最大的动力。