SpringBoot-04-YAML配置绑定

YAML

配置文件

SpringBoot使用一个全局的配置文件,配置文件名称是固定的

  • application.properties
    语法结构: key=value
    key和value都要为字符串类型
  • application.yaml
    语法结构: key:空格 value
    key为字符串类型,value可以为任意数据类型

配置文件的作用: 修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了


YAML概述

	YAML是“YAML Ain't a Markup Language”(YAML不是一种标记语言)的递归缩写。
	
	在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)

这种语言是以数据作为中心,而不是以标记语言作为中心。

yaml比xml和json更适合作为配置文件,想要使用


YAML语法

YAML语法如下:

  • 空格不能省略
  • 以缩进来控制层级关系,只要是左边对齐的一列数据就是同层级的关系
  • 属性和值的大小写是十分敏感的

YAML常用写法

YAML支持以下三种数据结构

  • 对象:键值对的集合
  • 数组:一组按次序排列的值
  • 字面值:单个的、不可拆分的值
  1. 字面值:普通的值[数字,布尔值,字符串]
		k: 2

注意

		“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
		
		比如 :name: "kuang \n shen"   输出 :kuang  换行   shen
		
		'' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
		
		比如 :name: ‘kuang \n shen’   输出 :kuang  \n   shen
  1. 对象、Map(键值对)
	普通写法
	student:
	    name: liang
	    age: 12
	
	
	行内写法
	student1: {name: zh,age: 2}
  1. 数组(List,set)
    用 - 值表示数组中的一个元素,
	pets:
	  - Dog
	  - cat
	  - pig
	
	#行内写法
	pets1: [Dog,cat,pig]

4.复合结构

person:
   name: liang${random.uuid}     #随机生成唯一通用符
   age: ${random.int(1,150)}
   date: 2001/4/10
   isStudent: true
   maps: {hobby: "睡觉",nature: "温和"}
   lists: [code,music]
   dog:
      name: 旺财
      age: 3

5.YAML组织结构

一个YAML文件可以由一个或多个文档组成,文档之间使用“—”作为分隔符,且各文档组成独立,互不干扰。

---
website:
  name: bianchengbang
  url: www.biancheng.net
---
website: {name: bianchengbang,url: www.biancheng.net}
pets:
  -dog
  -cat
  -pig
---
pets: [dog,cat,pig]
name: "zhangsan \n lisi"
---
name: 'zhangsan \n lisi

注入配置文件

方式一:properties方式

  1. 在springboot项目中的resources目录下新建一个文件application.yaml
		user1.name=chao
		user1.age=3
		user1.sex=男
  1. 编写一个实体类Dog
package com.liang.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:user.properties")
public class User {

    @Value("${user1.name}")      //从配置文件中取值
    private String name;
    @Value("#{9*2}")            //#{SPEL} SpringEL表达式
    private Integer age;
    @Value("男")                //字面值
    private String sex;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

@PropertiesResource(“classpath:对应配置文件”)
加载指定的配置文件
3. 通过@Value给每个属性赋值

通过配置文件取值和SpringEL表达式、字母值给属性赋值

  1. 通过springboot的测试类来测试注入
import com.liang.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Springboot02EstablishApplicationTests {

    //自动装配
    @Autowired
    private User user;
    @Test
    void contextLoads() {
        System.out.println(user);;
    }
}

结果:

在这里插入图片描述


方式二:yaml方式

  1. 编写一个复杂的实现类:Person类

@Component
public class Person {

    private String name;
    private Integer age;
    private Date date;
    private Boolean isStudent;      //属性的名称正规一点
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
	
	getter,setter方法,构造方法,toString方法
}

  1. 编写yaml配置文件
person:
   name: liang${random.uuid}     #随机生成唯一通用符
   age: ${random.int(1,150)}
   date: 2001/4/10
   isStudent: true
   maps: {hobby: "睡觉",nature: "温和"}
   lists: [code,music]
   dog:
      name: 旺财
      age: 3
  1. 给类中属性赋值
@Component      //注册Bean到容器中
@ConfigurationProperties(prefix="person")
public class Person {

    private String name;
    private Integer age;
    private Date date;
    private Boolean isStudent;      //属性的名称正规一点
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
	
	getter,setter方法,构造方法,toString方法
}

@Configuration的作用是将配置文件的每一个属性,映射到这个组件
告诉SpringBoot将本类的所有属性和配置文件相关的配置进行绑定
参数prefix=“person”,将配置文件person下面的所有属性和定义的类一一对应

