Spring Boot(五):基础配置

@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中配置环境变量,部署启动服务时配置环境变量会在后续的“启动服务配置”中详细介绍。

若您觉得还可以,请帮忙点赞、收藏、分享,您的支持是我最大的动力。

更多内容,请关注公众号图南随笔:

 

おすすめ

転載: blog.csdn.net/tunan666/article/details/119083803