日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【金融项目】尚融宝项目(二)

發布時間:2023/12/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【金融项目】尚融宝项目(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4、后端接口工程搭建

4.1、創建尚融寶接口工程

4.1.1、需求

積分等級CRUD列表和表單

4.1.2、創建父工程srb

4.1.2.1、創建SpringBoot項目

Group:com.atguigu

Artifact:srb

4.1.2.2、刪除src目錄

4.1.2.3、配置SpringBoot版本

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent>

4.1.2.4、配置pom依賴版本號

<properties><java.version>1.8</java.version><spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR8</spring-cloud.version><mybatis-plus.version>3.4.1</mybatis-plus.version><velocity.version>2.0</velocity.version><swagger.version>2.9.2</swagger.version><swagger-bootstrap-ui.version>1.9.2</swagger-bootstrap-ui.version><commons-lang3.version>3.9</commons-lang3.version><commons-fileupload.version>1.3.1</commons-fileupload.version><commons-io.version>2.6</commons-io.version><alibaba.easyexcel.version>2.1.1</alibaba.easyexcel.version><apache.xmlbeans.version>3.1.0</apache.xmlbeans.version><fastjson.version>1.2.28</fastjson.version><gson.version>2.8.2</gson.version><json.version>20170516</json.version><aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version><aliyun-sdk-oss.version>3.10.2</aliyun-sdk-oss.version><jodatime.version>2.10.1</jodatime.version><jwt.version>0.7.0</jwt.version><httpclient.version>4.5.1</httpclient.version> </properties>

4.1.2.5、配置pom依賴

<dependencyManagement><dependencies><!--Spring Cloud--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--Spring Cloud Alibaba--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--mybatis-plus 代碼生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version></dependency><!-- Mybatis Plus 代碼生成器模板引擎, --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>${velocity.version}</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><!--swagger ui--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency><!--swagger-bootstrap-ui--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>${swagger-bootstrap-ui.version}</version></dependency><!--commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><!--文件上傳--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>${commons-fileupload.version}</version></dependency><!--commons-io--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency><!--excel解析--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${alibaba.easyexcel.version}</version></dependency><!--excel解析依賴--><dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>${apache.xmlbeans.version}</version></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>${json.version}</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>${gson.version}</version></dependency><!--阿里云SDK遠程調用--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>${aliyun-java-sdk-core.version}</version></dependency><!--阿里云文件管理--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun-sdk-oss.version}</version></dependency><!--日期時間工具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>${jodatime.version}</version></dependency><!--jwt工具--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwt.version}</version></dependency><!--httpclient--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>${httpclient.version}</version></dependency></dependencies> </dependencyManagement> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies>

4.1.3、創建模塊guigu-common

4.1.3.1、創建Maven模塊

在srb下創建普通maven模塊

Group:com.atguigu

Artifact:guigu-common

4.1.3.2、配置pom

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--lombok用來簡化實體類:需要安裝lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>

4.1.4、創建模塊service-base

4.1.4.1、創建Maven模塊

在srb下創建普通maven模塊

Group:com.atguigu

Artifact:service-base

4.1.4.2、配置pom

注意:依賴guigu-common

<dependencies><dependency><groupId>com.atguigu</groupId><artifactId>guigu-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId></dependency><!--swagger ui--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId></dependency> </dependencies>

4.1.5、創建模塊service-core

4.1.5.1、創建Maven模塊

在srb下創建普通maven模塊

Group:com.atguigu

Artifact:service-core

4.1.5.2、配置pom

注意:依賴service-base

<dependencies><dependency><groupId>com.atguigu</groupId><artifactId>service-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--mybatis-plus 代碼生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId></dependency><!-- Mybatis Plus 代碼生成器模板引擎, --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId></dependency> </dependencies>

4.1.6、代碼生成器

4.1.6.1、創建數據庫

創建數據庫srb_core

并執行sql腳本初始化數據結構和數據

4.1.6.2、創建代碼生成器

在test目錄中創建測試用例,并執行