  1. 发现IDEA提示,springboot配置处理器未找到,导入一个依赖

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
	<dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-configuration-processor</artifactId>
	  <optional>true</optional>
	</dependency>
  1. 测试

指定配置文件绑定成功!
在这里插入图片描述

配置文件占位符


person:
    name: Liang${random.uuid} # 随机uuid
    age: ${random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${person.hello:other}_旺财
      age: 1

回顾properties配置

通过上面的对比,我们知道了yaml格式的好处,开发中也是常用的,也是springboot推荐使用的。properties给属性赋值时,要对每一个属性单独赋值,显得不灵活,而且properties在写中文的时候,会有乱码,我们需要在IDEA设置编码格式为UTF-8;settings-FileEncodings中配置
在这里插入图片描述


对比小结

@Value不太友好,需要给每个属性单独注解赋值
在这里插入图片描述

  1. @ConfigurationProperties只需要写一次,@Value需要每个字段添加
  2. 松散绑定,像在yaml文件中我们写成last-name,而我们的实体类写的是lastName,是能够完成绑定属性值的。
  3. JSR303数据校验,这个是在字段中增加一层过滤器验证,保证数据的合法性。
  4. 复杂类型封装,yaml可以封装对象,使用value就不支持。

结论

配置yml和配置properties都可以获取到值 , 强烈推荐 yml;

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sharing-jdbc是一个基于Java的开源数据库中间件,提供了对数据库连接池、数据库读写分离、分库分表等功能的支持。使用sharing-jdbc可以简化我们对数据库的操作,提高系统的性能和可扩展性。 MyBatis是一个持久层框架,它提供了对数据库的操作方法和SQL语句的映射。在使用MyBatis时,我们可以配置数据源和数据库连接信息。将sharing-jdbc与MyBatis结合使用,可以实现对数据库的读写分离和分库分表功能。 Spring Boot是一个快速开发Spring应用的框架,它提供了简化配置和集成的功能。在Spring Boot应用中,我们可以使用YAML文件(.yml)来配置应用的各种参数和组件。通过在YAML配置文件中添加相应的配置信息,可以实现sharing-jdbc、MyBatis和Spring Boot的集成和配置。 在YAML配置文件中,我们需要配置数据库连接信息、数据源、MyBatis的相关配置和sharing-jdbc的相关配置。例如,我们可以配置数据库的URL、用户名和密码,指定MyBatis的映射文件路径和配置文件路径,以及指定sharing-jdbc的相关信息。 配置sharing-jdbc的方式如下: ```yaml sharing-jdbc: dataSources: - name: dataSource1 dataSourceClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:3306/db1 username: root password: password1 shardingRuleConfigs: - defaultDataSourceName: dataSource1 defaultDatabaseStrategy: inline: algorithmExpression: ds_${user_id % 2} defaultTableStrategy: standard: algorithmExpression: t_${user_id % 16} bindingTables: - table_patterns: user_${0..15} actualDataNodes: dataSource1.user_${0..15} ``` 在以上示例中,我们配置了一个数据库连接池(dataSource1),并指定了数据源的相关信息。然后,我们配置了分库分表的规则,根据用户ID分配数据库和数据表,并将其与数据源绑定。 通过这样的配置,我们可以在Spring Boot应用中方便地使用sharing-jdbc和MyBatis操作数据库,并利用分库分表功能提高应用的性能和扩展性。 ### 回答2: 在使用Spring Boot中整合Sharing-JDBC和MyBatis时,我们可以使用yml配置文件配置相关信息。 首先,我们需要在yml配置文件中设置Sharing-JDBC的数据源配置。具体配置内容如下: ``` # Sharing-JDBC 数据源配置 sharing: shardingsphere: datasource: name: # 数据源名称 url: # 数据库连接地址 username: # 数据库用户名 password: # 数据库密码 driver-class-name: # 数据库驱动类名 ``` 其中,name表示数据源的名称,url表示数据库连接地址,username表示数据库用户名,password表示数据库密码,driver-class-name表示数据库驱动类名。 接下来,我们需要配置MyBatis的相关信息。具体配置内容如下: ``` # MyBatis配置 mybatis: mapper-locations: classpath:mapper/*.xml # MyBatis Mapper文件的存放位置 type-aliases-package: com.example.model # 实体类的包名 ``` 其中,mapper-locations表示Mapper文件的存放位置,type-aliases-package表示实体类的包名。 然后,我们需要在Spring Boot的主配置类中使用@MapperScan注解来扫描Mapper接口所在的包,并将其注册为Spring Bean。具体配置内容如下: ```java @Configuration @MapperScan("com.example.mapper") // Mapper接口所在的包 public class MybatisConfig { } ``` 在以上配置完成之后,我们可以在项目中使用Sharing-JDBC和MyBatis进行数据库访问。比如,创建一个Mapper接口和对应的Mapper XML文件,进行SQL的编写和数据库操作。 以上就是使用Sharing-JDBC、MyBatis和Spring Boot整合的yml配置方式。通过配置yml文件,我们可以方便地配置数据源、MyBatis等相关信息,简化项目的配置和管理。 ### 回答3: sharing-jdbc是一个基于Java的数据库中间件,可以方便地支持数据库的分库分表操作。而MyBatis是一个优秀的持久层框架,与数据库之间的关系映射由它负责。Spring Boot是一个快速开发框架,可以简化Java应用程序的配置和部署。 在Spring Boot中,可以使用YAML(又称为YML)文件来进行配置YAML是一种人类可读的数据序列化格式,与JSON类似,但语法更加简洁。使用YAML配置文件,可以将各种配置信息以键值对的形式存储在一个文件中。 当使用sharing-jdbc、MyBatis和Spring Boot一起使用时,我们需要在YAML配置文件中进行相应的配置。首先,需要配置数据库连接信息,包括数据库URL、用户名和密码等。其次,需要配置MyBatis的相关信息,如Mapper的路径、扫描的包等。最后,还需要配置sharing-jdbc的相关信息,包括分库分表的策略、数据库的数据源等。 下面是一个示例的YAML配置文件: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 mybatis: mapper-locations: classpath:mapper/*.xml sharing-jdbc: data-sources: ds_0: jdbc-url: jdbc:mysql://localhost:3306/db_0?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 ds_1: jdbc-url: jdbc:mysql://localhost:3306/db_1?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 sharding-rule-config-file: classpath:sharding-jdbc.yml ``` 在这个示例中,我们配置了一个主数据库(test)和两个分库(db_0和db_1)。分别使用了不同的数据源(ds_0和ds_1)进行连接。同时,我们还指定了MyBatis的Mapper文件路径和sharing-jdbc的分库分表策略文件路径。 通过这样的配置,我们可以在Spring Boot应用中方便地使用sharing-jdbc和MyBatis来实现数据库的分库分表操作。这种配置方式简洁明了,提高了开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值