Spring Boot外部配置属性注入

  一、命令行参数配置

    Spring Boot可以是基于jar包运行的,打成jar包的程序可以直接通过命令运行:java -jar xx.jar

    那么就可以通过命令行改变相关配置参数。例如默认tomcat端口8080,那么通过命令行可以进行修改,如下:

      java -jar xx.jar --server.port=9090

  二、属性注入

    1、属性注入常用注解:

          

    2、常规属性配置@Value,以c3p0访问数据库为例说明:

      1)引入数据源依赖

        

       2)application.properties增加数据源配置

          

       3)Java配置数据源

        Java配置通过@Configuration和@Bean实现。前置声明当前类是一个配置类,相当于一个Spring配置的xml文件,后者注解在方法上,声明当前方法的返回值为一个Bean。

        数据源配置使用Spring中的@Value注解对每个属性进行注入,通过@Bean添加到容器中。

          

      4)测试数据源是否成功添加

          

       测试结果:

      这个本质就是Spring使用@Value进行属性注入的操作(参考Spring EL和资源调用中基于配置文件部分)。那么Spring Boot有什么改进呢? 使用@ConfigurationProperties。

    3、类型安全的属性配置@ConfigurationProperties

      @Value注入每个配置在实际项目中会显得格外麻烦,因为配置有许多。Spring Boot通过@ConfigurationProperties将properties属性和一个Bean及其实现关联,实现类型安全的配置。改变如下:

      1)application.propterties配置修改

          

       2)数据源配置:

          

         注意@Bean以上部分,删除了@Value相关部分,添加了getter/setter方法(这个必须有)。同时重点关注属性名与properties中保持一致。(默写情况下可以不一致,涉及松散绑定,有机会另外写笔记)。

      3)测试部分同常规属性注入,测试结果一样。

    4、第三方属性配置

      我们查看@ConfigurationProperties注解实现,如下:

            

       可知其除了可以注解类外,还可以在方法上进行注解。那么方法上有什么妙用呢?其与@Bean配合使用,可以将属性绑定到控件之外的第三方组件上。

      实操:

        1)建一个第三方组件

            

         2)application.properties文件赋值

            

         3)配置类,@Bean的同时直接赋值

            

         4)测试

            

      测试结果如下:

            

      通过以上两例通过@ConfigurationProperties,对于待输入属性均必须有getter/setter方法。可以猜测对该注解Spring Boot应该使用了内省或反射机制。

posted on 2021-04-21 17:36  池塘里洗澡的鸭子  阅读(706)  评论(0编辑  收藏  举报