精华内容
下载资源
问答
  • Spring Boot读取properties配置文件中的数据

    万次阅读 多人点赞 2018-08-23 00:09:07
    Java EE 目录:... Spring Boot 专栏:https://blog.csdn.net/dkbnull/category_9278145.html Spring Cloud 专栏:https://blog.csdn.net/dkbnull/category_9287932.ht...

    Java EE 目录:https://blog.csdn.net/dkbnull/article/details/87932809

    Spring Boot 专栏:https://blog.csdn.net/dkbnull/category_9278145.html

    Spring Cloud 专栏:https://blog.csdn.net/dkbnull/category_9287932.html

     

     

    Spring Boot最常用的3种读取properties配置文件中数据的方法:

    1、使用@Value注解读取

    读取properties配置文件时,默认读取的是application.properties。

    application.properties:

    demo.name=Name
    demo.age=18

    Java代码:

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class GatewayController {
    
        @Value("${demo.name}")
        private String name;
    
        @Value("${demo.age}")
        private String age;
    
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + name +
                    " , age=" + age;
        }
    }

    运行结果如下:

    这里,如果要把

     @Value("${demo.name}")
                
    private String name;
                
    @Value("${demo.age}")
                
    private String age;

    部分放到一个单独的类A中进行读取,然后在类B中调用,则要把类A增加@Component注解,并在类B中使用@Autowired自动装配类A,代码如下。

    类A:

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ConfigBeanValue {
    
        @Value("${demo.name}")
        public String name;
    
        @Value("${demo.age}")
        public String age;
    }

    类B:

    import cn.wbnull.springbootdemo.config.ConfigBeanValue;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class GatewayController {
    
        @Autowired
        private ConfigBeanValue configBeanValue;
    
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + configBeanValue.name +
                    " , age=" + configBeanValue.age;
        }
    }
    

    运行结果如下:

    注意:如果@Value${}所包含的键名在application.properties配置文件中不存在的话,会抛出异常:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configBeanValue': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'demo.name' in value "${demo.name}"

     

    2、使用Environment读取

    application.properties:

    demo.sex=男
    demo.address=山东
    

    Java代码:

    import cn.wbnull.springbootdemo.config.ConfigBeanValue;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class GatewayController {
    
        @Autowired
        private ConfigBeanValue configBeanValue;
    
        @Autowired
        private Environment environment;
    
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + configBeanValue.name +
                    " , age=" + configBeanValue.age +
                    "<p>get properties value by ''Environment'' :" +
                    //2、使用Environment读取
                    " , sex=" + environment.getProperty("demo.sex") +
                    " , address=" + environment.getProperty("demo.address");
        }
    }
    

    运行,发现中文乱码:

    这里,我们在application.properties做如下配置:

    server.tomcat.uri-encoding=UTF-8
    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    spring.messages.encoding=UTF-8
    

    然后修改IntelliJ IDEA,File --> Settings --> Editor --> File Encodings ,将最下方Default encoding for properties files设置为UTF-8,并勾选Transparent native-to-ascii conversion。

    重新运行结果如下:

     

    3、使用@ConfigurationProperties注解读取

    在实际项目中,当项目需要注入的变量值很多时,上述所述的两种方法工作量会变得比较大,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联在一起,即使用注解@ConfigurationProperties读取配置文件数据。

    在src\main\resources下新建config.properties配置文件:

    demo.phone=10086
    demo.wife=self
    

    创建ConfigBeanProp并注入config.properties中的值:

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "demo")
    @PropertySource(value = "config.properties")
    public class ConfigBeanProp {
    
        private String phone;
    
        private String wife;
    
        public String getPhone() {
            return phone;
        }
    
        public void setPhone(String phone) {
            this.phone = phone;
        }
    
        public String getWife() {
            return wife;
        }
    
        public void setWife(String wife) {
            this.wife = wife;
        }
    }
    

    @Component 表示将该类标识为Bean

    @ConfigurationProperties(prefix = "demo")用于绑定属性,其中prefix表示所绑定的属性的前缀。

    @PropertySource(value = "config.properties")表示配置文件路径。

     

    使用时,先使用@Autowired自动装载ConfigBeanProp,然后再进行取值,示例如下:

    import cn.wbnull.springbootdemo.config.ConfigBeanProp;
    import cn.wbnull.springbootdemo.config.ConfigBeanValue;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class GatewayController {
    
        @Autowired
        private ConfigBeanValue configBeanValue;
    
        @Autowired
        private Environment environment;
    
        @Autowired
        private ConfigBeanProp configBeanProp;
    
        @RequestMapping(value = "/gateway")
        public String gateway() {
            return "get properties value by ''@Value'' :" +
                    //1、使用@Value注解读取
                    " name=" + configBeanValue.name +
                    " , age=" + configBeanValue.age +
                    "<p>get properties value by ''Environment'' :" +
                    //2、使用Environment读取
                    " sex=" + environment.getProperty("demo.sex") +
                    " , address=" + environment.getProperty("demo.address") +
                    "<p>get properties value by ''@ConfigurationProperties'' :" +
                    //3、使用@ConfigurationProperties注解读取
                    " phone=" + configBeanProp.getPhone() +
                    " , wife=" + configBeanProp.getWife();
        }
    }
    

    运行结果如下:

     

     

    GitHub:https://github.com/dkbnull/SpringBootDemo

    微信:https://mp.weixin.qq.com/s/swtkNq6CLMsP4uc4PgaVHg

    微博:https://weibo.com/ttarticle/p/show?id=2309404275977214638710

     

     

    展开全文
  • Spring Boot配置文件简单介绍

    千次阅读 2017-11-20 18:58:40
    Spring Boot配置文件支持非常友好,支持*.properties和*.yml,前者是常用的配置文件,后者是Spring Boot推荐的配置文件。 一、Spring Boot支持的配置文件Spring Boot支持两种配置文件,一个是常见的.properties...

    Spring Boot对配置文件支持非常友好,支持*.properties*.yml,前者是常用的配置文件,后者是Spring Boot推荐的配置文件。

    一、Spring Boot支持的配置文件

    Spring Boot支持两种配置文件,一个是常见的*.properties格式,另外一个就是专有的*.yml或者*.yaml格式。一般两者的命名都是application。

    二、配置随机值

    这里是介绍如何配置随机值等数值,可根据实际情况配置。两种配置方式是等效的,实际选择其中一种即可,推荐使用*.yml

    1)application.properties

    lemon.secret=${random.value}
    
    # 获取一个随机整数
    lemon.number=${random.int}
    
    # 获取一个随机长整数
    lemon.bignumber=${random.long}
    
    # 获取一个随机0~10的随机整数
    lemon.number.less.than.ten=${random.int(10)}
    
    # 获取指定区间范围的随机整数
    lemon.number.in.range=${random.int[1024,65536]}
    

    2)application.yml

    # 配置文件的设置
    # 配置文件中是可以配置随机值的
    lemon:
      secret: ${random.value}
      number: ${random.int}
      bignumber: ${random.long}
      number1:
        less:
          than: ${random.int(10)}
        in:
          range: ${random.int[1,10]}
    

    注意:冒号后面都有一个空格。
    加载Spring Boot应用时,会自动加载配置文件,在controller中获取配置文件中值的方式是通过@Value这个注解,@Value(value = “${lemon.secret}”)。

    三、属性占位符

    当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)。

    lemon.name=www.cug.edu.cn
    lemon.desc=${lemon.name} is a domain name
    

    yml配置文件中设置方法一致。

    四、其他属性配置

    # 端口配置
    server.port=8090
    
    # 时间格式化
    spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
    
    # 时区设置
    spring.jackson.time-zone=Asia/Chongqing
    

    这是配置一些常见的公共属性。yml格式的配置文件配置如下:

    # 端口配置
    server:
      port: 8080
    
    # 时区和时间格式化
    spring:
      jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: Asia/Chongqing
    

    五、多文件配置

    1、多环境配置文件的好处:
    1)不同环境配置可以配置不同的参数
    2)便于部署,提高效率,减少出错

    2、Properties多环境配置
    1)配置激活选项 spring.profiles.active=dev,可以修改值来确定不同的环境配置
    2)添加其他配置文件
    application.properties
    application-dev.properties
    application-test.properties
    application-pro.properties
    更改激活选项,就可以加载激活不同的环境配置文件。公共的配置信息可以写在application.properties文件中。

    3、YAML多环境配置

    spring:
      profiles:
          active: pro
      # 时区和时间格式化
      jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: Asia/Chongqing
    
    ---
    spring:
      profiles: dev
    # 端口配置
    server:
      port: 8080
    
    ---
    spring:
      profiles: pro
    # 端口配置
    server:
      port: 8081
    
    ---
    spring:
      profiles: test
    # 端口配置
    server:
      port: 8082
    

    更改激活选项的值就可以启动不同的环境配置。不同的配置使用三个横杠(-)区分即可。其实这是一种单文件多配置的一种体现方式。

    4、两种配置方法的比较
    Properties配置多环境,需要添加多个配置文件,YAML只需要一个配件文件
    书写格式的差异,yaml相对比较简洁,优雅
    YAML的缺点:不能通过@PropertySource注解加载。如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件。

    5、如何使用
    在命令行启动:java -jar myapp.jar --spring.profiles.active=dev

    更多干货分享,欢迎关注我的微信公众号:爪哇论剑(微信号:itlemon)
    在这里插入图片描述

    展开全文
  • Spring Boot 打包分离配置文件

    万次阅读 2018-07-19 20:47:20
    按照规定,Spring Boot配置文件加载优先级如下: 当前目录下的config子目录 当前目录 classpath下的config目录 classpath根路径 优先级自上而下递减。 所以,要实现配置文件分离,只需要在可...

    如果只是想在打成jar包的时候单独把配置文件分离出来,这个其实简单。按照规定,Spring Boot 的配置文件加载优先级如下:

    1. 当前目录下的config子目录
    2. 当前目录
    3. classpath下的config目录
    4. classpath根路径

    #####优先级自上而下递减。

    所以,要实现配置文件分离,只需要在编译出来的jar文件的同级目录创建一个config目录,然后把配置文件复制到该目录即可,运行时,会优先使用config目录下的配置文件。
    参考文档:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
    ###优化
    如果只是像上边那样配置,jar文件当中其实还有一份配置文件,只不过加载的时候被优先级更高的config目录的配置文件覆盖了。如果要消除jar文件中的配置文件,可以在pom.xml文件中指定剔除的配置文件,示例如下:

    <build>
    	<resources>
    		<resource>
    			<directory>src/main/resources</directory>
    			<excludes>
    				<exclude>**/*.properties</exclude>
    				<exclude>**/*.yml</exclude>
    			</excludes>
    		</resource>
    	</resources>
    </build>
    

    这样在打包的时候就把.properties,.yml类型的配置文件都过滤掉了。

    如果要实现依赖jar包的分离,配置麻烦一些,可参考另一篇博客 点我查看O(∩_∩)O

    展开全文
  • Spring Boot -02配置文件

    万次阅读 2021-05-26 16:51:24
    二、配置文件 1、配置文件 SpringBoot使用一个全局的配置文件配置文件名是固定的; •application.properties •application.yml 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动...

    二、配置文件

    1、配置文件

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

    •application.properties

    •application.yml

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

    YAML(YAML Ain’t Markup Language)

    ​ YAML A Markup Language:是一个标记语言

    ​ YAML isn’t Markup Language:不是一个标记语言;

    标记语言:

    ​ 以前的配置文件;大多都使用的是 xxxx.xml文件;

    ​ YAML:以数据为中心,比json、xml等更适合做配置文件;

    ​ YAML:配置例子

    server:
      port: 8081
    

    ​ XML:

    <server>
    	<port>8081</port>
    </server>
    

    2、YAML语法:

    1、基本语法

    k:(空格)v:表示一对键值对(空格必须有);

    空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

    server:
        port: 8081
        path: /hello
    

    属性和值也是大小写敏感;

    2、值的写法

    字面量:普通的值(数字,字符串,布尔)

    ​ k: v:字面直接来写;

    ​ 字符串默认不用加上单引号或者双引号;

    ​ “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

    ​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

    ​ ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

    ​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

    对象、Map(属性和值)(键值对):

    ​ k: v:在下一行来写对象的属性和值的关系;注意缩进

    ​ 对象还是k: v的方式

    friends:
    		lastName: zhangsan
    		age: 20
    

    行内写法:

    friends: {lastName: zhangsan,age: 18}
    

    数组(List、Set):

    用- 值表示数组中的一个元素

    pets:
     - cat
     - dog
     - pig
    

    行内写法

    pets: [cat,dog,pig]
    

    3、配置文件值注入

    配置文件

    person:
        lastName: hello
        age: 18
        boss: false
        birth: 2021/05/26
        maps: {k1: v1,k2: 12}
        lists:
          - lisi
          - zhaoliu
        dog:
          name: 小狗
          age: 12
    

    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可能会乱码

    调整
    在这里插入图片描述

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

    @ConfigurationProperties@Value
    功能批量注入配置文件中的属性@ConfigurationProperties(prefix = “person”)一个个指定@Value("${person.last-name}")
    松散绑定(松散语法 --驼峰命名规则)支持不支持
    SpEL
    (spring表达式->{11*2)
    不支持支持
    JSR303数据校验
    必须是邮箱格式 @Email
    支持不支持
    复杂类型封装支持不支持

    配置文件yml还是properties他们都能获取到值;

    如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

    如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

    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("#{11*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&@Bean

    @PropertySource:加载指定的配置文件;

    /**
     * 将配置文件中配置的每一个属性的值,映射到这个组件中
     * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
     *
     * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
     *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
     *
     */
    @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("#{11*2}")
        private Integer age;
        //@Value("true")
        private Boolean boss;
    
    

    @ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;

    Spring 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.atguigu.springboot.service.HelloService"></bean>
    </beans>
    

    SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式

    1、配置类**@Configuration**------>Spring配置文件

    2、使用**@Bean**给容器中添加组件

    /**
     * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
     *
     * 在配置文件中用<bean><bean/>标签添加组件
     *
     */
    @Configuration
    public class MyAppConfig {
    
        //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
        @Bean
        public HelloService helloService02(){
            System.out.println("配置类@Bean给容器中添加组件了...");
            return new HelloService();
        }
    }
    

    ##4、配置文件占位符

    1、随机数

    ${random.value}、${random.int}、${random.long}
    ${random.int(10)}、${random.int[1024,65536]}
    
    

    2、占位符获取之前配置的值,如果没有可以是用:指定默认值

    person.last-name=张三${random.uuid}
    person.age=${random.int}
    person.birth=2017/12/15
    person.boss=false
    person.maps.k1=v1
    person.maps.k2=14
    person.lists=a,b,c
    person.dog.name=${person.hello:hello}_dog
    person.dog.age=15
    

    5、Profile

    1、多Profile文件

    我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

    默认使用application.properties的配置;

    2、yml支持多文档块方式

    server:
      port: 8081
    spring:
      profiles:
        active: prod
    
    ---
    server:
      port: 8083
    spring:
      profiles: dev
    
    
    ---
    
    server:
      port: 8084
    spring:
      profiles: prod  #指定属于哪个环境
    

    3、激活指定profile

    ​ 1、在配置文件中指定 spring.profiles.active=dev

    ​ 2、命令行:

    ​ java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

    ​ 可以直接在测试的时候,配置传入命令行参数

    ​ 3、虚拟机参数;

    ​ -Dspring.profiles.active=dev

    6、配置文件加载位置

    springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

    –file:./config/

    –file:./

    –classpath:/config/

    –classpath:/

    优先级由高到底,高优先级的配置会覆盖低优先级的配置;

    SpringBoot会从这四个位置全部加载主配置文件;互补配置

    我们还可以通过spring.config.location来改变默认的配置文件位置

    项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;

    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties

    7、外部配置加载顺序

    SpringBoot也可以从以下位置加载配置; 优先级从高到低;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置

    1.命令行参数

    所有的配置都可以在命令行上进行指定

    java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc

    多个配置用空格分开; --配置项=值

    2.来自java:comp/env的JNDI属性

    3.Java系统属性(System.getProperties())

    4.操作系统环境变量

    5.RandomValuePropertySource配置的random.*属性值

    由jar包外向jar包内进行寻找;

    优先加载带profile

    6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

    7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件

    再来加载不带profile

    8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件

    9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件

    10.@Configuration注解类上的@PropertySource

    11.通过SpringApplication.setDefaultProperties指定的默认属性

    所有支持的配置加载来源;

    参考官方文档

    8、自动配置原理

    配置文件到底能写什么?怎么写?自动配置原理;

    配置文件能配置的属性参照

    1、自动配置原理:

    1)、SpringBoot启动的时候加载主配置类,开启了自动配置功能 @EnableAutoConfiguration

    2)、@EnableAutoConfiguration 作用:

    • 利用EnableAutoConfigurationImportSelector给容器中导入一些组件?

    • 可以查看selectImports()方法的内容;

    • List configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的配置

      • SpringFactoriesLoader.loadFactoryNames()
        扫描所有jar包类路径下  META-INF/spring.factories
        把扫描到的这些文件的内容包装成properties对象
        从properties中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中
        
        

    将 类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中;

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
    org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
    org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
    org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
    org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
    org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
    org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
    org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
    org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
    org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
    org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
    org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
    org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
    org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
    org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
    org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
    org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
    org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
    org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
    org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
    org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
    org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
    org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
    org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
    org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
    org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
    org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
    org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
    org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
    org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
    org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
    org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
    org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
    org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
    org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
    org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
    org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
    org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
    org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
    org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
    org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
    org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
    org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
    org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
    org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
    org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
    org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
    org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
    org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
    org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
    org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
    org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
    org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
    org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
    org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
    org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
    org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
    org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
    org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
    org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
    org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
    org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
    

    每一个这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;

    3)、每一个自动配置类进行自动配置功能;

    4)、以**HttpEncodingAutoConfiguration(Http编码自动配置)**为例解释自动配置原理;

    @Configuration   //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
    @EnableConfigurationProperties(HttpEncodingProperties.class)  //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中
    
    @ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效;    判断当前应用是否是web应用,如果是,当前配置类生效
    
    @ConditionalOnClass(CharacterEncodingFilter.class)  //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;
    
    @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)  //判断配置文件中是否存在某个配置  spring.http.encoding.enabled;如果不存在,判断也是成立的
    //即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;
    public class HttpEncodingAutoConfiguration {
      
      	//他已经和SpringBoot的配置文件映射了
      	private final HttpEncodingProperties properties;
      
       //只有一个有参构造器的情况下,参数的值就会从容器中拿
      	public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
    		this.properties = properties;
    	}
      
        @Bean   //给容器中添加一个组件,这个组件的某些值需要从properties中获取
    	@ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件?
    	public CharacterEncodingFilter characterEncodingFilter() {
    		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
    		filter.setEncoding(this.properties.getCharset().name());
    		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
    		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
    		return filter;
    	}
    

    根据当前不同的条件判断,决定这个配置类是否生效?

    一但这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;

    5)、所有在配置文件中能配置的属性都是在xxxxProperties类中封装者‘;配置文件能配置什么就可以参照某个功能对应的这个属性类

    @ConfigurationProperties(prefix = "spring.http.encoding")  //从配置文件中获取指定的值和bean的属性进行绑定
    public class HttpEncodingProperties {
    
       public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
    

    精髓:

    1)、SpringBoot启动会加载大量的自动配置类

    2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;

    3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)

    4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;

    xxxxAutoConfigurartion:自动配置类;

    给容器中添加组件

    xxxxProperties:封装配置文件中相关属性;

    2、细节

    1、@Conditional派生注解(Spring注解版原生的@Conditional作用)

    作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效;

    @Conditional扩展注解作用(判断是否满足当前指定条件)
    @ConditionalOnJava系统的java版本是否符合要求
    @ConditionalOnBean容器中存在指定Bean;
    @ConditionalOnMissingBean容器中不存在指定Bean;
    @ConditionalOnExpression满足SpEL表达式指定
    @ConditionalOnClass系统中有指定的类
    @ConditionalOnMissingClass系统中没有指定的类
    @ConditionalOnSingleCandidate容器中只有一个指定的Bean,或者这个Bean是首选Bean
    @ConditionalOnProperty系统中指定的属性是否有指定的值
    @ConditionalOnResource类路径下是否存在指定资源文件
    @ConditionalOnWebApplication当前是web环境
    @ConditionalOnNotWebApplication当前不是web环境
    @ConditionalOnJndiJNDI存在指定项

    自动配置类必须在一定的条件下才能生效;

    我们怎么知道哪些自动配置类生效;

    我们可以通过启用 debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置类生效;

    =========================
    AUTO-CONFIGURATION REPORT
    =========================
    
    
    Positive matches:(自动配置类启用的)
    -----------------
    
       DispatcherServletAutoConfiguration matched:
          - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition)
          - @ConditionalOnWebApplication (required) found StandardServletEnvironment (OnWebApplicationCondition)
            
        
    Negative matches:(没有启动,没有匹配成功的自动配置类)
    -----------------
    
       ActiveMQAutoConfiguration:
          Did not match:
             - @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)
    
       AopAutoConfiguration:
          Did not match:
             - @ConditionalOnClass did not find required classes 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition)
            
    
    展开全文
  • spring boot 核心配置文件是什么?

    万次阅读 2019-07-24 15:16:00
    spring boot 核心配置文件是什么? Spring Boot 有两种类型的配置文件,application 和 bootstrap 文件 Spring Boot会自动加载classpath目前下的这两个文件,文件格式为 properties 或 yml 格式 *.properties ...
  • Spring boot配置文件映射路径

    千次阅读 2018-10-17 16:00:50
    SpringBoot 内置了tomcat,不用再像ssm那样在tomcat的server.xml文件中配置文件映射路劲。 在spring boot的自定义配置类继承 WebMvcConfigurationSupport ,添加路径映射即可,特别简单! @Configuration @...
  • Spring Boot框架解决java开发中繁琐的xml配置 使我们能够快速的搭建一个基础java项目Spring Boot配置文件支持.yml 也支持.propertiesapplication.yml配置结构spring: application: name: wxxcx mvc: view: ...
  • 有需求要求对spring boot的重要配置文件加密解密,不太有思路,大家有什么好的思路或者做过类似的有什么解决方法?
  • spring boot yml配置文件中 ,配置前缀0的数字时,会被特殊处理,如下图配置04100 会当做八进制数处理成2112 解决方法: 配置项两边加引号,这时会当做字符串处理 源码类分析: ConstructYamlInt 分析源码可知:...
  • Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行。在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。一、自定义...
  • Spring boot 配置文件位置

    千次阅读 2018-07-01 21:48:08
    Spring boot 的Application.properties 配置文件可以是以下几个地方:classpath:/,classpath:/config/,file:./,file:./config/.但要注意的是加载的顺序是倒过来的:file:./config/file:./classpath:/config/...
  • application.properties 和 application.yml,spring boot读取配置文件(application.yml)中的属性值,Spring Boot配置文件及yml使用 spring boot 默认全局配置文件: 一、application.properties 写法 k=v 例: ...
  • K8s 集群使用 ConfigMap 优雅加载 Spring Boot 配置文件

    万次阅读 多人点赞 2019-05-12 09:48:28
    我们知道 Spring Boot 工程默认的配置文件名称为 application.properties,有三种方式来运行时指定运行哪个环境的配置文件,kubernetes 中可通过ConfigMap 来实现对容器中应用的配置管理,ConfigMap API 资源提供了...
  • Spring Boot配置文件加载位置

    千次阅读 多人点赞 2019-03-05 10:33:47
    Spring Boot启动会扫描以下位置的application.properties或者application.yml文件作为Spring Boot的默认文件文件如下: file:./config/ file:./ classpath:/config/ classpath:./ 以上是按照优先级从高...
  • spring Boot 配置文件详解

    千次阅读 2016-11-25 22:43:33
    概要 前面我们讲述了如何搭建一个简单的 spring Boot 应用(参见Spring Boot - 初探),这里,我们来学习如何对项目进行相关的配置,包括系统构建、自动配置、依赖注入、开发工具等,使其更好地运行。系统构建 ...
  • 添加configuration maven...org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-configuration-processor&lt;/artifactId&gt; &lt;optional&gt;true&l...
  • spring boot 配置文件pom.xml详解

    千次阅读 2019-07-03 14:27:48
    spring boot 配置文件pom.xml详解 看下方资料的同时可以参考Spring3.0结构图,帮助理解。 pom.xml实例讲解 <project xmlns=...
  • spring boot配置文件加密

    千次阅读 2019-06-21 11:00:15
    为了避免在配置文件直接明文写敏感信息, 使用加密可以解决尴尬 pom文件添加依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-...
  • Spring Boot配置文件加载

    千次阅读 2019-04-30 16:22:26
    使用Spring Boot时,属性按以下顺序加载(请参阅Spring Boot参考指南中的Externalized Configuration)。 命令行参数。 Java系统属性(System.getProperties())。 OS环境变量。 来自java:comp / env的JNDI...
  • Spring Boot配置文件数据库密码加密 pom添加依赖 &lt;!-- 数据库加密 --&gt; &lt;dependency&gt; &lt;groupId&gt;com.github.ulisesbocchio&lt;/groupId&gt; &lt;...
  • docker 配置spring boot项目带配置文件

    千次阅读 2019-04-20 21:50:10
    1、创建一个spring boot项目 @Controller public class WebDame { @Value("${houy.name}") private String name; @ResponseBody @RequestMapping("/hello") public String hellow(){ ret...
  • 文章目录加密Spring Boot项目中配置文件的明文密码添加依赖和插件使用jasypt加密过程小结参考文档 加密Spring Boot项目中配置文件的明文密码 如果不想在Spring Boot项目配置文件存储明文密码(比如MySQL密码、Redis...
  • spring boot mybatis 读取配置文件

    万次阅读 2016-11-05 12:15:42
    spring boot mybatis 配置整理 两种加载mybatis的配置的方式
  • Spring boot配置文件 Spring Boot使用一个全局的配置文件application.properties或application.yml 配置文件可以放置在src/main/resources目录或者类路径的/config下 Spring Boot不仅支持常规的properties文件,...
  • Spring Boot加载配置文件

    千次阅读 2017-11-07 16:13:57
     Spring Boot默认的配置文件名称为application.properties,SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中: 当前目录下的/config子目录,当前目录。一个...
  • Spring-Boot配置文件数据源配置项(常用配置项为红色)
  • 启动spring boot项目指定配置文件名称

    千次阅读 2017-05-02 11:27:51
    启动spring boot项目指定配置文件名称new SpringApplicationBuilder(EurekaServer.class).properties( "spring.config.name:eureka", "logging.level.com.netflix.discovery:OFF").run(args);
  • spring boot 使用外部配置文件

    千次阅读 2018-11-02 16:52:45
    https://blog.csdn.net/jiashiwen/article/details/78286149 https://blog.csdn.net/m0_37893932/article/details/78275418?locationNum=7&amp;fps=1
  • 1、通过《Spring Boot 全局配置文件》与《@Value 取赋值详解与 @ConfigurationProperties 对比》已经知道使用“@Value”注解与“@ConfigurationProperties”可以从全局配置文件“application.prope...
  • Spring-Boot配置文件thymeleaf模板配置项 application.properties

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,001
精华内容 102,800
关键字:

bootspring控制配置文件

spring 订阅