1. 一文講清楚SpringBoot六種讀取配置方式

        共 10482字,需瀏覽 21分鐘

         ·

        2022-04-28 20:19


        JAVA前線(xiàn)?


        歡迎大家關(guān)注公眾號(hào)「JAVA前線(xiàn)」查看更多精彩分享,主要內(nèi)容包括源碼分析、實(shí)際應(yīng)用、架構(gòu)思維、職場(chǎng)分享、產(chǎn)品思考等等,同時(shí)也非常歡迎大家加我微信「java_front」一起交流學(xué)習(xí)




        1 SpringBoot工程創(chuàng)建

        1.1 maven工程創(chuàng)建

        使用開(kāi)發(fā)工具創(chuàng)建一個(gè)純凈maven工程


        1.2 引入依賴(lài)

                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

        4.0.0
        com.java.front.spring.boot
        spring-boot-java-front
        1.0.0-SNAPSHOT

        org.springframework.boot
        spring-boot-starter-parent
        2.1.5.RELEASE



        org.springframework.boot
        spring-boot-starter-web




        1.3 新增訂單模型

        package?com.java.front.spring.boot.model;
        import?java.util.Date;
        import?java.util.List;
        import?java.util.Map;
        import?com.fasterxml.jackson.annotation.JsonFormat;

        public?class?OrderInfoModel?{

        ????private?String?orderId;

        ????private?Integer?orderPrice;

        ????@JsonFormat(pattern?=?"yyyy-MM-dd?HH:mm:ss")
        ????private?Date?createTime;

        ????private?List?extendList;

        ????private?Map?extendMap;

        ????//?getter?setter
        }

        1.4 新增訪(fǎng)問(wèn)端點(diǎn)

        package?com.java.front.spring.boot.controller;
        import?java.util.Date;
        import?org.springframework.stereotype.Controller;
        import?org.springframework.web.bind.annotation.RequestMapping;
        import?org.springframework.web.bind.annotation.ResponseBody;
        import?com.java.front.spring.boot.model.OrderInfoModel;

        @Controller
        public?class?OrderController?{

        ????@ResponseBody
        ????@RequestMapping("getOrder")
        ????public?OrderInfoModel?queryOrder()?{
        ????????OrderInfoModel?orderInfo?=?new?OrderInfoModel();
        ????????orderInfo.setOrderId("orderId_111");
        ????????orderInfo.setOrderPrice(100);
        ????????orderInfo.setCreateTime(new?Date());
        ????????return?orderInfo;
        ????}
        }

        1.5 創(chuàng)建啟動(dòng)類(lèi)

        package?com.java.front.spring.boot;
        import?org.springframework.boot.SpringApplication;
        import?org.springframework.boot.autoconfigure.SpringBootApplication;

        @SpringBootApplication
        public?class?JavaFrontApplication?{

        ????public?static?void?main(String[]?args)?{
        ????????SpringApplication.run(JavaFrontApplication.class,?args);
        ????}
        }

        1.6 運(yùn)行啟動(dòng)類(lèi)

        Run AS > Spring Boot App

        1.7 訪(fǎng)問(wèn)測(cè)試

        http://localhost:8080/getOrder

        {"orderId":"orderId_111","orderPrice":100,"createTime":"2022-04-23 08:10:51","extendList":null,"extendMap":null}

        2 方式一:XML

        2.1 新增訂單服務(wù)

        package?com.java.front.spring.boot.service;
        import?com.java.front.spring.boot.model.OrderInfoModel;

        public?interface?OrderService?{
        ????public?OrderInfoModel?createOrder();
        }


        package?com.java.front.spring.boot.service;
        import?java.util.Date;
        import?com.java.front.spring.boot.model.OrderInfoModel;

        public?class?OrderServiceImpl?implements?OrderService?{

        ????@Override
        ????public?OrderInfoModel?createOrder()?{
        ????????String?orderId?=?"orderId_222";
        ????????OrderInfoModel?orderInfo?=?new?OrderInfoModel();
        ????????orderInfo.setOrderId(orderId);
        ????????orderInfo.setOrderPrice(200);
        ????????orderInfo.setCreateTime(new?Date());
        ????????return?orderInfo;
        ????}
        }

        2.2 新增配置文件

        # src/main/resources/spring-biz.xml

        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">





        2.3 啟動(dòng)類(lèi)引入資源文件

        package?com.java.front.spring.boot;
        import?org.springframework.boot.SpringApplication;
        import?org.springframework.boot.autoconfigure.SpringBootApplication;
        import?org.springframework.context.annotation.ImportResource;

        @ImportResource(locations?=?{?"classpath:spring-biz.xml"?})
        @SpringBootApplication
        public?class?JavaFrontApplication?{

        ????public?static?void?main(String[]?args)?{
        ????????SpringApplication.run(JavaFrontApplication.class,?args);
        ????}
        }

        2.4 新增訪(fǎng)問(wèn)端點(diǎn)

        package?com.java.front.spring.boot.controller;
        import?java.util.Date;
        import?javax.annotation.Resource;
        import?org.springframework.stereotype.Controller;
        import?org.springframework.web.bind.annotation.RequestMapping;
        import?org.springframework.web.bind.annotation.ResponseBody;
        import?com.java.front.spring.boot.model.OrderInfoModel;
        import?com.java.front.spring.boot.service.OrderService;

        @Controller
        public?class?OrderController?{

        ????@Resource
        ????private?OrderService?orderService;

        ????@ResponseBody
        ????@RequestMapping("createOrder")
        ????public?OrderInfoModel?createOrder()?{
        ????????OrderInfoModel?orderInfo?=?orderService.createOrder();
        ????????return?orderInfo;
        ????}
        }

        2.5 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:8080/createOrder

        {"orderId":"orderId_222","orderPrice":200,"createTime":"2022-04-23 08:36:03","extendList":null,"extendMap":null}

        3 方式二:@Bean

        3.1 新增配置類(lèi)

        刪除配置spring-biz.xml并且新增如下配置:

        package?com.java.front.spring.boot.config;
        import?org.springframework.context.annotation.Bean;
        import?org.springframework.context.annotation.Configuration;
        import?com.java.front.spring.boot.service.OrderService;
        import?com.java.front.spring.boot.service.OrderServiceImpl;

        @Configuration
        public?class?OrderServiceConfig?{

        ????@Bean
        ????public?OrderService?orderService()?{
        ????????return?new?OrderServiceImpl();
        ????}
        }

        3.2 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:8080/createOrder

        {"orderId":"orderId_222","orderPrice":200,"createTime":"2022-04-23 09:15:03","extendList":null,"extendMap":null}

        4 方式三:@Bean增強(qiáng)

        4.1 新增訂單服務(wù)

        package?com.java.front.spring.boot.service;
        import?java.util.Date;
        import?com.java.front.spring.boot.model.OrderInfoModel;

        public?class?OrderServiceAImpl?implements?OrderService?{

        ????@Override
        ????public?OrderInfoModel?createOrder()?{
        ????????String?orderId?=?"orderId_AAA";
        ????????OrderInfoModel?orderInfo?=?new?OrderInfoModel();
        ????????orderInfo.setOrderId(orderId);
        ????????orderInfo.setOrderPrice(200);
        ????????orderInfo.setCreateTime(new?Date());
        ????????return?orderInfo;
        ????}
        }


        package?com.java.front.spring.boot.service;
        import?java.util.Date;
        import?org.springframework.stereotype.Service;
        import?com.java.front.spring.boot.model.OrderInfoModel;

        @Service
        public?class?OrderServiceBImpl?implements?OrderService?{

        ????@Override
        ????public?OrderInfoModel?createOrder()?{
        ????????String?orderId?=?"orderId_BBB";
        ????????OrderInfoModel?orderInfo?=?new?OrderInfoModel();
        ????????orderInfo.setOrderId(orderId);
        ????????orderInfo.setOrderPrice(200);
        ????????orderInfo.setCreateTime(new?Date());
        ????????return?orderInfo;
        ????}
        }

        4.2 修改配置類(lèi)

        package?com.java.front.spring.boot.config;
        import?org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
        import?org.springframework.context.annotation.Bean;
        import?org.springframework.context.annotation.Configuration;
        import?com.java.front.spring.boot.service.OrderService;
        import?com.java.front.spring.boot.service.OrderServiceAImpl;

        @Configuration
        public?class?OrderServiceConfig?{

        ????/**
        ?????*?默認(rèn)情況使用此實(shí)例
        ?????*
        ?????*?如果容器有其它實(shí)例則使用其它實(shí)例
        ?????*/

        ????@Bean
        ????@ConditionalOnMissingBean(OrderService.class)
        ????public?OrderService?orderService()?
        {
        ????????return?new?OrderServiceAImpl();
        ????}
        }

        4.3 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:8080/createOrder

        {"orderId":"orderId_BBB","orderPrice":200,"createTime":"2022-04-23 09:40:13","extendList":null,"extendMap":null}

        5 方式四:application.properties

        5.1 引入依賴(lài)


        org.springframework.boot
        spring-boot-configuration-processor
        true


        5.2 新增配置文件

        # src/main/resources/application.properties

        server.port=9999
        spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
        spring.jackson.time-zone=GMT+8

        order.orderId=orderId_abc
        order.orderPrice=500
        order.createTime=2022/01/01 11:00:00
        order.extendList=a,b,c
        order.extendMap.k1=v1
        order.extendMap.k2=v2

        java.front.test.boolean=true
        java.front.test.list=a,b,c
        java.front.test.map={"k1":"v1","k2":"v2"}

        5.3 新增訂單模型

        package?com.java.front.spring.boot.model;
        import?java.util.Date;
        import?java.util.List;
        import?java.util.Map;
        import?org.springframework.beans.factory.annotation.Value;
        import?org.springframework.boot.context.properties.ConfigurationProperties;
        import?org.springframework.stereotype.Component;

        @Component
        @ConfigurationProperties(prefix?=?"order")
        public?class?OrderInfoModelV2?{

        ????//?---------application.properties?start?with?order?config---------

        ????private?String?orderId;

        ????private?Integer?orderPrice;

        ????private?Date?createTime;

        ????private?List?extendList;

        ????private?Map?extendMap;

        ????//?---------application.properties?use?@value?to?read-------------

        ????@Value("${java.front.test.boolean:false}")
        ????private?Boolean?testBoolean;

        ????@Value("#{'${java.front.test.list:{}}'.split(',')}")
        ????private?List?testList;

        ????@Value("#{${java.front.test.map:null}}")
        ????private?Map?testMap;

        ????@Value("#{3*10}")
        ????private?Integer?testInteger;

        ????//?-------------------------getter?setter-------------------------
        }

        5.4 新增訪(fǎng)問(wèn)端點(diǎn)

        package?com.java.front.spring.boot.controller;
        import?java.util.Date;
        import?javax.annotation.Resource;
        import?org.springframework.stereotype.Controller;
        import?org.springframework.web.bind.annotation.RequestMapping;
        import?org.springframework.web.bind.annotation.ResponseBody;
        import?com.java.front.spring.boot.model.OrderInfoModel;
        import?com.java.front.spring.boot.model.OrderInfoModelV2;
        import?com.java.front.spring.boot.service.OrderService;

        @Controller
        public?class?OrderController?{

        ????@Resource
        ????private?OrderInfoModelV2?orderInfoModelV2;

        ????@ResponseBody
        ????@RequestMapping("queryOrderFromConfig")
        ????public?OrderInfoModelV2?queryOrderFromConfig()?{
        ????????return?orderInfoModelV2;
        ????}
        }

        5.5 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:9999/queryOrderFromConfig

        {"orderId":"orderId_abc","orderPrice":500,"createTime":"2022-01-01 11:00:00","extendList":["a","b","c"],"extendMap":{"k1":"v1","k2":"v2"},"testBoolean":true,"testList":["a","b","c"],"testMap":{"k1":"v1","k2":"v2"},"testInteger":30}

        6 方式五:@PropertySource

        6.1 拆分訂單配置

        # src/main/resources/order.properties

        order.orderId=orderId_abc
        order.orderPrice=500
        order.createTime=2022/01/01 11:00:00
        order.extendList=a,b,c
        order.extendMap.k1=v1
        order.extendMap.k2=v2

        java.front.test.boolean=true
        java.front.test.list=a,b,c
        java.front.test.map={"k1":"v1","k2":"v2"}

        6.2 @PropertySource

        @PropertySource(value?=?{?"order.properties"?})
        @Component
        @ConfigurationProperties(prefix?=?"order")
        public?class?OrderInfoModelV2?{
        }

        6.3 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:9999/queryOrderFromConfig

        {"orderId":"orderId_abc","orderPrice":500,"createTime":"2022-01-01 11:00:00","extendList":["a","b","c"],"extendMap":{"k1":"v1","k2":"v2"},"testBoolean":true,"testList":["a","b","c"],"testMap":{"k1":"v1","k2":"v2"},"testInteger":30}

        7 方式六:application.yaml

        7.1 新增配置文件

        # src/main/resources/application.yaml

        server:
        port: 9999

        spring:
        jackson:
        date-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8

        order:
        orderId: orderId_abc
        orderPrice: 500
        createTime: 2022/01/01 11:00:00
        extendList:
        - a
        - b
        - c
        extendMap:
        k1: v1
        k2: v2

        java:
        front:
        test:
        boolean: true
        list: 'a,b,c'
        map: '{"k1":"v1","k2":"v2"}'

        7.2 啟動(dòng)并訪(fǎng)問(wèn)

        http://localhost:9999/queryOrderFromConfig

        {"orderId":"orderId_abc","orderPrice":500,"createTime":"2022-01-01 11:00:00","extendList":["a","b","c"],"extendMap":{"k1":"v1","k2":"v2"},"testBoolean":true,"testList":["a","b","c"],"testMap":{"k1":"v1","k2":"v2"},"testInteger":30}

        8 文章總結(jié)

        本文梳理了SpringBoot六種讀取配置方式,大家在項(xiàng)目中可以進(jìn)行靈活組合和應(yīng)用,希望本文對(duì)大家有所幫助。




        JAVA前線(xiàn)?


        歡迎大家關(guān)注公眾號(hào)「JAVA前線(xiàn)」查看更多精彩分享,主要內(nèi)容包括源碼分析、實(shí)際應(yīng)用、架構(gòu)思維、職場(chǎng)分享、產(chǎn)品思考等等,同時(shí)也非常歡迎大家加我微信「java_front」一起交流學(xué)習(xí)



        瀏覽 31
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 韩国三级日本三级香港三级 | 久久天天躁狠狠躁夜夜躁2014 | 精品小视频 | 久久激情视频网 | 亚洲精品乱码久久久久久麻豆不卡 |