散列表,标量等数据形态

发布时间:2025-06-24 19:29:20  作者:北方职教升学中心  阅读量:646


3.2.3. yml配置不同类型的数据类型及null

格式如下:

# 字符串string.value:Hello# 布尔值,truefalseboolean.value:trueboolean.value1:false# 整数int.value:10int.value1:0b1010_0111_0100_1010_1110 # ⼆进制# 浮点数float.value:3.14159float.value1:314159e-5# 科学计数法# Null,~代表nullnull.value:~

使用:

packagecom.example.springboot.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjavax.annotation.PostConstruct;@ComponentpublicclassTestController3{@Value("${string.value}")privateString str;@Value("${boolean.value}")privatebooleanbool;@Value("${float.value}")privatefloatflo;@Value("${null.value}")privateInteger nul;@PostConstructpublicvoidpostConsrtuct(){System.out.println("str: "+str);System.out.println("bool: "+bool);System.out.println("flo: "+flo);System.out.println("nul: "+nul);}}

运行结果:

img

3.2.4. 配置对象

对于 ym l配置文件,还能进行对象的配置,如设置一个Student对象:

方式1:

student:id:1name:张三  age:18

方式2:

student:{id:1,name:张三,age:18}

此时从配置文件读取自定义的对象,就不可以使用 @Value 注解来读取了,需要使用@ConfigurationProperties注解来进行对象的读取,并且对应的类必须有getter和setter方法。 JavaScript、

  • yml ⽀持更多的数据类型,它可以简单表达清单(数组)、

    虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

    为了方便管理不同环境的配置,可以将它们放在不同的配置文件中,此时我们就需要创建不同环境的配置文件了,例如application-dev.properties、IP 地址等信息;那么如何区分这些环境,如何打包呢?

    Spring Boot 中提供了很好的多环境整合支持,可以在打包和运行时自由切换不同的环境。
    img

    还有比如设置数据库,配置项如下:

    # 配置数据库 URLspring.datasource.url="jdbc:mysql://127.0.0.1:3306/tr?characterEncoding=utf8&useSSL=false"# 配置数据库 usernamespring.datasource.name="root"# 配置数据库 passwordspring.datasource.password="111111"# 设置驱动spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

    有关更多系统的配置,可以去看看官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

    除了设置配置文件的信息除了系统的配置,我们还可以自定义配置,比如:

    # 用户自定义配置custom.name=zhangsancustom.id=666

    🎯此时要读取配置文件中的信息,我们可以使用@Value注解来实现,规则如下:

    // 要注意${}不能省略@Value("${配置信息key}")privateString name;

    示例代码:

    packagecom.example.springboot.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;@Controller@ResponseBodypublicclassTestController2{// 自定义配置和系统配置都可以读取@Value("${custom.name}")privateString name;@Value("${custom.id}")privateString id;@Value("${server.port}")privateString port;@RequestMapping("/coustom")publicString sayHi(){return"name : "+name +" "+"id : "+id +" "+"port : "+port;}}

    浏览器访问结果:
    img

    3.1.2. properties优缺点分析

    优点:

    • 配置文件结构清晰:key=value,不容易出错,适合初学者。

      获取示例:
      与配置文件对应的对象。

      2. 配置文件格式

      SpringBoot 项目配置文件有两种,一种是项目创建默认自带的的properties文件,还有一种比较新的yml文件(需要自己添加)。PHP、img

    3.2. yml配置文件

    yml 是 YMAL(Yet Another Markup language)的缩写,翻译为另一种标记语言

    3.2.1. 基本语法与使用

    🎯基本语法:

    yml 是树型结构配置文件,特别需要注意的是 key 和 value 之间需要使用英文冒号加空格,空格一定是不能省略的。

    配置文件是存在于resources目录下的,对于 SpringBoot 项目默认的配置文件,配置文件名必须是application,即application.propertiesapplication.yml文件,如果配置文件名不为application那就不能够被识别加载。

  • 5. 设置不同环境的配置文件

    在日常开发中,通常会使用至少三个不同的环境:开发环境(dev)、

    img

    properties是可以和yml⼀起存在于⼀个项⽬当中的,yml文件相比于properties文件做了一些优化,如yml文件天然支持中文字符,而properties文件默认是不支持中文字符的,如果不进行字符配置,输入中文字符就会有乱码现象。散列表,标量等数据形态。

    application.propertiesapplication.yml两个文件共存时, 虽然两个文件中的配置都会被加载,但如果这两个配置⽂件中出现了同样的配置(比如 properties 和 yml 中都配置了“server.port” ), 那么这个时候会以properties中的配置为主,也就是.properties配置⽂件的优先级最⾼。Python、测试环境(test)和生产环境(prod);每个环境的配置都不相同,包括数据库、

    至于不加双引号的输出结果是因为 yml 中字符串默认是不加引号的,就直接输出了。

    # key与=与value之间不要加空格key=value

    比如,设置端口号,我们可以使用配置项server.port来设置端口:

    server.port=8088

    配置修改完毕后,启动程序,就可以看到端口号已经设置成配置文件中所设置的端口号了。端口、

    4. properties与yml的区别

    1. 语法不同:properties 是 以key = value 的形式配置的键值类型的配置文件,而 yml 使用的是类似于 json 格式的树型配置方式进行配置的,yml 层级之间使用的是换行缩进的方式配置的,key 和 value 之间使用英文冒号:加空格的方式设置的,且空格不可省略。Ruby、
    • yml 相较于 properties 支持更多的数据类型,如对象和集合。

      @ControllerpublicclassYmlString{@Value("${string.str1}")privateString str1;@Value("${string.str2}")privateString str2;@Value("${string.str3}")privateString str3;@PostConstructpublicvoidpostConstruct(){System.out.println("string.str1:"+str1);System.out.println("string.str2:"+str2);System.out.println("string.str3:"+str3);}}

      控制台输出结果:
      img

      这就说明,被双引号包裹的值,是按照原语义执行的,而被单引号包裹值(特殊字符)会发生转义,像上面的例子就是\n转义成了\\n,所以就输出了\n,最终就只是一个普通的字符串。

    • yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、
    • properties 为早期并且默认的配置文件格式,但配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余问题。
    • 它使⽤空⽩ 符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、
    • yml 和 properties 可以共存,但一个项目中建议使用统一的配置类型文件。

      3.2.2. yml中单双引号问题

      我们尝试将配置文件中的配置信息设置成如下字样:

      string:str1:Hello \n Spring Boot.str2:'Hello \n Spring Boot.'str3:"Hello \n Spring Boot."

      我们将这些配置信息注入到一个类,我们尝试来读取它们,这个代码 @Controller 在 Spring Boot 启动时候会把 YmlString 对象注⼊到框架中,当注⼊到框架中时会执⾏ @PostConstruct 初始化方法,就是此时读到的配置信息。

      3. 配置文件的使用方法

      properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。

      # :后面空格一定不能省key:value

      此时,将上面的propertise转换成yml格式看一下。

    缺点:

    • 写法上比较冗余,臃肿,yml 配置文件能够解决这个问题。

      🍂示例:

      学生类:

      我们这里就不自己写getter和setter方法了,我们使用 Lombok 框架中的 @Data 注解即可,其中就包含了get,set 和 toString,免去了手动创建的步骤了。易于理解,它的语法和 JSON 语⾔类似。

      因此,在整个项目中,需要有四个配置文件,包括application.properties(主配置文件,是必须存在的)和三个不同环境的配置文件。

      配置文件中的配置类型有两类,一类是系统配置项,这种配置的格式都是固定的,是给系统(框架)使用的;另一种是用户自定义配置,用户可以随意地规定配置项的格式,又用户自行去设置和读取。

      img

      此时创建了各个环境的配置文件条件下,还需要告诉 SpringBoot 你要运行哪个环境,主要有两种指定方式。

    想象一下如果没有配置信息,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志,所以配置文件的作用是非常重要的。Python,如果是云服务器开发,可以使用一份 yml 配置文件作为 Java 和 Go 的共同配置文件。

    需要注意的是,配置文件的命名必须遵循application-name.propertiesapplication-name.yml的格式,其中的name可以自定义,用于区分不同的环境。

    文章目录

    • 1. 配置文件的作用
    • 2. 配置文件格式
    • 3. 配置文件的使用方法
      • 3.1. properties配置文件
        • 3.1.1. 基本语法和使用
        • 3.1.2. properties优缺点分析
      • 3.2. yml配置文件
        • 3.2.1. 基本语法与使用
        • 3.2.2. yml中单双引号问题
        • 3.2.3. yml配置不同类型的数据类型及null
        • 3.2.4. 配置对象
        • 3.2.5. 配置集合
        • 3.2.6. yml优点分析
    • 4. properties与yml的区别
    • 5. 设置不同环境的配置文件

    1. 配置文件的作用

    SpringBoot 项目中所有重要的数据都是在配置文件中配置的,比如∶

    • 数据库的连接信息(包含用户名和密码的设置);
    • 项目的启动端口;
    • 第三方系统的调用秘钥等信息;
    • 用于发现和定位问题的普通日志和异常日志;
    • 还可以自定义配置,如配置上传文件的保存地址信息等。

      importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;importjava.util.List;@Data@ConfigurationProperties(prefix ="dbtypes")@ComponentpublicclassConfigList{privateList<String>name;}

      使用类:

      packagecom.example.springboot.controller;importcom.example.springboot.model.ConfigList;importorg.springframework.stereotype.Controller;importjavax.annotation.PostConstruct;importjavax.annotation.Resource;@ControllerpublicclassConfigController{@ResourceprivateConfigList configList;@PostConstructpublicvoidpostConstruct(){System.out.println(configList.getName());}}

      运行结果:
      img

      🎯再比如配置 map 集合,配置方式如下:

      方式1:

      tes:map:1:张三    2:李四

      方式2:

      tes:maps:{1:张三,2:李四}

      获取示例:
      与配置文件对应的对象:

      packagecom.example.springboot.model;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;importjava.util.Map;@Data@ConfigurationProperties(prefix ="tes")@ComponentpublicclassConfigMap{privateMap<Integer,String>map;}

      使用类:

      packagecom.example.springboot.controller;importcom.example.springboot.model.ConfigMap;importorg.springframework.stereotype.Controller;importjavax.annotation.PostConstruct;importjavax.annotation.Resource;@ControllerpublicclassConfigController2{@ResourceprivateConfigMap configMap;@PostConstructpublicvoidpostConstruct(){System.out.println(configMap.toString());}}

      运行结果:

      img

      3.2.6. yml优点分析

      1. yml 是⼀个可读性⾼,写法简单、

        3.1. properties配置文件

        3.1.1. 基本语法和使用

        🎯基本语法:

        properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的, 使⽤“#”来添加注释信息。Go、各种配置⽂件等。

        importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.springframework.stereotype.Component;@Data@ConfigurationProperties(prefix ="student")@ComponentpublicclassStudent{privateintid;privateString name;privateintage;}

        使用类:

        packagecom.example.springboot.controller;importcom.example.springboot.model.Student;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importjavax.annotation.PostConstruct;@ControllerpublicclassConfigController{@AutowiredprivateStudent student;@PostConstructpublicvoidpostConsrtuct(){System.out.println(student);}}

        运行结果:
        img

        3.2.5. 配置集合

        yml 还能配置集合

        🎯比如配置 list 集合,配置方式如下:

        方式1:

        dbtypes:name:-mysql		-sqlserver		-db2

        方式2(推荐):

        dbtypes:{name:[mysql,sqlserver,db2]}

        获取与对象的获取方式一模一样,只是现在需要类里面的一个属性为集合对象。

        🎯方式2:运行 jar 的时候指定

        SpringBoot 内置的环境切换能够在运行Jar包的时候指定环境,命令如下:

        java -jar xxx.jar --spring.profiles.active=test
  • yml 通用性更好,支持更多语言,如 Java、application-test.propertiesapplication-prod.properties

    # 配置端口server:port:8088# 配置数据库spring:datasource:url:"jdbc:mysql://127.0.0.1:3306/tr?characterEncoding=utf8&useSSL=false"username:"root"password:"111111"# 自定义配置信息custom:name:zhangsan  id:666

    这里读取 yml 配置文件的方式和 properties 配置文件是一样的,就不再演示了。

    🎯方式1:在主配置文件中指定

    可以在主配置文件(application.properties或者application.yml)中指定,内容如下:

    # 指定运行环境为测试环境(application.properties)spring.profiles.active=test# 指定运行环境为生产环境(application.xml)spring:profiles:active:pord

    此时,SpringBoot 首先默认会加载application.properties文件,而这个的文件配置又告诉 SpringBoot 去找指定环境的配置文件。Perl 中。