package com.atguigu.srb.core; public class CodeGenerator {@Testpublic void genCode() {// 1、創建代碼生成器AutoGenerator mpg = new AutoGenerator();// 2、全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("Helen");gc.setOpen(false); //生成后是否打開資源管理器gc.setServiceName("%sService"); //去掉Service接口的首字母Igc.setIdType(IdType.AUTO); //主鍵策略gc.setSwagger2(true);//開啟Swagger2模式mpg.setGlobalConfig(gc);// 3、數據源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/srb_core?serverTimezone=GMT%2B8&characterEncoding=utf-8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc = new PackageConfig();pc.setParent("com.atguigu.srb.core");pc.setEntity("pojo.entity"); //此對象與數據庫表結構一一對應,通過 DAO 層向上傳輸數據源對象。mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);//數據庫表映射到實體的命名策略strategy.setColumnNaming(NamingStrategy.underline_to_camel);//數據庫表字段映射到實體的命名策略strategy.setEntityLombokModel(true); // lombokstrategy.setLogicDeleteFieldName("is_deleted");//邏輯刪除字段名strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布爾值的is_前綴(確保tinyint(1))strategy.setRestControllerStyle(true); //restful api風格控制器mpg.setStrategy(strategy);// 6、執行mpg.execute();} }

4.1.7、啟動應用程序

4.1.7.1、創建application.yml

server:port: 8110 # 服務端口 spring:profiles:active: dev # 環境設置application:name: service-core # 服務名datasource: # mysql數據庫連接type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/srb_core?serverTimezone=GMT%2B8&characterEncoding=utf-8username: rootpassword: 123456 mybatis-plus: #mybatisconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmapper-locations: classpath:com/atguigu/srb/core/mapper/xml/*.xml

4.1.7.2、創建SpringBoot配置文件

在service-core中創建config包,創建MybatisPlusConfig類

package com.atguigu.srb.core.config; @Configuration @MapperScan("com.atguigu.srb.core.mapper") @EnableTransactionManagement //事務處理 public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//分頁return interceptor;} }

4.1.7.3、創建SpringBoot啟動類

注意:掃描com.atguigu.srb

package com.atguigu.srb.core; @SpringBootApplication @ComponentScan({"com.atguigu.srb"}) public class ServiceCoreApplication {public static void main(String[] args) {SpringApplication.run(ServiceCoreApplication.class, args);} }

4.1.7.4、運行啟動類

查看控制臺8110端口是否成功啟動

4.2、積分等級CRUD

4.2.1、積分等級列表接口

4.2.1.1、編寫積分等級管理接口

在controller中添加admin包,添加AdminIntegralGradeController類

package com.atguigu.srb.core.controller.admin; @CrossOrigin @RestController @RequestMapping("/admin/core/integralGrade") public class AdminIntegralGradeController {@Resourceprivate IntegralGradeService integralGradeService;@GetMapping("/list")public List<IntegralGrade> listAll(){return integralGradeService.list();} }

4.2.1.2、測試

重啟服務,訪問: http://localhost:8110/admin/core/integralGrade/list 查看結果json數據

4.2.2、邏輯刪除接口

4.2.2.1、添加刪除方法

AdminIntegralGradeController添加removeById方法

@DeleteMapping("/remove/{id}") public boolean removeById(@PathVariable Long id){return integralGradeService.removeById(id); }

4.2.2.2、使用postman測試刪除

4.2.3、配置Swagger2

4.2.3.1、Swagger2配置文件

在service-base中創建Swagger2Config

package com.atguigu.srb.base.config; @Configuration @EnableSwagger2 public class Swagger2Config {@Beanpublic Docket adminApiConfig(){return new Docket(DocumentationType.SWAGGER_2).groupName("adminApi").apiInfo(adminApiInfo()).select()//只顯示admin路徑下的頁面.paths(Predicates.and(PathSelectors.regex("/admin/.*"))).build();}private ApiInfo adminApiInfo(){return new ApiInfoBuilder().title("尚融寶后臺管理系統-API文檔").description("本文檔描述了尚融寶后臺管理系統接口").version("1.0").contact(new Contact("Helen", "http://atguigu.com", "55317332@qq.com")).build();} }

4.2.3.2、查看Swagger文檔

重啟服務器查看接口文檔:http://localhost:8110/swagger-ui.html

4.2.3.3、常見注解

**實體類注解:**entity的實體類中可以添加一些自定義設置,例如:

@ApiModelProperty(value = "創建時間", example = "2019-01-01 8:00:00") private LocalDateTime createTime; @ApiModelProperty(value = "更新時間", example = "2019-01-01 8:00:00") private LocalDateTime updateTime;

controller注解:

定義在類上

@Api(tags = "積分等級管理")

定義在方法上

@ApiOperation("積分等級列表") @ApiOperation(value = "根據id刪除積分等級", notes = "邏輯刪除")

定義在參數上

@ApiParam(value = "數據id", required = true, example = "100")

4.3、統一返回結果

4.3.1、定義統一返回結果

4.3.1.1、數據格式的定義

項目中我們會將響應封裝成json返回,一般我們會將所有接口的數據格式統一, 使前端對數據的操作更一致、輕松。

一般情況下,統一返回數據格式沒有固定的格式,只要能描述清楚返回的數據狀態以及要返回的具體數據就可以。但是一般會包含狀態碼、返回消息、數據這幾部分內容

例如,我們的系統要求返回的基本數據格式如下:

成功:

{"code": 0,"message": "成功","data": 數據}

失敗:

{"code": -1,"message": "失敗","data": null }

因此,我們定義統一結果

{"code": 數字, //業務響應碼"message": 字符串, //返回消息"data": 對象 //返回數據 }

4.3.1.2、創建枚舉

在guigu-common中創建result包,創建枚舉 ResponseEnum

package com.atguigu.common.result; @Getter @AllArgsConstructor @ToString public enum ResponseEnum {SUCCESS(0, "成功"),ERROR(-1, "服務器內部錯誤"),;// 響應狀態碼private Integer code;// 響應信息private String message; }

完整的枚舉源代碼:ResponseEnum.java

4.3.1.3、定義同統一結果類

package com.atguigu.common.result; @Data public class R {private Integer code;private String message;private Map<String, Object> data = new HashMap();/*** 構造器私有*/private R(){}/*** 返回成功*/public static R ok(){R r = new R();r.setCode(ResponseEnum.SUCCESS.getCode());r.setMessage(ResponseEnum.SUCCESS.getMessage());return r;}/*** 返回失敗*/public static R error(){R r = new R();r.setCode(ResponseEnum.ERROR.getCode());r.setMessage(ResponseEnum.ERROR.getMessage());return r;}/*** 設置特定結果*/public static R setResult(ResponseEnum responseEnum){R r = new R();r.setCode(responseEnum.getCode());r.setMessage(responseEnum.getMessage());return r;}public R message(String message){this.setMessage(message);return this;}public R code(Integer code){this.setCode(code);return this;}public R data(String key, Object value){this.data.put(key, value);return this;}public R data(Map<String, Object> map){this.setData(map);return this;} }

4.3.2、使用統一返回結果

4.3.2.1、修改listAll

@ApiOperation("積分等級列表") @GetMapping("/list") public R listAll(){List<IntegralGrade> list = integralGradeService.list();return R.ok().data("list", list); }

4.3.2.2、修改removeById

@ApiOperation(value = "根據id刪除積分等級", notes="邏輯刪除") @DeleteMapping("/remove/{id}") public R removeById(@ApiParam(value = "數據id", required = true, example = "1")@PathVariable Long id){boolean result = integralGradeService.removeById(id);if(result){//return R.setResult(ResponseEnum.UPLOAD_ERROR);return R.ok().message("刪除成功");}else{return R.error().message("刪除失敗");} }

4.3.2.3、新增數據

@ApiOperation("新增積分等級") @PostMapping("/save") public R save(@ApiParam(value = "積分等級對象", required = true)@RequestBody IntegralGrade integralGrade){boolean result = integralGradeService.save(integralGrade);if (result) {return R.ok().message("保存成功");} else {return R.error().message("保存失敗");} }

4.3.2.4、根據id查詢

@ApiOperation("根據id獲取積分等級") @GetMapping("/get/{id}") public R getById(@ApiParam(value = "數據id", required = true, example = "1")@PathVariable Long id){IntegralGrade integralGrade = integralGradeService.getById(id);if(integralGrade != null){return R.ok().data("record", integralGrade);}else{return R.error().message("數據不存在");} }

4.3.2.5、根據id修改

@ApiOperation("更新積分等級") @PutMapping("/update") public R updateById(@ApiParam(value = "積分等級對象", required = true)@RequestBody IntegralGrade integralGrade){boolean result = integralGradeService.updateById(integralGrade);if(result){return R.ok().message("修改成功");}else{return R.error().message("修改失敗");} }

4.4、統一異常處理

4.4.1、項目中的異常

4.4.1.1、制造異常

屏蔽 IntegralGrade 中的 @TableField注解

@ApiModelProperty(value = "邏輯刪除(1:已刪除,0:未刪除)") //@TableField("is_deleted") @TableLogic private Boolean deleted;

4.4.1.2、Swagger中測試

測試列表查詢功能,查看結果,發生錯誤,顯示響應失敗

4.4.2、統一異常處理

目標:我們想讓異常結果也顯示為統一的返回結果對象,并且統一處理系統的異常信息,那么需要進行統一異常處理。

4.4.2.1、創建統一異常處理器

guigu-common中創建exception包,創建統一異常處理器類UnifiedExceptionHandler

package com.atguigu.common.exception; @Slf4j @Component //Spring容易自動管理 @RestControllerAdvice //在controller層添加通知。如果使用@ControllerAdvice,則方法上需要添加@ResponseBody public class UnifiedExceptionHandler {/*** 未定義異常*/@ExceptionHandler(value = Exception.class) //當controller中拋出Exception,則捕獲public R handleException(Exception e) {log.error(e.getMessage(), e);return R.error();} }

4.4.2.2、service-core添加掃描

添加 “com.atguigu.common”

@SpringBootApplication @ComponentScan({"com.atguigu.srb", "com.atguigu.common"}) public class ServiceCoreApplication {

4.4.2.3、測試

返回統一錯誤結果

4.4.3、處理特定異常

如果我們不想顯示統一的“服務器內部錯誤”,需要個性化的顯示異常信息,那么需要針對特定的異常做處理

4.4.3.1、添加依賴

在guigu-common中添加jdbc依賴

<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId> </dependency>

4.4.3.2、添加異常處理方法

在 UnifiedExceptionHandler 中添加

/** * 特定異常 */ @ExceptionHandler(BadSqlGrammarException.class) public R handleBadSqlGrammarException(BadSqlGrammarException e){log.error(e.getMessage(), e);return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR); }

4.4.3.3、測試

問題:上面的例子雖然針對特定的異常顯示個性化的錯誤信息,但是你會發現,針對每個不同的異常我們都需要在項目中添加對應的處理方法,并捕獲對應的異常對象,可能還要針對這個異常添加額外的依賴。這顯然不是最好的方式。

方案:此類異常直接拋出,并且用Exception類捕獲就可以了。

4.4.3.4、恢復制造的異常

@TableField(value = "is_deleted")

4.4.4、自定義異常

目標:使用一個或較少的異常類,可以捕獲和顯示所有的異常信息。

方案:因此,我們可以創建一個自定義異常類(必須是運行時異常),在程序中拋出這個自定義異常對象,并在統一異常處理器中捕獲自定義異常對象

4.4.4.1、創建自定義異常類

package com.atguigu.common.exception; @Data @NoArgsConstructor public class BusinessException extends RuntimeException {//狀態碼private Integer code;//錯誤消息private String message; }

完整的源代碼:BusinessException.java

4.4.4.2、添加異常處理方法

UnifiedExceptionHandler類中添加

/** * 自定義異常 */ @ExceptionHandler(BusinessException.class) public R handleBusinessException(BusinessException e){log.error(e.getMessage(), e);return R.error().message(e.getMessage()).code(e.getCode()); }

4.4.4.3、修改Controller

在AdminIntegralGradeController的方法中添加異常處理,業務中需要的位置拋出BusinessException自定義異常。

@ApiOperation("新增積分等級") @PostMapping("/save") public R save(@ApiParam(value = "積分等級對象", required = true)@RequestBody IntegralGrade integralGrade){//如果借款額度為空就手動拋出一個自定義的異常!if(integralGrade.getBorrowAmount() == null){//BORROW_AMOUNT_NULL_ERROR(-201, "借款額度不能為空"),throw new BusinessException(ResponseEnum.BORROW_AMOUNT_NULL_ERROR);}boolean result = integrationService.save(integralGrade);if (result) {return R.ok().message("保存成功");} else {return R.error().message("保存失敗");} }

4.4.4.4、測試

測試

結果

4.4.5、異常處理優化

目標:以優雅的 Assert(斷言) 方式來校驗業務的異常情況,消除 if else

4.4.5.1、什么是斷言

package com.atguigu.srb.core; import org.junit.jupiter.api.Test; import org.springframework.util.Assert; public class AssertTests {//if else的用法@Testpublic void test1() {Object o = null;if (o == null) {throw new IllegalArgumentException("用戶不存在.");}}//斷言的用法:更為簡潔@Testpublic void test2() {// 另一種寫法Object o = null;Assert.notNull(o, "用戶不存在.");} }

4.4.5.2、自定義斷言

用斷言的方式封裝異常的拋出

package com.atguigu.common.exception; @Slf4j public abstract class Assert {/*** 斷言對象不為空* 如果對象obj為空,則拋出異常* @param obj 待判斷對象*/public static void notNull(Object obj, ResponseEnum responseEnum) {if (obj == null) {log.info("obj is null...............");throw new BusinessException(responseEnum);}} }

完整的源代碼:Assert.java

4.4.5.3、修改controller

在controller中用斷言替換if else

Assert.notNull(integralGrade.getBorrowAmount(), ResponseEnum.BORROW_AMOUNT_NULL_ERROR);

4.4.6、Controller上層異常

4.4.6.1、異常分類

對異常按階段進行分類,大體可以分成:進入Controller前的異常 和 業務層異常,具體可以參考下圖:

4.4.6.2、處理Controller上層異常

UnifiedExceptionHandler中添加

/*** Controller上一層相關異常*/ @ExceptionHandler({NoHandlerFoundException.class,HttpRequestMethodNotSupportedException.class,HttpMediaTypeNotSupportedException.class,MissingPathVariableException.class,MissingServletRequestParameterException.class,TypeMismatchException.class,HttpMessageNotReadableException.class,HttpMessageNotWritableException.class,MethodArgumentNotValidException.class,HttpMediaTypeNotAcceptableException.class,ServletRequestBindingException.class,ConversionNotSupportedException.class,MissingServletRequestPartException.class,AsyncRequestTimeoutException.class}) public R handleServletException(Exception e) {log.error(e.getMessage(), e);//SERVLET_ERROR(-102, "servlet請求異常"),return R.error().message(ResponseEnum.SERVLET_ERROR.getMessage()).code(ResponseEnum.SERVLET_ERROR.getCode()); }

4.4.6.3、測試

在save測試用例中輸入非法的json參數,則得到下面的結果。我們可以在控制臺日志中查看具體的錯誤原因。前端只需要返回相對簡單友好的提示即可。

4.5、統一日志處理

4.5.1、Logback日志

4.5.1.1、什么是日志

通過日志查看程序的運行過程,運行信息,異常信息等

4.5.1.2、日志級別

日志記錄器(Logger)的行為是分等級的。如下表所示:

分為:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF

默認情況下,spring boot從控制臺打印出來的日志級別只有INFO及以上級別,可以配置日志級別

# 設置日志級別 logging:level:root: ERROR

這種方式能將ERROR級別以及以上級別的日志輸出到控制臺上,其他級別將不會輸出

4.5.1.3、創建日志文件

spring boot內部使用Logback作為日志實現的框架。

先刪除前面在application.yml中的日志級別配置

resources 中創建 logback-spring.xml (默認日志文件的名字)

<?xml version="1.0" encoding="UTF-8"?> <configuration> </configuration>

4.5.1.4、創建測試日志輸出

將以下日志輸出到任意controller的方法中即可,例如list方法中

@ApiOperation("積分等級列表") @GetMapping("/list") public R listAll(){log.info("hi i'm helen");log.warn("warning!!!");log.error("it's a error");List<IntegralGrade> list = integrationService.list();return R.ok().data("list", list); }

4.5.2、基本配置說明

4.5.2.1、configuration

日志配置的根節點

<configuration></configuration>

4.5.2.2、contextName

是的子節點。

每個logger都關聯到logger上下文,默認上下文名稱為“default”。但可以使用設置成其他名字,用于區分不同的應用程序。

<contextName>atguiguSrb</contextName>

4.5.2.3、property

是的子節點,用來定義變量。

有兩個屬性,name和value:name的值是變量的名稱,value是變量的值。

通過定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量。

<!-- 日志的輸出目錄 --> <property name="log.path" value="D:/project/finance/srb_log/core" /> <!--控制臺日志格式:彩色日志--> <!-- magenta:洋紅 --> <!-- boldMagenta:粗紅--> <!-- cyan:青色 --> <!-- white:白色 --> <!-- magenta:洋紅 --> <property name="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/> <!--文件日志格式--> <property name="FILE_LOG_PATTERN"value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" /> <!--編碼--> <property name="ENCODING"value="UTF-8" />

4.5.2.4、appender

是的子節點,是負責寫日志的組件

有兩個必要屬性name和class:name指定appender名稱,class指定appender的全限定名

對日志進行格式化

定義日志的具體輸出格式

編碼方式

控制臺日志配置

<!-- 控制臺日志 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder> </appender>

**文件日志配置 **

表示日志文件的位置,如果上級目錄不存在會自動創建,沒有默認值。

默認 true,日志被追加到文件結尾,如果是 false,服務重啟后清空現存文件。

<!-- 文件日志 --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>${log.path}/log.log</file><append>true</append><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder> </appender>

4.5.2.5、logger

可以是的子節點,用來設置某一個包或具體某一個類的日志打印級別、指定

name:用來指定受此logger約束的某一個包或者具體的某一個類

level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF。默認繼承上級的級別

可以包含零個或多個元素,標識這個appender將會添加到這個logger

<!-- 日志記錄器 --> <logger name="com.atguigu" level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /> </logger>

4.5.2.6、測試

測試日志記錄的控制臺輸出、文件輸出、以及日志級別

4.5.3、多環境配置

springProfile

在一個基于Spring boot開發的項目里,常常需要有多套環境的配置:開發,測試以及產品。使用springProfile 可以分別配置開發(dev),測試(test)以及生產(prod)等不同的環境

<!-- 開發環境和測試環境 --> <springProfile name="dev,test"><logger name="com.atguigu" level="INFO"><appender-ref ref="CONSOLE" /></logger> </springProfile> <!-- 生產環境 --> <springProfile name="prod"><logger name="com.atguigu" level="ERROR"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></logger> </springProfile>

4.5.4、滾動日志

問題:生產環境下,如果系統長時間運行,那么日志文件會變得越來越大,系統讀取和寫入日志的時間會越來越慢,嚴重的情況會耗盡系統內存,導致系統宕機。

解決方案:可以設置滾動日志。

4.5.4.1、設置時間滾動策略

RollingFileAppender是Appender的另一個實現,表示滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將舊日志備份到其他文件

是的子節點,用來定義滾動策略。

TimeBasedRollingPolicy:最常用的滾動策略,根據時間來制定滾動策略。

:包含文件名及轉換符, “%d”可以包含指定的時間格式,如:%d{yyyy-MM-dd}。如果直接使用 %d,默認格式是 yyyy-MM-dd。:可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創建的目錄也會被刪除。

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 要區別于其他的appender中的文件名字 --><file>${log.path}/log-rolling.log</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder><!-- 設置滾動日志記錄的滾動策略 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志歸檔路徑以及格式 --><fileNamePattern>${log.path}/info/log-rolling-%d{yyyy-MM-dd}.log</fileNamePattern><!--歸檔日志文件保留的最大數量--><maxHistory>15</maxHistory></rollingPolicy> </appender>

4.5.4.2、設置觸發滾動時機

放在的子節點的位置,基于實踐策略的觸發滾動策略

設置觸發滾動條件:單個文件大于100M時生成新的文件

注意:修改日志文件名 此時 ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log

<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1KB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy>

4.5.5、完整的日志配置文件

<?xml version="1.0" encoding="UTF-8"?> <configuration><contextName>atguiguSrb</contextName><!-- 日志的輸出目錄 --><property name="log.path" value="D:/project/test/srb_log/core" /><!--控制臺日志格式:彩色日志--><!-- magenta:洋紅 --><!-- boldMagenta:粗紅--><!-- cyan:青色 --><!-- white:白色 --><!-- magenta:洋紅 --><property name="CONSOLE_LOG_PATTERN"value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) %highlight([%-5level]) %green(%logger) %msg%n"/><!--文件日志格式--><property name="FILE_LOG_PATTERN"value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] %thread %file:%line %logger %msg%n" /><!--編碼--><property name="ENCODING"value="UTF-8" /><!-- 控制臺日志 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder></appender><!-- 文件日志 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>${log.path}/log.log</file><append>true</append><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder></appender><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 要區別于其他的appender中的文件名字 --><file>${log.path}/log-rolling.log</file><encoder><pattern>${FILE_LOG_PATTERN}</pattern><charset>${ENCODING}</charset></encoder><!-- 設置滾動日志記錄的滾動策略 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志歸檔路徑以及格式 --><fileNamePattern>${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log</fileNamePattern><!--歸檔日志文件保留的最大數量--><maxHistory>15</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>1KB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy></appender><!-- <logger name="com.atguigu" level="INFO">--><!-- <appender-ref ref="CONSOLE" />--><!-- <appender-ref ref="FILE" />--><!-- </logger>--><!-- 開發環境和測試環境 --><springProfile name="dev,test"><logger name="com.atguigu" level="INFO"><appender-ref ref="CONSOLE" /></logger></springProfile><!-- 生產環境 --><springProfile name="prod"><logger name="com.atguigu" level="ERROR"><appender-ref ref="CONSOLE" /><appender-ref ref="ROLLING_FILE" /></logger></springProfile> </configuration>

本文章參考B站 尚硅谷《尚融寶》Java微服務分布式金融項目,僅供個人學習使用,部分內容為本人自己見解,與尚硅谷無關。

總結

以上是生活随笔為你收集整理的【金融项目】尚融宝项目(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产乱对白刺激视频在线观看女王 | 成人网页在线免费观看 | 99精品国产兔费观看久久99 | 激情久久一区二区三区 | 丰满少妇高潮在线观看 | av中文在线播放 | 日韩视频在线播放 | 国产色a在线观看 | 亚洲日韩精品欧美一区二区 | 免费h漫在线观看 | 99热精品国产一区二区在线观看 | 久草久草在线 | www.国产毛片 | 在线观看理论 | 久久免费看视频 | 91精品国产成人 | 亚洲专区在线 | 成人在线视频一区 | 999视频网站| 国产在线观看av | 伊人欧美| 欧美精品一二三 | 欧美日韩一区二区在线 | 国产精品九九视频 | 久久久久 免费视频 | 欧美精品在线观看免费 | 狠狠狠狠狠狠天天爱 | 五月天婷婷丁香花 | 精品久久国产一区 | 在线观看日韩中文字幕 | 日韩一区在线播放 | 欧美精彩视频在线观看 | 久草在线视频在线 | 亚洲精品在线视频 | 九九视频在线观看视频6 | 天天干天天操天天入 | 在线观看国产一区 | 久久精品牌麻豆国产大山 | 中文在线a在线 | 色婷婷福利视频 | 国产日韩欧美在线 | 亚洲精品麻豆视频 | 久久久久激情 | 99中文字幕在线观看 | 波多野结衣一区二区 | 在线观看国产高清视频 | 四虎影视成人精品国库在线观看 | 91激情视频在线观看 | 99精品国产福利在线观看免费 | 狠狠狠色丁香婷婷综合久久五月 | 人人爽人人看 | 日日夜夜操操操操 | 中文字幕视频观看 | 日韩在线观看第一页 | www欧美色| 麻豆久久久 | 久久夜靖品 | 午夜久久久精品 | 在线高清一区 | 国产午夜三级一区二区三桃花影视 | 国产日韩视频在线 | 国产亚洲精品久久久久秋 | 久久免费美女视频 | 天天干夜夜想 | 久久久综合九色合综国产精品 | 欧美日韩视频一区二区三区 | 九七人人干 | 在线播放国产一区二区三区 | 国产精品中文久久久久久久 | 亚洲国产中文字幕在线视频综合 | 99精品视频精品精品视频 | 六月丁香婷婷网 | 国产小视频国产精品 | 国精产品一二三线999 | 国产综合精品一区二区三区 | 九九视频精品免费 | 成年人视频在线观看免费 | 中文av网站 | 成人av视屏| 婷婷综合国产 | 日韩欧美大片免费观看 | 久久综合五月天 | 亚洲精品一区二区三区四区高清 | 极品美女被弄高潮视频网站 | 中文字幕久久精品亚洲乱码 | 国产成人精品一区二三区 | 天天操夜操 | 亚洲欧美怡红院 | 精品视频在线免费 | 亚洲成人av一区 | 午夜精品久久久久久 | 在线av资源 | 亚洲精品国产品国语在线 | 女人18片| 91精彩视频 | 国产一区二区三区高清播放 | 香蕉久久久久久av成人 | 麻豆91精品91久久久 | 亚洲精品tv久久久久久久久久 | 九九综合久久 | 一区二区三区免费播放 | 91av电影在线| 丁香花中文在线免费观看 | 狠狠干电影| 日日操网站 | 亚洲综合爱 | 狠狠色伊人亚洲综合成人 | 久久精品网站视频 | 亚洲毛片视频 | 色综合色综合色综合 | 成人激情开心网 | 夜夜躁狠狠躁日日躁视频黑人 | 国产一级黄色免费看 | 婷婷丁香花五月天 | 亚洲狠狠操 | 人人揉人人揉人人揉人人揉97 | 天天摸日日操 | 久久久精品| 在线观看中文字幕2021 | 国产一区不卡在线 | 久久久久久久久网站 | 国模精品一区二区三区 | 成人国产精品久久久 | 9999在线| 久久99精品国产麻豆宅宅 | 国产亚洲精品久久久久久 | 美女视频黄,久久 | 亚洲精品久久久久久久不卡四虎 | 久久69精品 | av电影久久 | 国产一区二区精品在线 | 欧美粗又大 | 久久综合之合合综合久久 | 在线一区av | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 日本激情动作片免费看 | 天天综合狠狠精品 | 伊人影院99| 日韩精品一区二区三区第95 | 五月婷久 | 精品久久在线 | 亚洲精品小视频 | 婷婷六月天在线 | 国产区在线 | 天天干天天摸天天操 | 欧洲视频一区 | 日韩成人免费在线电影 | 久久国产精品二国产精品中国洋人 | 欧美九九九 | 中文字幕亚洲欧美日韩 | 超碰电影在线观看 | 成年人在线看视频 | 国产伦理剧 | 日韩电影精品 | 亚洲精品视频在线看 | 欧美性护士 | 欧美日韩一区三区 | 久久精品电影院 | 丝袜少妇在线 | 欧美日韩一区二区三区在线免费观看 | 在线观看成人网 | 超碰97人人爱 | 国内99视频 | 黄色片毛片 | 91桃色在线免费观看 | 伊色综合久久之综合久久 | 九热在线 | 中文在线免费看视频 | 国产又粗又猛又爽又黄的视频先 | 美女搞黄国产视频网站 | 欧美日韩精品在线视频 | 免费看的黄色小视频 | 中文字幕在线观看网址 | 免费看的黄色 | 黄色的网站在线 | av久久在线 | 国产亚洲精品久久久久秋 | 不卡精品 | 免费在线观看av网址 | 在线观看亚洲成人 | 91 | 中文字幕中文字幕在线一区 | 成人在线超碰 | 亚洲精品女人久久久 | 波多野结衣理论片 | 91理论片午午伦夜理片久久 | 精品美女久久久久 | 亚洲国产精品一区二区尤物区 | 国产成人精品国内自产拍免费看 | 狠狠狠色丁香婷婷综合久久五月 | 久久精品亚洲一区二区三区观看模式 | 成年人免费观看在线视频 | 狠狠干电影 | 国产黄色片久久 | 96在线 | av在线播放一区二区三区 | 欧美孕交vivoestv另类 | www.xxx.性狂虐| 91精品视频在线播放 | 五月婷婷久草 | 99精品在线视频观看 | 久久久精品国产免费观看一区二区 | 国产欧美精品在线观看 | 国内久久 | 亚洲成av人片在线观看无 | 久久在线看 | 91麻豆精品国产91久久久无需广告 | 久久久久综合网 | 欧美日韩国产精品一区二区三区 | 中文字幕一区二区三区视频 | 免费观看一级特黄欧美大片 | 特级西西www44高清大胆图片 | 亚洲乱码中文字幕综合 | 国产韩国日本高清视频 | 99精品在线免费观看 | 久久手机精品视频 | 天天综合网天天 | 亚洲精品视频免费在线 | 成人小视频免费在线观看 | 9色在线视频 | 亚洲精品视频免费在线 | 日韩av影片在线观看 | 色综合天天狠天天透天天伊人 | 亚洲毛片一区二区三区 | 日韩免费一级a毛片在线播放一级 | 日韩免费久久 | 最新超碰在线 | 日本不卡一区二区 | 亚洲二区精品 | 天堂av色婷婷一区二区三区 | 中文字幕一区二区三区在线视频 | 91成人久久 | 欧美大片在线观看一区 | 亚洲综合最新在线 | 天天干,夜夜操 | 久久久久成人精品亚洲国产 | 国产亚洲精品久久久久久大师 | 国产高清视频在线 | 成人免费视频播放 | 国产视频资源在线观看 | 91在线精品一区二区 | 黄色avwww | 91在线看视频免费 | 国产精品igao视频网入口 | 亚洲精品在线国产 | 在线亚洲高清视频 | 精品在线二区 | 亚洲欧美久久 | 亚洲视频播放 | 天天摸天天操天天舔 | 天天天干 | 在线有码中文字幕 | 国产传媒一区在线 | 国产精品系列在线播放 | 天堂av在线网 | 亚洲1区在线 | 91精品区| www.五月婷婷 | 国产精品一区二区三区在线看 | 成人亚洲欧美 | 中文字幕在线视频一区 | 一区二区三区日韩在线观看 | 波多野结衣电影一区二区三区 | 狠狠狠的干 | 91视频免费看| 黄网站a| 免费色视频网址 | 激情影音先锋 | 福利av在线| 午夜成人免费影院 | av短片在线观看 | 国产性天天综合网 | 久草视频在线资源 | 国产精品久久久久免费 | 欧美99精品 | 亚洲精欧美一区二区精品 | 字幕网av| 99精品国产高清在线观看 | 欧美精品二 | 国内偷拍精品视频 | 精品视频久久 | 欧美色图88 | 久久精品精品电影网 | 97免费公开视频 | 亚洲成人精品在线观看 | 欧美性生活小视频 | 日韩中文字幕免费在线观看 | 日韩免费中文字幕 | 国产69熟 | 天天躁天天躁天天躁婷 | 亚洲欧美综合精品久久成人 | 久久黄色免费观看 | 免费av在线网站 | 成人av免费看 | 中文在线a√在线 | 黄色影院在线观看 | 91在线国产观看 | 国产在线国偷精品产拍免费yy | 国产99久久久国产精品成人免费 | 欧美网站黄色 | 激情小说 五月 | 日韩一级片网址 | 毛片视频网址 | 天天色视频 | 国产精选在线 | 激情欧美丁香 | 黄色网在线免费观看 | 日韩视频区| www久草| 国产精品久久久亚洲 | 欧美久久久久久久 | 久草在线高清视频 | 少妇高潮流白浆在线观看 | 国产精品欧美久久久久三级 | 国产成人一区二区三区在线观看 | 亚洲精品在线国产 | 国产视频每日更新 | 日韩国产欧美在线视频 | 色88久久| 69夜色精品国产69乱 | 亚洲黄色免费观看 | 久久久免费视频播放 | 夜夜爽www | 又湿又紧又大又爽a视频国产 | 狠狠干电影| 国产精品国产三级国产aⅴ入口 | 免费看黄在线网站 | 在线观看久 | 一级黄色在线视频 | 成人a级免费视频 | 精品视频国产一区 | 国产福利在线免费 | 天天操网站 | 国产视频在线一区二区 | 欧美日韩在线观看一区二区 | 麻豆视频在线免费看 | 91精品视频在线观看免费 | 久久tv| av成人免费网站 | 在线观看日本韩国电影 | 91在线观看视频网站 | 久久理论影院 | 亚洲国内精品在线 | 国内精品99 | 亚洲欧美国内爽妇网 | 婷婷在线视频观看 | 成人影片免费 | 干狠狠| 亚洲jizzjizz日本少妇 | 国产精品第一视频 | 精品一区二区亚洲 | 欧美激情视频三区 | 国产精品久久麻豆 | 国产精品av久久久久久无 | 成人精品久久 | 国产女人免费看a级丨片 | 久久热首页 | 97激情影院 | 九九久久国产精品 | 一级成人网| 日韩精品中文字幕在线观看 | 国产一区欧美在线 | 911精品美国片911久久久 | 国产黄在线 | 国产h片在线观看 | 欧美精选一区二区三区 | 亚洲成a人片77777kkkk1在线观看 | 国产高清在线一区 | av官网在线| 99欧美精品 | 视频一区视频二区在线观看 | 狠狠色丁香婷婷综合久小说久 | 奇米网777| 黄在线免费看 | a视频在线观看 | 青青河边草免费观看 | 在线观看中文字幕亚洲 | 亚洲精品国偷拍自产在线观看 | 欧美激情视频在线免费观看 | 69国产盗摄一区二区三区五区 | 91人网站| 五月婷婷丁香在线观看 | 香蕉网站在线观看 | 精品亚洲男同gayvideo网站 | 成人丁香花 | 天堂av一区二区 | 91亚洲国产成人 | 美女久久久久久 | 99精品免费久久久久久久久日本 | 99免费在线 | 国产精品一区二区久久精品爱微奶 | 国产成本人视频在线观看 | 又黄又爽又湿又无遮挡的在线视频 | 婷婷六月网 | 色婷婷狠狠干 | 午夜视频免费播放 | 毛片网站免费在线观看 | 色婷婷综合视频在线观看 | 激情五月在线视频 | 免费在线观看日韩视频 | 97在线免费视频观看 | 亚洲理论电影 | 人人爽久久涩噜噜噜网站 | 久久精品视频在线 | 国产精品久久久久久久久婷婷 | 国产美女精品视频免费观看 | 免费精品 | 欧美伦理一区二区三区 | 日韩久久久久久久久久 | 亚洲欧美国内爽妇网 | 天天操天天干天天综合网 | 精品999| av国产网站 | 日韩高清在线不卡 | 国产精品久久久久毛片大屁完整版 | 美女视频黄频 | 国产高清视频免费 | 中文字幕欧美日韩va免费视频 | 国产中文伊人 | 在线免费黄色片 | 91中文视频| 九九精品视频在线看 | 色综合久久中文综合久久牛 | 国产精品久久久久久超碰 | 久久久91精品国产一区二区三区 | 久久99精品国产麻豆婷婷 | 99精品成人 | 天天综合网 天天 | 久草在线91 | 国产精品第7页 | 国产精选在线 | 欧洲精品视频一区 | 天堂入口网站 | 欧美一级片在线免费观看 | 欧美老女人xx | 最近日本字幕mv免费观看在线 | 91大神精品视频在线观看 | 91视频 - 88av | 黄色av成人在线观看 | 天天拍天天操 | 亚洲美女久久 | 91超级碰碰 | 色综合久久久久久中文网 | 亚洲国内精品在线 | 中文字幕日韩免费视频 | 久久久久免费网站 | 91秒拍国产福利一区 | 国产91精品一区二区麻豆网站 | 黄色大全免费网站 | 91在线国内视频 | 日韩欧美国产精品 | 国产精品va最新国产精品视频 | 日本中文字幕在线视频 | 天天天在线综合网 | 欧美日韩中文在线观看 | 国产黄视频在线观看 | 四虎影视www | 999久久久久久久久6666 | 91精品久久久久久粉嫩 | 欧美一区三区四区 | 精品96久久久久久中文字幕无 | 精品视频免费观看 | 色偷偷88888欧美精品久久 | 99精品欧美一区二区蜜桃免费 | 欧美日韩在线看 | 99在线免费观看 | 99在线视频播放 | 天天射天天艹 | 国产黄免费看 | av网站有哪些 | 国产精品午夜在线 | 日韩av片无码一区二区不卡电影 | 国产欧美三级 | 午夜精品一区二区三区四区 | 高清av免费一区中文字幕 | 色九九在线 | 一区二区三区高清不卡 | 三级av中文字幕 | 欧美精品一区二区三区四区在线 | 精品一区二区三区香蕉蜜桃 | 91av99| 偷拍精偷拍精品欧洲亚洲网站 | 看全黄大色黄大片 | 国产中文字幕一区 | 中文字幕在线播出 | 久久理论片| 五月婷婷中文网 | av午夜电影| 久久热亚洲 | 免费黄在线观看 | aaa日本高清在线播放免费观看 | 国内精品久久久精品电影院 | 国产在线小视频 | 久久婷婷五月综合色丁香 | 狠狠操.com | 国产涩图 | 亚洲午夜久久久久久久久久久 | 国产经典 欧美精品 | 免费观看完整版无人区 | 亚洲精区二区三区四区麻豆 | 亚洲视频在线观看网站 | 99久久精品国产网站 | 在线观看日本高清mv视频 | 在线日韩一区 | 在线观看免费成人 | 久久99精品久久久久久 | 免费一级片观看 | 精品成人免费 | 久久玖| 亚洲狠狠操| 久久久综合电影 | 亚洲精品色视频 | 成人av中文字幕 | 伊甸园永久入口www 99热 精品在线 | 不卡的av在线播放 | 中文字幕第一页在线vr | 色综合激情久久 | 亚洲精品视频网站在线观看 | 亚洲国产视频网站 | 国产视频久久久久 | 国产999精品久久久久久麻豆 | 娇妻呻吟一区二区三区 | 麻豆播放 | 91热精品| 一区二区三区四区久久 | 一级片免费在线 | 中文字幕在线看 | 国产区在线| 亚洲国产97在线精品一区 | 日日干夜夜爱 | 中文字幕在线视频一区 | 国产精品密入口果冻 | 久久精品99北条麻妃 | 国产精品久免费的黄网站 | 日韩av女优视频 | 在线观看亚洲精品视频 | 91中文字幕永久在线 | 亚洲精品久久久久中文字幕二区 | 五月婷婷开心 | 免费在线观看午夜视频 | 国产亚洲成av人片在线观看桃 | 中文字幕日本在线观看 | 精品国内自产拍在线观看视频 | 亚洲精品videossex少妇 | 一区二区在线不卡 | 免费看片网址 | 日韩欧美99 | 国产精品久久久久一区二区国产 | 久久久久久久久久久久影院 | 亚洲女在线 | 毛片网站观看 | 欧美性色19p | 欧美激情另类 | 成人午夜片av在线看 | 色婷婷精品大在线视频 | 五月婷婷中文 | 狠狠干狠狠操 | 在线看小早川怜子av | 国产精品久久久久免费 | 天天天色综合 | 亚洲欧洲精品一区 | 天天操天天射天天爱 | 在线视频成人 | 国内久久视频 | 国产高清视频免费在线观看 | 久久精国产 | 国产一区二区三区四区大秀 | 日本精油按摩3 | а天堂中文最新一区二区三区 | 亚洲欧美国产精品va在线观看 | 欧美一级大片在线观看 | 久久久久久久久久久国产精品 | 日本字幕网 | 黄色av免费在线 | 久久婷婷久久 | 久久国产精品一区二区三区四区 | 亚洲区精品视频 | 97国产在线视频 | 香蕉视频网址 | 成人免费网站视频 | 亚洲精品五月 | 一区二区三区在线免费 | 日韩在线视频在线观看 | 国产色就色 | 久久免费国产精品1 | 精品国产欧美一区二区三区不卡 | 亚洲一区日韩在线 | 在线黄色观看 | 啪啪免费观看网站 | 久久精选 | 久久国产视频网站 | 日韩剧| 人人玩人人添人人澡97 | 午夜精品一二区 | 91精品综合| 欧美久久久一区二区三区 | 高清国产午夜精品久久久久久 | 久久国产精品区 | 欧美最爽乱淫视频播放 | 成年人黄色免费网站 | av东方在线 | 日日日日干 | 夜夜躁狠狠躁日日躁 | 色窝资源| 视频 天天草 | 国产综合视频在线观看 | 九九热视频在线免费观看 | 一区二区三区动漫 | 日本性生活免费看 | 久久久 激情| 成人动漫精品一区二区 | 91九色丨porny丨丰满6 | 亚洲日本va中文字幕 | 国产中文在线观看 | av丁香| 色夜影院| 在线免费观看视频a | 亚洲精品色婷婷 | 激情av在线播放 | 免费在线播放av电影 | av成人在线看 | 91精品夜夜 | 五月综合色 | 一区二区av | 开心婷婷色 | 99国产精品久久久久久久久久 | 婷婷网五月天 | 国产无套精品久久久久久 | 亚洲黄色软件 | 久久大香线蕉app | 日本中文字幕久久 | 国产乱对白刺激视频不卡 | av中文电影 | 国产精品一区在线观看你懂的 | 精品国产成人av | 婷婷在线免费 | 欧美一级性 | 色综合天天爱 | 天天天天天天天天操 | 96亚洲精品久久 | 欧美做受高潮电影o | 最近中文字幕mv免费高清在线 | 黄色在线免费观看网站 | 狠狠狠狠干 | 久久婷婷一区 | www.av在线.com| 午夜视频一区二区 | 久久免费在线观看 | 日韩中字在线 | 色999视频 | 免费观看国产精品 | 日本在线观看中文字幕 | 国产精品国产自产拍高清av | 99精品视频免费观看视频 | 国产伦理一区二区 | 国产精品福利无圣光在线一区 | 99视频99| 娇妻呻吟一区二区三区 | 黄色av电影网 | 久久精品精品电影网 | 免费看片成人 | 91福利影院在线观看 | 日日爽日日操 | 天天摸天天干天天操天天射 | 日本少妇高清做爰视频 | av高清一区二区三区 | 成人sm另类专区 | 亚洲成人av影片 | 免费能看的av| 亚洲另类视频在线观看 | 免费观看性生交大片3 | 亚洲影院色 | av免费看看| www黄色com | av先锋中文字幕 | 精壮的侍卫呻吟h | 成人免费在线视频观看 | 国产一区欧美二区 | 国产精品一区二区三区电影 | 日韩天天操 | 亚洲区视频在线 | 国内精品久久久久久中文字幕 | 日韩精品最新在线观看 | 日韩国产精品一区 | 久久综合中文字幕 | 国产精品区免费视频 | 天天操夜夜摸 | 日韩三级在线 | 日韩网站在线免费观看 | 久久精品视频18 | 国产你懂的在线 | 天天操伊人 | 日本久久久精品视频 | 91av蜜桃 | 99九九免费视频 | 免费日韩 精品中文字幕视频在线 | 97人人模人人爽人人喊网 | 97在线观看视频 | 国产又粗又猛又黄又爽视频 | 国产专区在线视频 | 国产精品青草综合久久久久99 | 国产精国产精品 | 欧美视频xxx | 久久特级毛片 | 欧美小视频在线观看 | 国内精品免费 | 久久免费精品一区二区三区 | 综合久色| 久久成人国产精品 | 午夜视频在线观看一区二区三区 | 国产小视频免费观看 | 亚洲精品乱码久久久久久蜜桃不爽 | 亚洲情影院 | 久久久久国产一区二区三区四区 | 日本三级在线观看中文字 | 久久天堂精品视频 | 色多视频在线观看 | 午夜影视剧场 | 免费观看黄色12片一级视频 | 欧美日韩精品在线播放 | 在线看片一区 | 视频国产 | 亚洲干| 欧美aaaxxxx做受视频 | 97超碰人人澡人人爱学生 | 国产日韩欧美精品在线观看 | 国产亚洲情侣一区二区无 | 99久热在线精品 | 伊人电影在线观看 | 国产精品黄色 | 中文字幕亚洲精品日韩 | av免费看av | 国产精品一区二区在线观看 | 97视频资源 | 九九九九精品九九九九 | 国产v视频| 日韩在线观看中文字幕 | 亚洲小视频在线 | 久久精品99国产 | 在线免费观看国产 | 最近日本mv字幕免费观看 | 蜜臀av麻豆 | 91网免费观看| 国产精品美女免费看 | 99这里只有久久精品视频 | 在线观看日本韩国电影 | 欧美一级特黄高清视频 | 欧美一区,二区 | 一区二区三区精品在线视频 | 天堂在线成人 | 日韩av二区 | 天天躁日日躁狠狠躁av中文 | 伊人开心激情 | 99热这里是精品 | 中文字幕在线免费观看 | 欧美最猛性xxxxx亚洲精品 | 久久激情网站 | 亚洲手机av| 日批视频在线观看免费 | 99久久精品久久久久久清纯 | 久久99精品国产99久久 | 色婷婷国产精品一区在线观看 | 日韩在线第一区 | 日本精品视频一区 | 日韩av五月天| 日韩精品一区二区三区电影 | 天天爱天天草 | 成人亚洲精品国产www | 日韩在线观看精品 | 免费看黄在线网站 | 中文字幕一区二区三区视频 | 好看av在线| 亚洲国产日韩av | 国产高清在线观看av | 免费的成人av | 成人三级网站在线观看 | 国产精品久久电影观看 | 久久狠狠干 | 五月天激情视频 | 日韩av高清| 狠狠色丁香婷婷 | 欧美成人猛片 | 国模视频一区二区 | 四虎5151久久欧美毛片 | 又黄又刺激又爽的视频 | 91av久久| 精品久久久久久久久中文字幕 | 国产精品久久久久影院日本 | 在线观看一 | 日精品在线观看 | 又湿又紧又大又爽a视频国产 | 欧美黑人性爽 | 日韩黄色影院 | 久久久国产视频 | 一区二区三区高清在线观看 | www.久热| 九九在线视频免费观看 | 久久香蕉影视 | 香蕉久久久久久av成人 | 久久人人爽人人 | 国产自产在线视频 | 国产一区精品在线观看 | 成人一级片在线观看 | 国产小视频你懂的 | 久久一区二区三区国产精品 | 激情综合色综合久久 | 五月天婷婷免费视频 | 天天干,夜夜爽 | 日韩国产高清在线 | 九九热免费观看 | 国产不卡视频 | 国产99久久久国产 | 在线观看av片 | 99热在线免费观看 | 中文字幕在线成人 | 99 久久久久 | 免费成人在线观看视频 | 99久久精品无码一区二区毛片 | 久久成熟 | 欧美一级免费黄色片 | 日韩免费视频一区二区 | 黄色片免费在线 | 波多野结衣在线视频免费观看 | 欧美精品在线观看一区 | 国产精品wwwwww | 久久久久久国产精品亚洲78 | 欧美激情视频在线免费观看 | 精品久久久久久久久久久院品网 | 免费在线播放视频 | 在线观看免费一级片 | 一本一道久久a久久精品 | 国产明星视频三级a三级点| 久久成视频 | av成人动漫在线观看 | 99热手机在线 | 狠狠色丁香婷婷综合基地 | 97国产大学生情侣白嫩酒店 | 亚洲a免费 | 久草新在线 | 久久精品亚洲综合专区 | 国产精品一区二区三区电影 | 九九免费在线看完整版 | 91精品在线播放 | 国产黄色视 | 国产在线观看免费观看 | 亚洲 精品在线视频 | 一级精品视频在线观看宜春院 | 国产精品视频专区 | 99精品免费久久久久久久久 | 亚洲综合欧美日韩狠狠色 | 丰满少妇对白在线偷拍 | 欧美性生活久久 | 国产成人区 | 免费97视频 | av黄色在线播放 | 国产视频日本 | 亚洲激情六月 | 91丨porny丨九色 | 久草亚洲视频 | 狠狠狠综合 | 麻豆成人在线观看 | 黄色大全在线观看 | 在线播放精品一区二区三区 | 日韩三级在线 | 亚色视频在线观看 | 99精品一区二区 | 国产视频九色蝌蚪 | www.色综合.com| 99精品热视频只有精品10 | 久久综合九色欧美综合狠狠 | 国产特级毛片 | 久久久久福利视频 | 青青久草在线视频 | 免费看毛片网站 | 99精品在线视频播放 | 久久99精品一区二区三区三区 | 国产精品久久久久久久妇 | 国产网站在线免费观看 | 亚洲精品人人 | 久久精品精品电影网 | 欧美 日韩精品 | www.夜夜夜| 日韩美女久久 | 不卡视频国产 | 欧美精品少妇xxxxx喷水 | 亚洲另类在线视频 | www.色就是色 | 亚洲一级特黄 | 最近中文字幕免费av | 99国产成+人+综合+亚洲 欧美 | 99国产精品视频免费观看一公开 | 日韩精品在线视频 | 99视频国产精品 | 久久韩国免费视频 | 成人理论电影 | 99视频在线播放 | 99久久久久国产精品免费 | 91视频3p| a√天堂中文在线 | 国产精品3区| 国产成人在线综合 | 51久久夜色精品国产麻豆 | av网址在线播放 | 亚洲午夜在线视频 | 亚洲视频免费视频 | 99精品在线 | 精品欧美一区二区三区久久久 | 日韩精品极品视频 | 亚洲无吗av | 久久一区国产 | 激情综合网五月激情 | 99欧美视频 | aaa黄色毛片 | 久久久综合九色合综国产精品 | 久久人人爽人人片av | 中文字幕免费观看视频 | 福利在线看片 | 岛国av在线 | 2023亚洲精品国偷拍自产在线 | 精品国产亚洲在线 | 婷婷激情五月 | 国产一区二区在线观看视频 | 亚洲成免费 | 国产视频资源在线观看 | 波多野结衣在线观看视频 | 欧美一区二区在线免费观看 | 国产日韩一区在线 | 丁香五婷 | 免费日韩一区 | 亚洲视频在线观看免费 | 亚洲视频1 | 夜夜操狠狠干 | 国产免费又爽又刺激在线观看 | 午夜视频在线网站 | 国产资源中文字幕 | 久久久久国产精品厨房 | 久久伊人精品天天 | 久久成人精品电影 | 婷婷色伊人 | 国产探花视频在线播放 | 国产精品国产自产拍高清av | 成人小视频在线 | 中文字幕在线免费观看 | 人人爽人人香蕉 | 亚洲一区二区三区在线看 | 免费网站看v片在线a | aⅴ视频在线| 亚洲黄色av一区 | 国产资源| 成人av在线一区二区 | 日韩av快播电影网 | 成人黄色免费在线观看 | www.色综合.com | 人人爽久久久噜噜噜电影 | 成人h电影 | 99久久er热在这里只有精品15 | 日韩精品一区二区免费 | 国产精品一区二区三区免费看 | 国产91aaa| 最新动作电影 | 免费a级毛片在线看 | 日韩成人高清在线 | 青青河边草免费直播 | 伊人官网 | 国产少妇在线观看 | av在线影视 | 中文字幕在线观看一区二区三区 | 91日本在线播放 | 亚洲精品国产综合久久 | 欧美日韩一二三四区 | 插婷婷| 五月婷婷激情综合 | 国产精品久久久久久久久搜平片 | 麻豆视频在线免费看 | 成人小视频在线播放 | 在线看国产 | 国产精品自产拍在线观看蜜 | 99性视频| 久久成人人人人精品欧 | 欧美成人h版在线观看 | 国产做爰视频 | 中文字幕在线网 | 一区二区激情 | 午夜12点 | 日韩欧美在线第一页 | 在线免费91 | 狠狠操狠狠干2017 | 久久性生活片 | 992tv成人免费看片 | 一区二区三区在线观看中文字幕 | 97视频在线播放 | 日本爱爱片 | 99久久久久久国产精品 | av成人动漫在线观看 | 97精品国产97久久久久久免费 | 免费观看视频黄 | 91在线小视频 | 激情视频久久 |