SpringBoot 基础

1.主要特性

  1. SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中;
  2. 使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率;
  3. 自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们;
  4. 使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个jar包。

2.全局配置文件

2.1 概述以及优先级

全局配置文件能够对一些默认配置值进行修改及自定义配置。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件。
在这里插入图片描述

也可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:
在这里插入图片描述

按照优先级从高到底的顺序:

  1. 先去项目根目录找config文件夹下找配置文件
  2. 再去根目录下找配置文件
  3. 去resources下找cofnig文件夹下找配置文件
  4. 去resources下找配置文件

2.2 application.properties和application.yml

  1. application.properties
    使用Spring Initializr方式构建Spring Boot项目时,会在resource目录下自动生成一个空的application.properties文件,Spring Boot项目启动时会自动加载application.properties文件。我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置。
server.port=8081
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.config.name=application
  1. application.yml
    YAML文件格式是Spring Boot支持的一种JSON超集文件格式,以数据为中心,比properties、xml等更适合做配置文件,
     yml和xml相比,少了一些结构化的代码,使数据更直接,一目了然;
     yml相比properties文件更简洁;
     YAML文件的扩展名可以使用.yml或者.yaml;
     application.yml文件使用 “key:(空格)value”格式配置属性,使用缩进控制层级关系。
    这里,针对不同数据类型的属性值,介绍一下YAML

(1) value值为普通数据类型(例如数字、字符串、布尔等)
当YAML配置文件中配置的属性值为普通数据类型时,可以直接配置对应的属性值,同时对于字符串类型的属性值,不需要额外添加引号,示例代码如下:

server:
  port: 8080
  servlet:
    context-path: /hello

(2) value值为数组和单列集合
当YAML配置文件中配置的属性值为数组或单列集合类型时,主要有两种书写方式:缩进式写法和行内式写法。其中,缩进式写法还有两种表示形式,示例代码如下:

person:
  hobby:
    - play
    - read
    - sleep

或者如下形式:

person:
  hobby:
    play,
    read,
    sleep

或者如下形式:

person:
  hobby: [play,read,sleep]

(3) value值为Map集合和对象
当YAML配置文件中配置的属性值为Map集合或对象类型时,YAML配置文件格式同样可以分为两种书写方式:缩进式写法和行内式写法。
缩进式写法的示例代码如下:

person:
  map:
    k1: v1
    k2: v2

对应的行内式写法示例代码如下:

person:
  map: {k1: v1,k2: v2}

3.属性注入

使用Spring Boot全局配置文件设置属性时:如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并读取这些配置文件中的属性值并覆盖默认属性。如果配置的属性是用户自定义属性,还必须在程序中注入这些配置属性方可生效。

3.1 常用注解

@Configuration:声明一个类作为配置类
@Bean:声明在方法上,将方法的返回值加入Bean容器
@Value:属性注入
@ConfigurationProperties(prefix = “jdbc”):批量属性注入
@PropertySource(“classpath:/jdbc.properties”)指定外部属性文件。在类上添加

  1. @Value属性值注入
    application.properties文件中的定义
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot_h
jdbc.username=root
jdbc.password=123

注入配置文件的值:

@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
  1. @ConfigurationProperties批量注入
    application.properties文件中的定义
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboot_h
jdbc.username=root
jdbc.password=123

新建配置文件:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "JdbcProperties{" +
                "url='" + url + '\'' +
                ", driverClassName='" + driverClassName + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

pom.xml文件中添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <optional>true</optional>
</dependency>

测试代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoSpringBootApplicationTests {

   @Autowired
   private JdbcProperties jdbcProperties;

   @Test
   public void jdbcPropertiesTest(){
      System.out.println(jdbcProperties);
   }
}

打印结果为:
在这里插入图片描述

3.2 第三方配置

除了 @ConfigurationProperties 用于注释类之外,还可以在公共 @Bean 方法上使用它。当要将属性绑定到控件之外的第三方组件时,这样做特别有用。
创建一个其他组件类:

public class AnotherComponent {
    private boolean enabled;
    private InetAddress remoteAddress;
    // ..省略get和set方法
}

创建配置类:

@Configuration
public class AnotherConfig {

    @ConfigurationProperties("another")
    @Bean
    public AnotherComponent anotherComponent(){
        return new AnotherComponent();
    }
}

创建配置信息:

another.enabled=true
another.remoteAddress=192.168.10.11

测试代码:

@Autowired
private AnotherComponent anotherComponent;
@Test
public void anotherComponentTest(){
   System.out.println(anotherComponent);
}

输出结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值