Spring Boot根據(jù)配置暴露接口的代碼實(shí)現(xiàn)
SpringBoot 在 org.springframework.boot.autoconfigure.condition 包下提供了很多 ConditionalOnXxx 格式的條件注解,如 ConditionalOnBean、ConditionalOnMissingBean、ConditionalOnClass、ConditionalOnMissingClass 等。這些類名起的非常好,很直觀的可以理解其功能,具體使用哪些可以根據(jù)業(yè)務(wù)需要來選擇。
本示例要實(shí)現(xiàn)的效果:在非生產(chǎn)環(huán)境下暴露測試用的接口。
使用到的注解:@ConditionalOnExpression 和 ConditionalOnBean。
首先定義一個(gè) TestEnvironment 的類:
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.stereotype.Component;
@Component
@ConditionalOnExpression("'${my-app.env}' != 'PROD'")
public class TestEnvironment {
}
上面 @ConditionalOnExpression 注解參數(shù)中的 ${my-app.env} 為 SpEL 表達(dá)式,其值從配置文件讀取。'${my-app.env}' != 'PROD' 表示如果 my-app.env 配置項(xiàng)的值不為 PROD,則該類生效。
因?yàn)槎鄠€(gè)地方可能會用到這個(gè)判斷表達(dá)式,所以將其定義為單獨(dú)的類,以方便使用和維護(hù)。
之后在測試用的 Controller 或 Service 上加上 @ConditionalOnBean(TestEnvironment.class) 注解即可。
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 測試
*
* @author JiaJia
*/
@Validated
@RequiredArgsConstructor
@RestController
@ConditionalOnBean(TestEnvironment.class)
@RequestMapping("test")
public class TestController extends BaseController {
private final TestService testService;
/**
* 支付測試接口
*/
@PostMapping("/pay")
public R<Void> pay(@Validated @RequestBody PayParam param) {
return testService.pay(param);
}
}
對應(yīng)的測試用 Service 也是相同的寫法:
@Service
@RequiredArgsConstructor
@ConditionalOnBean(TestEnvironment.class)
public class TestServiceImpl implements TestService {
// ...
}
到此這篇關(guān)于Spring Boot根據(jù)配置暴露接口的代碼實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Boot暴露接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解javascript new的運(yùn)行機(jī)制
這篇文章主要介紹了javascript new的運(yùn)行機(jī)制的相關(guān)資料,需要的朋友可以參考下2016-01-01
微信小程序獲取手機(jī)網(wǎng)絡(luò)狀態(tài)的方法【附源碼下載】
這篇文章主要介紹了微信小程序獲取手機(jī)網(wǎng)絡(luò)狀態(tài)的方法,涉及微信小程序wx.getNetworkType函數(shù)檢查網(wǎng)絡(luò)連接狀態(tài)的相關(guān)使用技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12
基于Bootstrap的標(biāo)簽頁組件及bootstrap-tab使用說明
這篇文章主要介紹了基于Bootstrap的標(biāo)簽頁組件及bootstrap-tab使用說明,需要的朋友可以參考下2017-07-07
利用ES6實(shí)現(xiàn)單例模式及其應(yīng)用詳解
單例是在程序設(shè)計(jì)非?;A(chǔ)的東西,這篇文章主要給大家介紹了關(guān)于利用ES6實(shí)現(xiàn)單例模式及其應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
js實(shí)現(xiàn)仿百度汽車頻道選擇汽車圖片展示實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)仿百度汽車頻道選擇汽車圖片展示,實(shí)例分析了javascript鼠標(biāo)事件操作css樣式的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
Javascript 正則表達(dá)式實(shí)現(xiàn)為數(shù)字添加千位分隔符
在項(xiàng)目中做貨幣轉(zhuǎn)換的時(shí)候經(jīng)常需要可以實(shí)現(xiàn)自動格式化輸入的數(shù)字,自動千位分隔符,在網(wǎng)上也看到一些其他網(wǎng)友的實(shí)現(xiàn)的代碼,感覺都不是太滿意,于是自己研究了下,分享給大家。2015-03-03

