zoukankan      html  css  js  c++  java
  • springboot-helloworld 学习02

    spring 配置文件

    1、配置文件

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

    • application.properties
    • application.yml

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

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

    标记语言:
    以前的配置文件:大多都使用的是xxx.xml文件;
    YMAL:以数据为中心,而不是以标记语言为重点,而用反向缩略语重命名;

    2、YMAL语法

    基本语法

    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进不允许使用tab,只允许空格
    • 缩进的空格数不重要,只要相同层级的元素左对齐即可
    • '#'表示注释

    数据类型,YAML 支持以下几种数据类型:

    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值

    参考:YMAL语法

    3、配置文件注入

    配置文件

    person:
      lastName: huhu
      age: 28
      boss: true
      birth: 2017/12/12
      maps: {k1: cslc,k2: 2}
      lists:
        - lisi
        - zhou
      dog:
        name: 小猫
        age: 18
    

    JavaBean

    /**
     * 将配置文件中配置的每一个属性的值,映射到这个组件中;
     * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     *
     * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    public class Person {
    
        private String lastName;
        private Integer age;
        private Boolean boss;
        private Date birth;
    
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    

    我们可以导入配置文件处理器,以后编写配置就有提示了

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

    1、properties配置文件在IDEA中默认utf-8(或者GBK)可能会乱码,要勾选编译时转为ACSI

    2、@Value获取值和@ConfigurationProperties获取值比较

    @ConfigurationProperties @Value
    功能 批量注入配置文件中的属性 一个个指定
    松散绑定 支持 不支持
    SpEL 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型封装 支持 不支持
    • 配置文件yml还是properties它们都何以获取值;
    • 如果,某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
    • 如果,专门编写了一个java

    3、配置文件注入值数据校验

    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated
    public class Person {
    
        /**
         * <bean class="Person">
         *     <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
         * </bean>
         */
    
        //lastName必须是邮箱格式
        @Email
        //@Value("${person.last-name}")
        private String lastName;
        //@Value("#{12 * 2}")
        private Integer age;
        //@Value("true")
        private Boolean boss;
        private Date birth;
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    

    4、@PropertySource和@ImportResource

    • @PropertySource :加载指定的配置文件;
    /**
     * 将配置文件中配置的每一个属性的值,映射到这个组件中;
     * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     *      @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
     * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     */
    @PropertySource(value = {"classpath:person.properties"})
    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated
    public class Person {
    
        /**
         * <bean class="Person">
         *     <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
         * </bean>
         */
    
        //lastName必须是邮箱格式
        @Email
        //@Value("${person.last-name}")
        private String lastName;
        //@Value("#{12 * 2}")
        private Integer age;
        //@Value("true")
        private Boolean boss;
        private Date birth;
        private Map<String,Object> maps;
        private List<Object> lists;
        private Dog dog;
    
    • @ImportResource :导入Spring的配置文件,让配置文件里的内容生效;
      Sprin Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
      想让Spring的配置文件生效,加载进来;@ImportResource 标注在一个配置类上
    @ImportResource(locations = {"classpath:beans.xml"})
    导入Spring的配置文件让其生效
    

    不来编写Spring的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="helloService" class="com.myspringtest02.springboot.service.HelloService"></bean>
    </beans>
    

    SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式;
    1、配置类======Spring配置文件
    2、使用@Bean给容器添加组件

    
    /**
     * @Configuration:指明当前类是一个配置类,就是来代替之前的Spring配置文件
     *
     * 以前,在配置文件中用<bean></bean>标签添加组件
     */
    @Configuration
    public class MyAppConfig {
    
        // 将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
        @Bean
        public HelloService helloService(){
            System.out.println("配置类@Bean给容器中添加组件了...");
            return new HelloService();
        }
    }
    
  • 相关阅读:
    Binary Search Tree Iterator 解答
    Invert Binary Tree 解答
    Min Stack 解答
    Trapping Raining Water 解答
    Candy 解答
    Jump Game II 解答
    Implement Hash Map Using Primitive Types
    Gas Station 解答
    Bucket Sort
    HashMap 专题
  • 原文地址:https://www.cnblogs.com/damahuhu/p/14840572.html
Copyright © 2011-2022 走看看