實戰(zhàn)篇-接口實現(xiàn),配置和部署

# 接口配置

- api配置

通過@ControllerAdvice,截獲已知異常,并返回相應(yīng)的錯誤信息,具體見
flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebResponseException.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

@ControllerAdvice@ResponseBodypublic class WebResponseException {
? ? private final Logger log = LoggerFactory.getLogger(WebResponseException.class);
? ?
? ? @ExceptionHandler(ConstraintViolationException.class)
? ? public ActionResult handleConstraintViolationException(ConstraintViolationException ex) { ... }

? ? @ExceptionHandler(BusinessException.class)
? ? public ActionResult handleBusinessException(BusinessException ex) { ... }
?
? ? @ExceptionHandler(Exception.class)
? ? public ActionResult handleServerException(Exception ex) { ... }
}

通過@RestControllerAdvice配置統(tǒng)一返回ActionResult,同時支持接口直接返回ActionResult,具體見
flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebResponseAdvice.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

@RestControllerAdvice(basePackages = "plus.cove.flower.webapi.controller")
public class WebResponseAdvice implements ResponseBodyAdvice<Object> {
? ?...
}

通過ErrorController,截獲一些404及未知錯誤來統(tǒng)一返回,具體見
flower-webapi/src/main/java/plus/cove/flower/webapi/component/ErrorController.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

- mvc配置

配置驗證器,攔截器,格式化,轉(zhuǎn)換器,具體見flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebMvcConfig.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

@Configuration(proxyBeanMethods =false)
@EnableWebMvc
// 導(dǎo)入應(yīng)用層及倉儲實現(xiàn)層,為了保持應(yīng)用層和倉儲實現(xiàn)層不依賴其他框架,在此引入
@ImportResource({"classpath:beans/application.xml", "classpath:beans/repository.xml"})
// 掃描需要注入的包
@ComponentScan({"plus.cove.flower.*", "plus.cove.infrastructure.*"})
// 掃描過濾器等
@ServletComponentScan({"plus.cove.flower.*"})
public class WebMvcConfigimplements WebMvcConfigurer {
// 配置集合驗證器,可以對集合內(nèi)對象進行驗證
@Override
public Validator getValidator() { return new SpringValidatorAdapter(new CollectionValidator());}

// 配置格式化器,對http request query數(shù)據(jù)進行轉(zhuǎn)換
@Override
public void addFormatters(FormatterRegistry registry) { }

// 配置轉(zhuǎn)換器,對http body數(shù)據(jù)進行格式化
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
}

- redis配置

通過RedisTemplate設(shè)置redis的key及value的序列化器,通過CacheManager設(shè)置支持過期時間及其他特性,具體見flower-webapi/src/main/java/plus/cove/flower/webapi/config/RedisConfig.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

- filter

通過WebWrapperFilter對請求進行包裝,然后日志攔截器LogTracingInterceptor即可以打印body,具體見flower-webapi/src/main/java/plus/cove/flower/webapi/config/WebWrapperFilter.java · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)

- metrics

自定義監(jiān)控指標(biāo)Counter類型,需要增加某個指標(biāo),通過調(diào)用MetricsConfig.getCounter("indicator_name").increment(); 具體使用詳見監(jiān)控篇。

- mybatis

通過MyBatisConfig配置MyBatis相關(guān)參數(shù)

@Configuration
@EnableTransactionManagement
// 配置掃面包
@MapperScan(basePackages ="plus.cove.flower.repository.mybatis")
public class MyBatisConfig {

@Bean
public SqlStatementInterceptor likeInterceptor() {
? ? // 配置自定義MyBatis攔截器
? ? SqlStatementInterceptor statement = new SqlStatementInterceptor();
? ? return statement;
}}

*SqlStatementInterceptor 主要實現(xiàn)過濾like的特殊符號_%[
副作用就是會修改傳入?yún)?shù),慎用,希望大神有更好的解決方法??!

- security

設(shè)置安全相關(guān),可以配合WebSecurityFilter獲取當(dāng)前Token

# 接口部署

- profile

一般項目都會有開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境,每個環(huán)境的參數(shù)是不一樣的,SpringBoot的application.yml支持profile,每個profile可以設(shè)置不同的參數(shù),通過application-{profile}.yml可以切換不同的環(huán)境。但這個需要在application.yml中指定spring.profiles.active=profile_name,手動切換還是比較繁瑣且有出錯的風(fēng)險,所以我們需要自動化。
第一步:在application.yml中設(shè)置spring.profiles.active="@profile.active@",為什么必須用引號,沒搞明白
第二步:在pom.xml中設(shè)置<profiles>,可以通過設(shè)置activation設(shè)置默認(rèn)值
第三步:在pom.xml中build-resources中設(shè)置資源,filtering=true,includes中設(shè)置包含的資源,如果出現(xiàn)打包后資源不存在,則可能是此處設(shè)置錯誤
第四步:運行

運行方式1:通過在Maven中指定Profiles,直接在IDEA中運行即可
運行方式2:在命令中指定profile,-Pdevelop 比如:mvn spring-boot:run -Pdevelop 或者 mvn clean package -P develop

我們平時運行可以通過上述方式執(zhí)行,但是發(fā)布呢,請看下一節(jié)

- deploy

為了減少發(fā)布出錯的機率,我們可以通過shell腳本進行發(fā)布,包括tomcat部署和docker部署

- tomcat部署:需要在目標(biāo)機器安裝tomcat,具體代碼見project/build/deploy.sh · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)
主要流程:編譯-復(fù)制-部署
使用方式:./deploy.sh develop flower-api flower-api
* 具體可以根據(jù)項目需要進行修改

- docker部署:需要在本機及目標(biāo)機器安裝docker,具體代碼見project/build/docker.sh · Jimmy.Zhang/flower - 碼云 - 開源中國 (gitee.com)
主要流程:編譯-鏡像-保存-獲取
* 具體可以根據(jù)項目需要進行修改

- nginx

Nginx官方推薦的nginx.conf標(biāo)準(zhǔn)配置 (jdon.com)



SpringBoot入門系列

實戰(zhàn)篇-項目架構(gòu),原則和分層
實戰(zhàn)篇-基礎(chǔ)設(shè)施,基類與配置
實戰(zhàn)篇-接口實現(xiàn),配置和部署
實戰(zhàn)篇-倉儲技術(shù)選型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容