精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

構建美觀且高效的 Spring Boot 腳手架

開發 前端
我們項目常常依賴中間件,比如mysql,kafka,redis等,如果要單元測試,我們通常的做法是在dev環境部署一套項目中依賴的中間件,非常麻煩,而且數據還不容易隔離,所以內存版的中間件就是來解決這個問題的。

咱們先看看如何用IDE創建springboot項目,然后一路next就行了。

image.pngimage.png

這就是剛創建好的項目,新鮮出爐,有啟動類、配置文件、測試啟動類。

image.pngimage.png

版本管理

咱們的項目就這么輕松的創建成功了,是不是可以上手開發了,先別著急。先看一下版本之間的對應關系:https://spring.io/projects/spring-cloud

image.png

廢話不多說,直接看腳手架。

image.pngimage.png

接下來我們來看看都有哪些核心類,我把代碼貼到下方。

image.pngimage.png

全局異常處理

@RestControllerAdvice
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {




    @ExceptionHandler(value = {MethodArgumentNotValidException.class})
    public ResponseResult<String> handleValidException(MethodArgumentNotValidException ex, HttpServletResponse httpServletResponse) {
        log.error("[GlobalExceptionHandler][handleValidException] 參數校驗exception", ex);
        return wrapperBindingResult(ex.getBindingResult(), httpServletResponse);
    }




    private ResponseResult<String> wrapperBindingResult(BindingResult bindingResult, HttpServletResponse httpServletResponse) {
        StringBuilder errorMsg = new StringBuilder();
        for (ObjectError error : bindingResult.getAllErrors()) {
            if (error instanceof FieldError) {
                errorMsg.append(((FieldError) error).getField()).append(": ");
            }
            errorMsg.append(error.getDefaultMessage() == null ? "" : error.getDefaultMessage());


        }
        httpServletResponse.setStatus(HttpStatus.BAD_REQUEST.value());
        return ResponseResult.failed(ResultCode.FAILED.getCode(),null);
    }

日志處理

@Aspect
@Slf4j
@Component
public class WebLogAspect {


    @Pointcut("@within(org.springframework.stereotype.Controller) || @within(org.springframework.web.bind.annotation.RestController)")
    public void cutController() {
    }


    @Before("cutController()")
    public void doBefore(JoinPoint point) {
        //獲取攔截方法的參數
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String url = request.getRequestURL().toString();
        List<Object> list = Lists.newArrayList();
        for (Object object : point.getArgs()) {
            if (object instanceof MultipartFile || object instanceof HttpServletRequest || object instanceof HttpServletResponse || object instanceof BindingResult) {
                continue;
            }
            list.add(object);
        }
        log.info("請求 uri:[{}],params:[{}]", url, StringUtils.join(list, ","));
    }


    /**
     * 返回通知:
     * 1. 在目標方法正常結束之后執行
     * 1. 在返回通知中補充請求日志信息,如返回時間,方法耗時,返回值,并且保存日志信息
     *
     * @param response
     * @throws Throwable
     */
    @AfterReturning(returning = "response", pointcut = "cutController()")
    public void doAfterReturning(Object response) {
        if (response != null) {
            log.info("請求返回result:[{}]", JSONUtil.toJsonStr(response));
        }
    }
}

跨域類

@Configuration
public class GlobalCorsConfig {


    /**
     * 允許跨域調用的過濾器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允許所有域名進行跨域調用
        config.setAllowedOrigins(Lists.newArrayList("*"));
        //允許跨越發送cookie
        config.setAllowCredentials(true);
        //放行全部原始頭信息
        config.addAllowedHeader("*");
        //允許所有請求方法跨域調用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
@Configuration
@EnableOpenApi
public class SwaggerConfig {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo()).enable(true)
                .select()
                //apis: 添加swagger接口提取范圍
                .apis(RequestHandlerSelectors.basePackage("com.vines.controller"))
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("項目描述")
                .description("基礎服務項目描述")
                .contact(new Contact("作者", "作者URL", "作者Email"))
                .version("1.0")
                .build();
    }
}

響應體

@Data
public class  ResponseResult<T> {
    private int code;
    private String message;
    private T data;


    public static <T> ResponseResult<T> success(T data){
        ResponseResult<T> respnotallow=new ResponseResult<>();
        responseResult.setCode(ResultCode.SUCCESS.getCode());
        responseResult.setMessage(ResultCode.SUCCESS.getMessage());
        responseResult.setData(data);
        return  responseResult;
    }
    public static <T> ResponseResult<T> success(){
        ResponseResult<T> respnotallow=new ResponseResult<>();
        responseResult.setCode(ResultCode.SUCCESS.getCode());
        responseResult.setMessage(ResultCode.SUCCESS.getMessage());
        return  responseResult;
    }


    public static <T> ResponseResult failed(int code,String message){
        ResponseResult<T> respnotallow=new ResponseResult<>();
        responseResult.setCode(code);
        responseResult.setMessage(message);
        return responseResult;
    }


    public static boolean isSucceed(ResponseResult responseResult){
        return responseResult.getCode()==ResultCode.SUCCESS.getCode();
    }
}

常用工具

除了這些基本的工具之外,我再推薦幾款我們項目中常用的工具

我們項目常常依賴中間件,比如mysql,kafka,redis等,如果要單元測試,我們通常的做法是在dev環境部署一套項目中依賴的中間件,非常麻煩,而且數據還不容易隔離,所以內存版的中間件就是來解決這個問題的。

內存版Redis:https://github.com/kstyrc/embedded-redis

內存版DB:https://github.com/mariadb

hutool:非常好用的java工具類庫 https://hutool.cn/

mybatis plus:非常好用的ORM框架 https://mapstruct.org/

mapStruct:java bean 映射工具 https://mapstruct.org/

redisson: 官方推薦客戶端 https://github.com/redisson/redisson

責任編輯:武曉燕 來源: 一安未來
相關推薦

2020-06-29 11:35:02

Spring BootJava腳手架

2020-08-19 08:55:47

Redis緩存數據庫

2021-01-07 05:34:07

腳手架JDK緩存

2021-07-13 18:42:38

Spring Boot腳手架開發

2022-12-12 08:56:45

Vite3Vite

2021-09-01 10:07:43

開發零搭建Groovy

2021-03-11 14:16:47

Spring Boo開發腳手架

2021-03-09 17:11:09

數據庫腳手架開發

2016-09-07 15:35:06

VueReact腳手架

2021-12-23 10:35:32

SpringCloud腳手架架構

2020-03-20 08:32:41

物聯網腳手架傳感器

2021-05-21 05:22:52

腳手架工具項目

2018-08-30 16:08:37

Node.js腳手架工具

2022-04-24 11:33:47

代碼管理工程

2019-12-25 15:20:48

前端腳手架命令

2018-06-11 14:39:57

前端腳手架工具node.js

2023-11-21 17:36:04

OpenFeignSentinel

2025-10-14 09:58:34

2021-04-28 16:10:48

開發腳手架 Spring

2014-08-15 09:36:06

點贊
收藏

51CTO技術棧公眾號

韩国女主播一区二区三区| 91看片在线观看| 一区二区国产在线观看| 国产香蕉精品视频一区二区三区| 欧美成年人视频在线观看| h片在线观看网站| 91视频www| 91亚洲国产精品| 偷偷操不一样的久久| 成人情趣视频网站| 欧美精品一区男女天堂| 黄色av免费在线播放| 国产在线xxx| 亚洲国产电影在线观看| 国产精品区一区二区三含羞草| 亚洲av无码不卡| 激情欧美亚洲| 久久亚洲春色中文字幕| 粉嫩av蜜桃av蜜臀av| 麻豆精品在线| 欧美美女黄视频| 免费大片在线观看| 丁香花在线高清完整版视频| 国产精品久久久久久户外露出 | 果冻天美麻豆一区二区国产| 欧美精品99久久久**| 亚洲中文字幕无码专区| 日本h片在线| 18欧美乱大交hd1984| 欧美日韩亚洲一区二区三区四区| www.色呦呦| 国产综合色在线| 国产精品亚洲视频在线观看| 亚洲欧美自拍视频| 亚洲激情成人| 欧美高清视频在线| 顶臀精品视频www| 欧美大黑bbbbbbbbb在线| 亚洲欧美一区二区精品久久久| 无码人妻少妇色欲av一区二区| 成人深夜福利| 欧美亚洲自拍偷拍| 国产a级片免费观看| 亚洲欧洲美洲av| 精品二区三区线观看| 欧美国产视频一区| 污污的视频在线观看| 亚洲视频香蕉人妖| av动漫免费观看| 黄网站视频在线观看| 国产精品久久二区二区| 一本一本久久a久久精品综合妖精| 国产原创av在线| 国产欧美一区二区精品婷婷| 日韩久久久久久久久久久久久| 欧美巨乳在线| 欧美—级在线免费片| 性欧美.com| 在线观看a视频| 国产精品乱码妇女bbbb| 亚洲一区二区精品在线| 日本黄色片在线观看| 最新中文字幕一区二区三区| 麻豆视频传媒入口| ririsao久久精品一区| 香港成人在线视频| 成年网站在线免费观看| 91精品国产66| 91精品在线免费| 中文字幕一二三区| 国产精品网站在线看| 日韩电影大全免费观看2023年上| 人妻丰满熟妇av无码久久洗澡| 一区二区三区视频免费观看| 伊人精品在线观看| 国产三级国产精品国产国在线观看 | 亚洲国产成人av在线| 公侵犯人妻一区二区三区| 国内精品视频在线观看| 久久亚洲精品中文字幕冲田杏梨 | 樱桃成人精品视频在线播放| 欧美一级淫片videoshd| 在线免费观看中文字幕| 懂色中文一区二区在线播放| 久久综合一区二区三区| 欧美边添边摸边做边爱免费| 亚洲高清免费在线| 日本爱爱免费视频| 一区二区三区视频免费视频观看网站 | 亚洲摸摸操操av| 91成人在线观看喷潮教学| 日韩精品三区| 欧美成人精品福利| www.狠狠爱| 国内精品久久久久久久影视麻豆| 国内精品小视频在线观看| 亚洲中文字幕无码爆乳av| 国产精品自在欧美一区| 久精品国产欧美| √新版天堂资源在线资源| 一区二区三区四区不卡在线| 欧美综合在线观看视频| 99a精品视频在线观看| 国产午夜精品视频| 国产成人精品亚洲男人的天堂| 欧美a一区二区| 鬼打鬼之黄金道士1992林正英| 激情视频在线观看免费| 亚洲综合一区二区三区| 三年中国国语在线播放免费| 国产96在线亚洲| xxxxxxxxx欧美| 欧美人一级淫片a免费播放| 成人免费的视频| 26uuu成人| 91国内外精品自在线播放| 亚洲精品福利视频| 精品无码久久久久久久久| 六月丁香婷婷色狠狠久久| 久久综合九色欧美狠狠| 不卡av免费观看| 日韩一级黄色片| 天堂网av2018| 日本视频一区二区| 日本一区免费看| 成人bbav| 亚洲国产精品va在线| 2021亚洲天堂| 国产一区二区三区高清播放| 视频在线精品一区| 天天免费亚洲黑人免费| 亚洲美女av在线播放| 国产成人愉拍精品久久| 高清在线观看日韩| 黄色一级片黄色| 亚洲欧美日本国产| 欧美精品在线免费观看| 国产精品午夜福利| 成人免费一区二区三区视频| 超碰超碰在线观看| 色综合狠狠操| 国产主播在线一区| 麻豆网站在线| 欧美一区二区福利视频| 私库av在线播放| 国产黄色91视频| 欧美乱做爰xxxⅹ久久久| 一区二区三区高清在线观看| 久久久久久噜噜噜久久久精品| www.亚洲黄色| 亚洲成va人在线观看| 男人的天堂影院| 国产欧美精品| 日韩高清av| 国产精品一区二区免费福利视频| 在线视频欧美日韩| 国产麻豆免费观看| 一区二区三区.www| 精品国产人妻一区二区三区| 国产婷婷精品| 日本一区免费在线观看| 日本亚洲欧洲无免费码在线| 久久精品99无色码中文字幕| 精品久久久无码中文字幕| 亚洲综合成人在线| 中文字幕在线播放一区| 久久久噜噜噜久久狠狠50岁| 日韩精品久久久免费观看| 福利一区二区三区视频在线观看| x99av成人免费| 日韩在线视频免费| 色老汉av一区二区三区| 亚洲综合久久av一区二区三区| 国内不卡的二区三区中文字幕| 日韩成人三级视频| 激情五月综合网| 亚洲自拍偷拍第一页| 亚洲小少妇裸体bbw| 中日韩美女免费视频网址在线观看 | 日韩精品国内| 99久久免费精品国产72精品九九| 91高潮在线观看| 里番在线观看网站| 精品国产一区久久| 最近中文字幕在线免费观看| 亚洲日本成人在线观看| 三叶草欧洲码在线| 久久99精品国产麻豆婷婷| 青青青在线视频播放| 免费视频一区三区| 97久久人人超碰caoprom欧美| 日本在线高清| 欧美麻豆久久久久久中文| 欧洲毛片在线| 日韩欧美国产wwwww| 成人小视频在线播放| 亚洲宅男天堂在线观看无病毒| www在线观看免费视频| 国产成人av电影| 国产精品区在线| 日韩午夜激情| 可以在线看黄的网站| 欧美日韩水蜜桃| 精品日本一区二区三区在线观看| 日韩在线你懂得| 日本欧美精品在线| aa级大片免费在线观看| 久久精品久久久久| 国产在线自天天| 亚洲精品福利视频| 亚洲av色香蕉一区二区三区| 欧美日韩成人综合在线一区二区| 欧美a视频在线观看| 亚洲午夜免费电影| 久久r这里只有精品| 中文字幕不卡一区| 女尊高h男高潮呻吟| 成人ar影院免费观看视频| 国产精品探花在线播放| 蜜桃在线一区二区三区| 欧美日韩亚洲第一| 最新国产乱人伦偷精品免费网站| 青青草视频在线视频| 一区二区三区中文| 一区二区三区观看| 欧美国产偷国产精品三区| 日韩一区二区三区资源| 国产成人三级| 欧洲久久久久久| 亚洲欧洲av| 欧美日韩一区二区三| 天堂在线精品| 久久青青草原| 四虎影视精品| 久久久久无码国产精品一区| 国产成人精品福利| 精品视频第一区| 亚洲综合小说图片| 免费看国产精品一二区视频| 欧美人与动xxxxz0oz| 精品午夜一区二区| 色天下一区二区三区| 欧美综合激情| 欧美三级美国一级| 亚洲综合av一区| 外国成人激情视频| 欧美a级黄色大片| 欧美精品二区| 国产高清av在线播放| 亚洲一区二区三区高清| 鲁一鲁一鲁一鲁一澡| 日韩专区在线视频| 欧美成人福利在线观看| 国产精品一区在线| 色哟哟无码精品一区二区三区| 成人自拍视频在线观看| 一女三黑人理论片在线| 国产人成一区二区三区影院| 国产一区二区三区四区在线| 一区视频在线播放| 欧美精品xxxxx| 精品福利免费观看| 国产精品第6页| 欧美精品第1页| 亚洲精品一区二区三区区别| 亚洲精品久久久久| 成年人视频在线看| 久久午夜a级毛片| 九色porny丨首页入口在线| 国产成人精品网站| 日韩成人精品一区二区三区| 成人自拍视频网站| 国产中文精品久高清在线不| 国产日韩视频在线播放| 亚洲国产精品第一区二区| 精品www久久久久奶水| 久久国内精品自在自线400部| 91丨porny丨九色| 久久久蜜臀国产一区二区| 美国精品一区二区| 亚洲综合精品自拍| 伊人久久中文字幕| 精品久久一区二区| 国产黄色在线| 欧美极品少妇xxxxⅹ喷水 | 欧美中文字幕一区二区三区| 国产又爽又黄又嫩又猛又粗| 亚洲成人网在线| 蜜芽在线免费观看| 91黑丝高跟在线| 国产区一区二| 欧美18视频| 欧美午夜不卡| 国产三级国产精品国产专区50| 丁香天五香天堂综合| 91麻豆精品久久毛片一级| 亚洲第一搞黄网站| 97国产成人无码精品久久久| 亚洲毛片在线观看| 久久久久黄久久免费漫画| 国产精品亚洲片夜色在线| 亚洲aaa级| 日韩激情视频一区二区| 麻豆精品在线观看| wwwwxxxx国产| 精品女同一区二区三区在线播放| 一起草av在线| 在线国产精品视频| 国产精品粉嫩| 精品一区二区不卡| 91精品高清| 久热精品在线播放| 久久久久久久久久久久久女国产乱 | 日本一区二区在线看| 国产一区二区网| 国v精品久久久网| 丰满少妇被猛烈进入一区二区| 在线一区二区三区| 免费黄色在线视频网站| 51ⅴ精品国产91久久久久久| 五月亚洲婷婷| 一区二区三区四区免费观看| 美女视频黄a大片欧美| 国产一二三四五区| 色八戒一区二区三区| 日中文字幕在线| 91精品国产91久久久久福利| **爰片久久毛片| 18禁裸男晨勃露j毛免费观看| 国产毛片精品视频| 五月天色婷婷丁香| 8x福利精品第一导航| 黄网站在线免费| 成人免费视频网址| 亚洲蜜桃视频| 亚洲国产日韩在线一区| 亚洲免费观看高清在线观看| 999av视频| 欧美乱大交xxxxx| 欧美日韩中出| www成人免费| 国产成人免费av在线| 国产在线成人精品午夜| 亚洲国产精品va| 中文av在线全新| 青娱乐一区二区| 奇米影视7777精品一区二区| 波多野结衣欲乱| 制服视频三区第一页精品| 成人免费观看视频大全| 91成人免费观看| 亚洲大黄网站| 日本高清www| 欧美天堂亚洲电影院在线播放| 92国产在线视频| 成人性生交大片免费观看嘿嘿视频| 亚洲午夜精品一区二区国产| 久久无码人妻一区二区三区| 亚洲电影一区二区三区| 天天在线女人的天堂视频| 国产suv精品一区二区| 欧美亚洲高清| 极品人妻一区二区| 亚洲1区2区3区视频| 国产区视频在线| 成人日韩在线电影| 精品999日本| 欧洲美熟女乱又伦| 日韩欧美一区电影| 日本黄色免费在线| 一区二区冒白浆视频| 成人激情黄色小说| 日韩欧美国产另类| 久久精品国产99国产精品澳门| 亚洲精品视频一二三区| 99色精品视频| 亚洲另类在线视频| 欧洲亚洲在线| 91原创国产| 先锋影音久久久| 日韩在线观看视频一区二区| 日韩电影网在线| 日韩精品第二页| 丰满爆乳一区二区三区| 国产精品色一区二区三区| 性欧美videos另类hd| 国产v综合ⅴ日韩v欧美大片| 欧美国产高清| 国产1区2区在线观看| 欧美成人午夜电影| 成人精品一区二区三区电影| 久久国产午夜精品理论片最新版本| 日本一区二区久久| 偷拍精品一区二区三区| 成人观看高清在线观看免费| 国产精品普通话对白| 欧美成人精品激情在线视频| 亚洲视频精品在线| 国产成人一二片| 两性午夜免费视频|