一文講清楚SpringBoot六種讀取配置方式
JAVA前線?
歡迎大家關(guān)注公眾號「JAVA前線」查看更多精彩分享,主要內(nèi)容包括源碼分析、實際應(yīng)用、架構(gòu)思維、職場分享、產(chǎn)品思考等等,同時也非常歡迎大家加我微信「java_front」一起交流學(xué)習(xí)
1 SpringBoot工程創(chuàng)建
1.1 maven工程創(chuàng)建
使用開發(fā)工具創(chuàng)建一個純凈maven工程
1.2 引入依賴
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 新增訪問端點
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)建啟動類
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 運行啟動類
Run AS > Spring Boot App
1.7 訪問測試
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 啟動類引入資源文件
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 新增訪問端點
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 啟動并訪問
http://localhost:8080/createOrder
{"orderId":"orderId_222","orderPrice":200,"createTime":"2022-04-23 08:36:03","extendList":null,"extendMap":null}
3 方式二:@Bean
3.1 新增配置類
刪除配置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 啟動并訪問
http://localhost:8080/createOrder
{"orderId":"orderId_222","orderPrice":200,"createTime":"2022-04-23 09:15:03","extendList":null,"extendMap":null}
4 方式三:@Bean增強
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 修改配置類
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)情況使用此實例
?????*
?????*?如果容器有其它實例則使用其它實例
?????*/
????@Bean
????@ConditionalOnMissingBean(OrderService.class)
????public?OrderService?orderService()?{
????????return?new?OrderServiceAImpl();
????}
}
4.3 啟動并訪問
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 引入依賴
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 新增訪問端點
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 啟動并訪問
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 啟動并訪問
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 啟動并訪問
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六種讀取配置方式,大家在項目中可以進(jìn)行靈活組合和應(yīng)用,希望本文對大家有所幫助。
JAVA前線?
歡迎大家關(guān)注公眾號「JAVA前線」查看更多精彩分享,主要內(nèi)容包括源碼分析、實際應(yīng)用、架構(gòu)思維、職場分享、產(chǎn)品思考等等,同時也非常歡迎大家加我微信「java_front」一起交流學(xué)習(xí)
評論
圖片
表情
