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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

构建SpringCloud项目基础框架

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构建SpringCloud项目基础框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 父項目microcloud
    • 本地模擬RPC調用
    • common-api子模塊
        • 創建dto類
        • 創建服務接口
        • 創建一個對象拷貝的工具類
    • provider-dept-8001 子模塊
        • bootstrap.yml
        • application.yml
        • logback-spring.xml
        • Swagger配置
        • 創建MyBatisPlus配置類
        • 部門 數據庫創建腳本
        • 創建Dept映射類
        • 創建IDeptDAO數據接口
        • 在生產端需要提供有業務接口的實現子類
        • 啟動類
        • 測試
        • controller
        • common-api子模塊修改
    • consumer-springboot-80 子模塊
        • application.yml
        • controller
        • 啟動類

父項目microcloud

添加common-api子模塊
添加 provider-dept-8001 子模塊
添加 consumer-springboot-80 子模塊
New Module

Gradle版本:

版本組合:

springboot : ‘2.2.5.RELEASE’, // SpringBoot版本號
springcloud : ‘Hoxton.SR3’, // SpringCloud版本號
alibabacloud : ‘2.2.1.RELEASE’, // SpringCloudAlibaba版本號

gradle.properties

project_group=com.yootk project_version=1.0.0 project_jdk=11

dependencies.gradle

ext.versions = [ // 定義全部的依賴庫版本號springboot : '2.2.5.RELEASE', // SpringBoot版本號springcloud : 'Hoxton.SR3', // SpringCloud版本號alibabacloud : '2.2.1.RELEASE', // SpringCloudAlibaba版本號lombok : '1.18.20', // Lombok版本號junit : '5.6.3', // 配置JUnit測試工具的版本編號junitPlatformLauncher: '1.6.3', // JUnit測試工具運行平臺版本編號mybatisPlus : '3.4.3', // MyBatisPlus的版本號mysql : '8.0.25', // MySQL數據庫驅動版本druid : '1.2.6', // Druid版本號swagger : '3.0.0', // Swagger版本號nacos : '2.0.2', // Nacos版本號 ] ext.libraries = [ // 依賴庫引入配置'spring-boot-gradle-plugin' :"org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",'spring-cloud-dependencies' :"org.springframework.cloud:spring-cloud-dependencies:${versions.springcloud}",'spring-cloud-alibaba-dependencies':"com.alibaba.cloud:spring-cloud-alibaba-dependencies:${versions.alibabacloud}",// 以下的配置為與項目用例測試有關的依賴'junit-jupiter-api' :"org.junit.jupiter:junit-jupiter-api:${versions.junit}",'junit-vintage-engine' :"org.junit.vintage:junit-vintage-engine:${versions.junit}",'junit-jupiter-engine' :"org.junit.jupiter:junit-jupiter-engine:${versions.junit}",'junit-platform-launcher' :"org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",'junit-platform-engine' :"org.junit.platform:junit-platform-engine:${versions.junitPlatformLauncher}",'junit-jupiter-params' :"org.junit.jupiter:junit-jupiter-params:${versions.junit}",'junit-bom' : "org.junit:junit-bom:${versions.junit}",'junit-platform-commons' :"org.junit.platform:junit-platform-commons:${versions.junitPlatformLauncher}",// 以下的配置為Lombok組件有關的依賴'lombok' : "org.projectlombok:lombok:${versions.lombok}",// 以下的配置為數據庫開發有關的依賴'mybatis-plus-boot-starter' : "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",'mysql-connector-java' : "mysql:mysql-connector-java:${versions.mysql}",'druid' : "com.alibaba:druid:${versions.druid}",// 以下的配置為Swagger有關的依賴庫'springfox-boot-starter' : "io.springfox:springfox-boot-starter:${versions.swagger}",// 以下的配置為Nacos有關的依賴庫'nacos-client' : "com.alibaba.nacos:nacos-client:${versions.nacos}" ]

build.gradle

buildscript { // 定義腳本使用資源apply from: 'dependencies.gradle' // 引入所需要的依賴庫文件repositories { // 腳本資源倉庫maven { url 'https://maven.aliyun.com/repository/public' }}dependencies { // 依賴庫classpath libraries.'spring-boot-gradle-plugin' // SpringBoot插件} } group project_group // 組織名稱 version project_version // 項目版本apply from: 'dependencies.gradle' // 導入依賴配置 def env = System.getProperty("env") ?: 'dev' // 獲取env環境屬性 subprojects { // 配置子項目apply plugin: 'java' // 子模塊插件apply plugin: 'org.springframework.boot' // 引入SpringBoot插件apply plugin: 'io.spring.dependency-management' // 版本號管理sourceCompatibility = project_jdk // 源代碼版本targetCompatibility = project_jdk // 生成類版本repositories { // 配置Gradle倉庫mavenLocal()maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }mavenCentral()jcenter()}dependencyManagement {// 版本控制插件imports {mavenBom libraries.'spring-cloud-dependencies' // SpringCloud依賴管理mavenBom libraries.'spring-cloud-alibaba-dependencies' // SpringCloudAlibaba依賴管理}}dependencies { // 公共依賴庫管理compile('org.springframework.boot:spring-boot-devtools') // 項目熱部署// 以下為測試環境的相關依賴配置testImplementation('org.springframework.boot:spring-boot-starter-test') {exclude group: 'junit', module: 'junit' // 移除Junit4}testImplementation(enforcedPlatform(libraries.'junit-bom')) // 綁定為JUnit5運行testImplementation(libraries.'junit-platform-commons') // Junit5測試組件testImplementation(libraries.'junit-platform-engine') // Junit5測試組件testImplementation(libraries.'junit-jupiter-api') // Junit5測試組件testImplementation(libraries.'junit-vintage-engine') // Junit5測試組件testImplementation(libraries.'junit-jupiter-engine') // Junit5測試組件testImplementation(libraries.'junit-platform-launcher') // Junit5測試組件// 以下為Lombok插件的相關依賴配置compileOnly(libraries.'lombok') // 編譯時生效annotationProcessor(libraries.'lombok') // 注解時生效}sourceSets { // 源代碼目錄配置main { // main及相關子目錄配置java { srcDirs = ['src/main/java'] }resources { srcDirs = ['src/main/resources', "src/main/profiles/$env"] }}test { // test及相關子目錄配置java { srcDirs = ['src/test/java'] }resources { srcDirs = ['src/test/resources'] }}}test { // 配置測試任務useJUnitPlatform() // 使用JUnit測試平臺}task sourceJar(type: Jar, dependsOn: classes) { // 源代碼的打包任務archiveClassifier = 'sources' // 設置文件的后綴from sourceSets.main.allSource // 所有源代碼的讀取路徑}task javadocTask(type: Javadoc) { // JavaDoc文檔打包任務options.encoding = 'UTF-8' // 設置文件編碼source = sourceSets.main.allJava // 定義所有的Java源代碼}task javadocJar(type: Jar, dependsOn: javadocTask) { // 先生成JavaDoc再打包archiveClassifier = 'javadoc' // 文件標記類型from javadocTask.destinationDir // 通過JavadocTask任務中找到目標路徑}tasks.withType(Javadoc) { // 文檔編碼配置options.encoding = 'UTF-8' // 定義編碼}tasks.withType(JavaCompile) { // 編譯編碼配置options.encoding = 'UTF-8' // 定義編碼}artifacts { // 最終的打包的操作任務archives sourceJar // 源代碼打包archives javadocJar // javadoc打包}gradle.taskGraph.whenReady { // 在所有的操作準備好后觸發tasks.each { task -> // 找出所有的任務if (task.name.contains('test')) { // 如果發現有test任務// 如果將enabled設置為true表示要執行測試任務,如果設置為false表示不執行測試任務task.enabled = true}}}[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'// 編碼配置 } project(":common-api") { // 進行子模塊的配置dependencies { // 配置模塊所需要的依賴庫compile("org.springframework.boot:spring-boot-starter-web") // SpringBoot依賴compile('org.springframework.cloud:spring-cloud-starter-openfeign')} } project(":provider-dept-8001") { // 部門微服務dependencies {implementation(project(":common-api")) // 導入公共的子模塊implementation(libraries.'mybatis-plus-boot-starter')implementation(libraries.'mysql-connector-java')implementation(libraries.'druid')implementation(libraries.'springfox-boot-starter')// 以下的依賴庫為Nacos注冊中心所需要的依賴配置implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除舊版本的Nacos依賴}implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除舊版本的Nacos依賴}implementation(libraries.'nacos-client') // 引入與當前的Nacos匹配的依賴庫} } project(":consumer-springboot-80") { // 消費端模塊dependencies {implementation(project(":common-api")) // 導入公共的子模塊implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除舊版本的Nacos依賴}implementation(libraries.'nacos-client') // 引入與當前的Nacos匹配的依賴庫} }

本地模擬RPC調用

配置文件路徑:C:\Windows\System32\driversletc\hosts
服務提供者主機名稱: 127.0.0.1 provider-dept-8001
服務消費者主機名稱: 127.0.0.1 consumer-springboot-80

common-api子模塊

創建dto類

package com.yootk.common.dto;import lombok.Data;import java.io.Serializable; // 該類主要實現部門數據結構的映射,實現數據的遠程傳輸 @Data // Lombok注解,自動生成所需要的類結構 public class DeptDTO implements Serializable { // 定義數據傳輸類private Long deptno; // 部門編號private String dname; // 部門名稱private String loc; // 部門位置 }

創建服務接口

package com.yootk.service;import com.yootk.common.dto.DeptDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam;import java.util.List; import java.util.Map; @FeignClient("dept.provider") // 定義要訪問的微服務實例名稱 public interface IDeptService { // 業務接口/*** 根據部門的編號獲取部門的完整信息* @param id 要查詢的部門編號* @return 編號存在則以DTO對象的形式返回部門數據,如果不存在返回null*/@GetMapping("/provider/dept/get/{deptno}") // 遠程REST接口public DeptDTO get(@PathVariable("deptno") long id);/*** 增加部門對象* @param dto 保存要增加部門的詳細數據* @return 增加成功返回true,否則返回false*/@PostMapping("/provider/dept/add")public boolean add(DeptDTO dto);/*** 列出所有的部門數據信息* @return 全部數據的集合, 如果沒有任何的部門數據則集合為空(size() == 0)*/@GetMapping("/provider/dept/list")public List<DeptDTO> list();/*** 進行部門的分頁數據加載操作* @param currentPage 當前所在頁* @param lineSize 每頁加載的數據行數* @param column 模糊查詢的數據列* @param keyword 模糊查詢關鍵字* @return 部門集合數據以及統計數據,返回的數據項包括:* 1、key = allDepts、value = List集合(部門的全部數據對象)* 2、key = allRecorders、value = 總記錄數;* 3、key = allPages、value = 頁數。*/@GetMapping("/provider/dept/split")public Map<String, Object> split(@RequestParam("cp") int currentPage,@RequestParam("ls") int lineSize,@RequestParam("col") String column,@RequestParam("kw") String keyword); }

創建一個對象拷貝的工具類

在Spring 開發框架內部提供有一個BeanUJtils工具類,這個工具類有一個最大的特點就是可以直接實現對象的數據的拷貝操作,可是這個拷貝操作不包含有集合數據的拷貝處理。

package com.yootk.common.util;import org.springframework.beans.BeanUtils;import java.util.ArrayList; import java.util.List; import java.util.function.Supplier;public class DeepBeanUtils extends BeanUtils { // 擴充已有的Bean工具類private DeepBeanUtils() {}/*** 實現List集合對象的拷貝處理* @param sources 原始對象集合* @param target 目標對象集合* @param <S> 源對象類型* @param <T> 目標對象類型* @return 拷貝后的List集合*/public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {List<T> list = new ArrayList<>(sources.size()); // 開辟一個新的List集合for (S source : sources) { // 集合迭代T obj = target.get(); // 獲取數據copyProperties(source, obj); // 由父類所提供的拷貝方法list.add(obj); // 增加集合數據}return list; // 返回集合} }

provider-dept-8001 子模塊

bootstrap.yml

spring: # Spring配置項cloud: # SpringCloud配置項nacos: # Nacos注冊中心的配置config: # gRPC通訊配置server-addr: nacos-server:8848 # Nacos地址 代理nacos-proxy:8848namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空間IDgroup: MICROCLOUD_GROUP # 一般建議大寫cluster-name: MuyanCluster # 配置集群名稱

application.yml

server: # 服務端配置port: 8001 # 8001端口 mybatis-plus: # MyBatisPlus配置type-aliases-package: com.yootk.provider.vo # 別名配置 spring:application: # 配置應用信息name: dept.provider # 是微服務的名稱cloud: # Cloud配置nacos: # Nacos注冊中心配置discovery: # 發現服務service: ${spring.application.name} # 使用微服務的名稱作為注冊的服務名稱server-addr: nacos-server:8848 # Nacos服務地址 代理nacos-proxy:8848namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空間IDgroup: MICROCLOUD_GROUP # 一般建議大寫cluster-name: MuyanCluster # 配置集群名稱metadata: # 根據自身的需要配置元數據version: 1.0 # 自定義元數據項company: 沐言科技 # 自定義元數據項url: www.yootk.com # 自定義元數據項author: 李興華(爆可愛的小李老師) # 自定義元數據項datasource: # 數據源配置type: com.alibaba.druid.pool.DruidDataSource # 數據源類型driver-class-name: com.mysql.cj.jdbc.Driver # 驅動程序類url: jdbc:mysql://localhost:3306/yootk8001 # 連接地址username: root # 用戶名password: mysqladmin # 連接密碼druid: # druid相關配置initial-size: 5 # 初始化連接池大小min-idle: 10 # 最小維持連接池大小max-active: 50 # 最大支持連接池大小max-wait: 60000 # 最大等待時間time-between-eviction-runs-millis: 60000 # 關閉空閑連接間隔min-evictable-idle-time-millis: 30000 # 連接最小生存時間validation-query: SELECT 1 FROM dual # 狀態檢測test-while-idle: true # 空閑時檢測連接是否有效test-on-borrow: false # 申請時檢測連接是否有效test-on-return: false # 歸還時檢測連接是否有效pool-prepared-statements: false # PSCache緩存max-pool-prepared-statement-per-connection-size: 20 # 配置PS緩存filters: stat, wall, slf4j # 開啟過濾stat-view-servlet: # 監控界面配置enabled: true # 啟用druid監控界面allow: 127.0.0.1 # 訪問白名單login-username: muyan # 用戶名login-password: yootk # 密碼reset-enable: true # 允許重置url-pattern: /druid/* # 訪問路徑web-stat-filter:enabled: true # 啟動URI監控url-pattern: /* # 跟蹤全部服務exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" # 跟蹤排除filter:slf4j: # 日志enabled: true # 啟用SLF4j監控data-source-log-enabled: true # 啟用數據庫日志statement-executable-sql-log-enable: true # 執行日志result-set-log-enabled: true # ResultSet日志啟用stat: # SQL監控merge-sql: true # 合并統計log-slow-sql: true # 慢執行記錄slow-sql-millis: 1 # 慢SQL執行時間wall: # SQL防火墻enabled: true # SQL防火墻config: # 防火墻規則multi-statement-allow: true # 允許執行批量SQLdelete-allow: false # 禁止執行刪除語句aop-patterns: "com.yootk.provider.action.*,com.yootk.provider.service.*,com.yootk.provider.dao.*" # Spring監控

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"><contextName>logback</contextName><!-- 定義控制臺輸出匹配格式 --><substitutionProperty name="logging.pattern.console"value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([%X{requestId}]) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%ewtpc}"/><!-- 定義日志文件輸出匹配格式 --><substitutionProperty name="logging.pattern.file"value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} %clr([%X{requestId}]) ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%ewtpc}"/><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wtpc" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="ewtpc" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- 控制臺輸出 --><layout class="ch.qos.logback.classic.PatternLayout"> <!-- 使用layout節點 --><pattern>${logging.pattern.console}</pattern> <!-- 格式引用 --></layout></appender><!-- 將每天的日志保存在一個文件之中 --><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><Prudent>true</Prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 設置日志保存路徑,本次按照月份創建日志目錄,而后每天的文件歸檔到一組 --><FileNamePattern>muyan-logs/%d{yyyy-MM}/yootk_%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>365</MaxHistory><!-- 刪除超過365天的日志文件 --></rollingPolicy><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level> <!-- 保存ERROR及以上級別的日志 --></filter><encoder><Pattern>${logging.pattern.file}</Pattern> <!-- 格式引用 --></encoder></appender><appender name="druidSqlFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><Prudent>true</Prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 設置日志保存路徑,本次按照月份創建日志目錄,而后每天的文件歸檔到一組 --><FileNamePattern>druid-logs/%d{yyyy-MM}/yootk_druid_slow_sql_%d{yyyy-MM-dd}.log</FileNamePattern><MaxHistory>365</MaxHistory><!-- 刪除超過365天的日志文件 --></rollingPolicy><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level> <!-- 保存ERROR及以上級別的日志 --></filter><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern><charset>utf-8</charset></encoder></appender><logger name="com.alibaba.druid.filter.stat.StatFilter" level="ERROR"><appender-ref ref="druidSqlFile"/></logger><logger name="com.yootk.provider.dao" level="DEBUG"/> <!-- 局部日志級別 --><root level="INFO"> <!-- 全局日志級別 --><appender-ref ref="console"/><appender-ref ref="file"/></root> </configuration>

Swagger配置

package com.yootk.provider.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket;@Configuration public class SwaggerConfig { // Swagger配置類private ApiInfo getApiInfo() { // 文檔之中的頭部的信息項return new ApiInfoBuilder().title("【沐言科技】部門微服務").description("實現部門數據的統一管理,包括:增加部門信息、查詢部門信息、部門列表顯示等,此處省略5000字...").termsOfServiceUrl("https://www.yootk.com").contact(new Contact("爆可愛的小李老師", "edu.yootk.com", "784420216@qq.com")).license("沐言科技 - 授權管理").version("1.0.0").build();}@Beanpublic Docket getDocker() { // 所有的詳細描述在此類中定義return new Docket(DocumentationType.SWAGGER_2) // 使用的文檔版本類型.apiInfo(this.getApiInfo()).select() // 所有的接口一定要放在指定的包中.apis(RequestHandlerSelectors.basePackage("com.yootk.provider.action")).paths(PathSelectors.any()).build();} }

swagger安全配置

雖然當前已經成功的實現了所需要的REST接口描述文檔顯示,但是這個文檔顯示本身會存在有一些設計上的缺陷,他沒有提供安全保護,只要是個人,可以訪問到你的服務器,那么就都可以進行服務調用。.
如果要想解決這種文檔的安全訪問的問題,唯一的做法就是使用SpringSecurity 來實現開發,因為這個框架是與SpringBoot深入綁定在一起的,那么使用它進行開發是最佳的做法。

父項目的build.gradle配置

project(":provider-dept-8001") { // 部門微服務dependencies {implementation(project(":common-api")) // 導入公共的子模塊implementation(libraries.'mybatis-plus-boot-starter')implementation(libraries.'mysql-connector-java')implementation(libraries.'druid')implementation(libraries.'springfox-boot-starter')implementation('org.springframework.boot:spring-boot-starter-security')// 以下的依賴庫為Nacos注冊中心所需要的依賴配置implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除舊版本的Nacos依賴}implementation('com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config') {exclude group: 'com.alibaba.nacos', module: 'nacos-client' // 移除舊版本的Nacos依賴}implementation(libraries.'nacos-client') // 引入與當前的Nacos匹配的依賴庫} }

啟用安全配置之前需要進行密碼的加密處理,本次使用的密碼明文“yootk"

package com.yootk.test;import org.springframework.security.crypto.factory.PasswordEncoderFactories;public class TestCreatePassword {public static void main(String[] args) {String pwd = PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("yootk");System.out.println(pwd);} }

SwaggerWebSecurityConfig

如果要想進行安全的啟用,肯定要配置訪問路徑以及賬戶信息。

package com.yootk.provider.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder;@Configuration public class SwaggerWebSecurityConfig extends WebSecurityConfigurerAdapter { // Swagger安全配置// 如果有其他的需要,你可以繼續進行數據庫的連接配置,具體的講解已經提供過了private static final String DEFAULT_PASSWORD ="{bcrypt}$2a$10$bvOY6ixvY5DmgiNW.Z79qeV9abQM9a6NbM1n9sejeUnB98C0kKAMu";@Beanpublic PasswordEncoder getPasswordEncoder() {return PasswordEncoderFactories.createDelegatingPasswordEncoder();}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("swagger") // 默認用戶名.password(DEFAULT_PASSWORD) // 默認密碼.roles("USER", "ADMIN");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/swagger-ui/**", "/v2/api-docs").hasRole("ADMIN").and().httpBasic().and().formLogin().permitAll().and().csrf().disable();} }

Swagger所提供的地址

http://provider-dept-8001:8001/swagger-ui

創建MyBatisPlus配置類

package com.yootk.provider.config;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class MyBatisPlusConfig { // MybatisPlus配置類@Beanpublic MybatisPlusInterceptor getMybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 攔截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 分頁處理return interceptor;} }

部門 數據庫創建腳本

DROP DATABASE IF EXISTS yootk8001; CREATE DATABASE yootk8001 CHARACTER SET UTF8; USE yootk8001; CREATE TABLE dept (deptno BIGINT AUTO_INCREMENT,dname VARCHAR(50),loc VARCHAR(50),CONSTRAINT pk_deptno PRIMARY KEY(deptno) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO dept(dname,loc) VALUES ('開發部', database()); INSERT INTO dept(dname,loc) VALUES ('財務部', database()); INSERT INTO dept(dname,loc) VALUES ('市場部', database()); INSERT INTO dept(dname,loc) VALUES ('后勤部', database()); INSERT INTO dept(dname,loc) VALUES ('公關部', database()); COMMIT;

創建Dept映射類

package com.yootk.provider.vo;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;@TableName("dept") @Data // Lombok代碼生成 public class Dept { // 這個類所需要追加MBP所需要的注解@TableId(type = IdType.AUTO) // 采用自動增長列配置private Long deptno; // 與deptno字段映射private String dname;private String loc; }

創建IDeptDAO數據接口

package com.yootk.provider.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yootk.provider.vo.Dept; import org.apache.ibatis.annotations.Mapper;@Mapper public interface IDeptDAO extends BaseMapper<Dept> { // DAO接口開發完成 }

在生產端需要提供有業務接口的實現子類

package com.yootk.provider.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yootk.common.dto.DeptDTO; import com.yootk.common.util.DeepBeanUtils; import com.yootk.provider.dao.IDeptDAO; import com.yootk.provider.vo.Dept; import com.yootk.service.IDeptService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.HashMap; import java.util.List; import java.util.Map;@Service public class DeptServiceImpl implements IDeptService {@Autowiredprivate IDeptDAO deptDAO;@Overridepublic DeptDTO get(long id) {DeptDTO dto = new DeptDTO(); // 實例化傳輸對象// 在本地端通過了VO類實現了數據的加載,隨后將此數據拷貝到DTO對象之中BeanUtils.copyProperties(this.deptDAO.selectById(id), dto); // 屬性拷貝return dto;}@Overridepublic boolean add(DeptDTO dto) {Dept dept = new Dept(); // 數據層最終需要的是一個VO類型BeanUtils.copyProperties(dto, dept);return this.deptDAO.insert(dept) > 0; // 更新行數大于0}@Overridepublic List<DeptDTO> list() {QueryWrapper<Dept> wrapper = new QueryWrapper<>();List<DeptDTO> allDepts = DeepBeanUtils.copyListProperties(this.deptDAO.selectList(wrapper), DeptDTO::new); // 集合數據拷貝return allDepts;}@Overridepublic Map<String, Object> split(int currentPage, int lineSize, String column, String keyword) {QueryWrapper<Dept> wrapper = new QueryWrapper<>();wrapper.like(column, keyword); // 設置模糊查詢操作int count = this.deptDAO.selectCount(wrapper); // 統計個數// 實現數據的查詢處理IPage<Dept> page = this.deptDAO.selectPage(new Page<>(currentPage, lineSize, count), wrapper);Map<String, Object> map = new HashMap<>(); // 包裝返回結果map.put("allDepts", DeepBeanUtils.copyListProperties(page.getRecords(), DeptDTO::new));map.put("allRecorders", page.getTotal());map.put("allPages", page.getPages());return map;} }

啟動類

package com.yootk.provider;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class StartProviderDept8001Application {public static void main(String[] args) {SpringApplication.run(StartProviderDept8001Application.class, args);} }

測試

package com.yootk.test;import com.yootk.common.dto.DeptDTO; import com.yootk.provider.StartProviderDept8001Application; import com.yootk.service.IDeptService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.web.WebAppConfiguration;import java.util.Map;@ExtendWith(SpringExtension.class) @WebAppConfiguration @SpringBootTest(classes = StartProviderDept8001Application.class) public class TestDeptService {@Autowiredprivate IDeptService deptService; // 注入業務接口對象@Testpublic void testGet() {System.out.println(this.deptService.get(1));}@Testpublic void testList() {System.out.println(this.deptService.list());}@Testpublic void testAdd() {DeptDTO dto = new DeptDTO();dto.setDname("公益部");dto.setLoc("洛陽");System.out.println(this.deptService.add(dto));}@Testpublic void testSplit() {Map<String, Object> map = this.deptService.split(1, 2, "dname", "");System.out.println(map);} }

controller

package com.yootk.provider.action;import com.yootk.common.dto.DeptDTO; import com.yootk.service.IDeptService; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest; import java.util.Enumeration;@RestController @RequestMapping("/provider/dept/*") // 微服務提供者父路徑 @Slf4j // 使用一個注解 public class DeptAction {@Autowiredprivate IDeptService deptService;@ApiOperation(value="部門查詢", notes = "根據部門編號查詢部門詳細信息")@GetMapping("get/{id}")public Object get(@PathVariable("id") long id) {return this.deptService.get(id);}@ApiOperation(value="部門增加", notes = "增加新的部門信息")@ApiImplicitParams({@ApiImplicitParam(name = "deptDTO", required = true,dataType = "DeptDTO", value = "部門傳輸對象實例")})@PostMapping("add")public Object add(@RequestBody DeptDTO deptDTO) { // 后面會修改參數模式為JSONreturn this.deptService.add(deptDTO);}@ApiOperation(value="部門列表", notes = "查詢部門的完整信息")@GetMapping("list")public Object list() {return this.deptService.list();}@ApiOperation(value="部門分頁查詢", notes = "根據指定的數據庫參數實現部門數據的分頁加載")@ApiImplicitParams({@ApiImplicitParam(name="cp", value = "當前所在頁", required = true, dataType = "int"),@ApiImplicitParam(name="ls", value = "每頁顯示的數據行數", required = true, dataType = "int"),@ApiImplicitParam(name="col", value = "模糊查詢列", required = true, dataType = "String"),@ApiImplicitParam(name="kw", value = "模糊查詢關鍵字", required = true, dataType = "String")})@GetMapping("split")public Object split(int cp, int ls, String col, String kw) {return this.deptService.split(cp, ls, col, kw);} }

common-api子模塊修改

由于該模塊需要被其他子模塊所使用,那么這個時候就需要對代碼進行編譯.

build.gradle:

jar { enabled = true} // 允許打包為jar文件 bootJar { enabled = false } // 不允許打包為Boot執行文件 javadocTask { enabled = false } // 不需要打包為doc文件

Gradle編譯:

gradle build

【provider-dept-8001子模塊】啟動當前的部門微服務測試

consumer-springboot-80 子模塊

application.yml

server: # 服務端配置port: 80 # 這個接口可以隨意,反正最終都是由前端提供服務 spring:application: # 配置應用信息name: consumer # 是微服務的名稱cloud: # Cloud配置nacos: # Nacos注冊中心配置discovery: # 發現服務server-addr: nacos-server:8848 # Nacos服務地址 代理nacos-proxy:8848 namespace: 96c23d77-8d08-4648-b750-1217845607ee # 命名空間IDgroup: MICROCLOUD_GROUP # 一般建議大寫cluster-name: MuyanCluster # 配置集群名稱register-enabled: false # 消費端不注冊

controller

package com.yootk.consumer.action;import com.yootk.common.dto.DeptDTO; import com.yootk.service.IDeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/consumer/dept/*") // 兩個不同的服務路徑 public class DeptConsumerAction { // 消費端Action@Autowired // 由容器幫助用戶自動實例化接口對象private IDeptService deptService;@GetMapping("add") // 消費端接口名稱public Object addDept(DeptDTO dto) {return this.deptService.add(dto);}@GetMapping("get")public Object get(Long deptno) {return this.deptService.get(deptno);}@GetMapping("list")public Object list() {return this.deptService.list();}@GetMapping("split")public Object split(int cp, int ls, String col, String kw) {return this.deptService.split(cp, ls, col, kw);} }

啟動類

package com.yootk.consumer;import muyan.yootk.config.ribbon.DeptProviderRibbonConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients("com.yootk.service") // Feign掃描包 public class StartConsumerApplication {public static void main(String[] args) {SpringApplication.run(StartConsumerApplication.class, args);} }

總結

以上是生活随笔為你收集整理的构建SpringCloud项目基础框架的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美一区二区三区特黄 | 免费在线观看黄网站 | 日韩理论电影在线 | 欧美一区二区日韩一区二区 | 天天干夜夜夜操天 | 激情欧美一区二区三区 | 最近2019好看的中文字幕免费 | 西西444www大胆高清图片 | 欧美做受69 | 国产精品福利在线 | 96国产在线 | 国产九九热视频 | 91精品系列| 国产高清在线a视频大全 | 日韩天堂在线观看 | 国产黄色美女 | 久久免费成人精品视频 | 最近最新中文字幕视频 | 九九热久久久 | 成人蜜桃视频 | 国产精品www | 91亚洲精品久久久蜜桃借种 | 免费a视频在线 | 国产视频在线播放 | 99久久er热在这里只有精品15 | 中文一区二区三区在线观看 | 欧美一级久久久久 | 亚洲精品动漫成人3d无尽在线 | 欧美激情h | 久久高清国产视频 | 国产黄av| 超碰在线观看99 | 胖bbbb搡bbbb擦bbbb | 免费男女羞羞的视频网站中文字幕 | 国产精品久久久久久久久久尿 | 一区视频在线 | 亚洲va男人天堂 | 成人久久久久久久久久 | 色欧美综合 | 国产精品麻豆99久久久久久 | 亚洲好视频| 亚洲精品美女久久久久 | 人人揉人人揉人人揉人人揉97 | 久草网免费 | japanese黑人亚洲人4k | 国产精品福利无圣光在线一区 | 在线视频a | 日韩特级毛片 | 国产一区麻豆 | 日韩二区精品 | 久草97| 狠狠久久综合 | 久一久久 | 久久小视频| 久久不色| 久久极品 | 中文字幕资源站 | 在线久草视频 | 天天天天综合 | 国产精品手机视频 | 91av美女| 香蕉精品视频在线观看 | 婷香五月| 亚洲精品在线观看中文字幕 | 免费看片日韩 | 欧美精品久久99 | 亚洲精品动漫久久久久 | 亚洲国产精品久久 | 欧美激情精品久久久久 | 日韩免费不卡视频 | 国产色秀视频 | 日韩精品一区二区在线 | www视频在线免费观看 | 久久精品99国产国产 | 天天爽天天爽夜夜爽 | 久久久久这里只有精品 | 五月天婷亚洲天综合网鲁鲁鲁 | 2022国产精品视频 | 日本中文字幕在线视频 | 国产成人精品在线观看 | 久久精品在线免费观看 | 99九九视频 | 亚洲最新av | 在线一区电影 | 人人射人人射 | 国产精品一区免费在线观看 | 亚洲人天堂 | 久草在线精品观看 | 久久天堂网站 | 国产免费一区二区三区网站免费 | 国产精品嫩草影院99网站 | 日韩在线小视频 | 贫乳av女优大全 | 国产91在| 天天综合色网 | 亚洲精区二区三区四区麻豆 | 不卡电影一区二区三区 | 97精品电影院| 超碰九九| 国产精品人成电影在线观看 | 日韩欧美一区二区不卡 | 国内视频一区二区 | 国产一级电影 | 成年人黄色在线观看 | 欧美一级片在线播放 | 中文字幕在线观看资源 | av电影一区二区三区 | 91免费试看 | 久久精彩 | 国产精品免费久久久久 | 看毛片网站 | 久草网首页 | 激情综合网天天干 | 女人18精品一区二区三区 | 超碰成人免费电影 | www.色的| 激情综合五月 | 国产在线观看你懂得 | 久久爱资源网 | 热久久在线视频 | 欧美日韩精品综合 | av不卡网站| 99热99re6国产在线播放 | 成人 亚洲 欧美 | 超级碰碰碰免费视频 | 91伊人影院 | 91av视频观看 | 在线国产视频观看 | 人人草在线观看 | 亚洲婷婷综合色高清在线 | 成人av免费在线播放 | 免费在线播放视频 | av综合网址 | av性网站| 精品久久久久久久久久久院品网 | 99久久婷婷国产综合亚洲 | 欧美日韩在线视频一区 | 黄色av一区 | 在线а√天堂中文官网 | 天天干天天天天 | 婷婷天天色 | 国产区免费在线 | 国产精品久久久久久久久久直播 | 久草在线免费看视频 | 欧美午夜a | 91人人人 | 婷婷黄色片 | 欧美综合干 | 久久久久久久综合色一本 | 久久人人爽人人爽人人片 | 人人插人人做 | 国产欧美在线一区 | 最近免费观看的电影完整版 | 国产精品爽爽久久久久久蜜臀 | 精品一区二区影视 | 久久黄色小说 | 久久久久久久久亚洲精品 | 一级成人在线 | 在线黄频 | 免费三级av | 久久精品免费观看 | 日韩高清精品免费观看 | 久久综合九色综合久久久精品综合 | 成人片在线播放 | 激情综合色综合久久综合 | 国产高清精 | 亚洲精品视频在线 | 午夜男人影院 | 久久黄页 | 成人免费视频网 | 日韩欧美精品在线 | 91九色免费视频 | 中文资源在线官网 | 久久你懂的 | 麻豆免费看片 | 亚洲视频axxx | av+在线播放在线播放 | 婷婷免费视频 | 五月婷婷丁香在线观看 | 久久不射电影院 | 免费视频一区 | 久久女同性恋中文字幕 | 亚洲人成网站精品片在线观看 | 色婷久久 | 国产一区二区在线观看免费 | 婷婷丁香狠狠爱 | 日韩va在线观看 | 婷婷丁香在线 | 国产精品久久久久久模特 | 天天做天天爱天天综合网 | 999久久久免费视频 午夜国产在线观看 | 激情综合啪啪 | 久久在视频 | av成人免费网站 | 最新av观看| 中文字幕在线观看一区二区三区 | 少妇视频一区 | 在线免费观看视频一区二区三区 | 日韩欧美高清不卡 | 久久精品99国产精品日本 | 久久精品5| 久久精品在线 | 国产美女精品久久久 | a级国产乱理伦片在线观看 亚洲3级 | 色婷婷啪啪免费在线电影观看 | 91精品国产高清自在线观看 | 九九热1| 91在线成人 | 日韩精品一区二区三区中文字幕 | 日韩在线不卡av | 日韩天天干 | 日日弄天天弄美女bbbb | 久久久久久国产精品免费 | 伊人伊成久久人综合网小说 | 伊人热| 天天操天天添天天吹 | 成人久久 | 国产精品资源网 | 干狠狠| 在线亚洲欧美日韩 | 亚洲精品中文字幕在线 | 久久久高清视频 | 丝袜美腿在线播放 | 久草在线观看资源 | 亚洲91中文字幕无线码三区 | 亚洲国产成人精品电影在线观看 | 欧美日韩国产精品一区二区 | 日本久久免费视频 | 中文字幕在线视频精品 | 日韩高清激情 | 91精品一区在线观看 | a成人v | 91桃色免费观看 | 午夜久久网站 | www一起操| 亚洲欧美观看 | 欧洲亚洲女同hd | 国产.精品.日韩.另类.中文.在线.播放 | 最新日韩电影 | 亚洲免费av网站 | 国产视频99 | 国产一级免费在线 | 精品久久久久久电影 | 在线免费黄色av | se婷婷| 国产黄色片一级三级 | 国产区精品 | 91在线porny国产在线看 | 色天天综合网 | 国产无套精品久久久久久 | 天天添夜夜操 | 99久热在线精品 | 免费人成在线观看网站 | 91在线看视频 | 国产成人av电影 | 亚洲精品高清在线 | 天天操天天舔天天爽 | 特级xxxxx欧美 | 久久久久电影 | 日韩精品在线播放 | 国产九九热 | www.黄色片网站 | 在线观看日本韩国电影 | 狠狠色噜噜狠狠狠 | 97人人模人人爽人人喊网 | 色久av| 国产高清在线免费视频 | 少妇自拍av | 久久色在线播放 | 亚洲va欧洲va国产va不卡 | 91麻豆网站 | 在线天堂中文在线资源网 | 探花视频在线观看+在线播放 | 91视频中文字幕 | 久久久久黄色 | 狠狠色丁香久久婷婷综合_中 | 在线观看黄色免费视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 欧美日韩一区二区三区视频 | 国产精品久久久久久久久免费看 | 国产精品黄色 | 少妇做爰k8经典 | 激情婷婷久久 | 97理论片 | 月丁香婷婷 | 日韩乱理 | 成年人黄色在线观看 | 欧美最猛性xxxxx免费 | 狠狠色丁香婷综合久久 | 99热在线国产精品 | 在线观看香蕉视频 | 国产一区在线播放 | 久草线 | 四虎永久免费 | 亚洲理论在线观看电影 | 免费看黄色毛片 | 999久久国精品免费观看网站 | 亚洲免费资源 | 久久婷婷一区二区三区 | 91香蕉视频黄色 | 亚洲一区二区视频在线 | 日韩精品国产一区 | 日韩激情一二三区 | 欧美日韩亚洲国产一区 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产91国语对白在线 | 精品国产伦一区二区三区免费 | 日日夜夜干| 日韩一区在线播放 | 日韩在线电影一区二区 | 国语精品免费视频 | 欧美视频一区二 | 色91在线视频 | 天天操福利视频 | 在线看片91 | 午夜精品久久久久久久久久久 | 国产精品久久视频 | 91久久丝袜国产露脸动漫 | www.黄色片.com | 天天天天天干 | 亚洲成色777777在线观看影院 | 国产成人免费网站 | 国产激情久久久 | 色综合久久精品 | 又爽又黄又无遮挡网站动态图 | 日韩精品在线观看视频 | 精品视频国产 | 亚洲精品ww| 香蕉成人在线视频 | 成人a视频片观看免费 | 久久毛片网 | 99视频在线观看一区三区 | 久草精品国产 | 江苏妇搡bbbb搡bbbb | 天天操天天摸天天干 | 一级α片 | 国产精品久免费的黄网站 | 最近中文字幕免费视频 | 久久艹在线 | 黄色大全免费网站 | 超碰人人做| 免费在线观看成人av | 久久精品国产精品亚洲 | 欧美九九九 | 免费看av在线 | 蜜臀精品久久久久久蜜臀 | 国产一二区在线观看 | 欧美视频www | 国产亚洲精品久久久久久久久久 | 中文字幕在线观看国产 | 国产精品毛片久久久久久久久久99999999 | 国产日韩中文在线 | 亚洲国产经典视频 | 日韩av不卡在线播放 | 激情五月亚洲 | 成年人视频在线免费播放 | 99欧美| 最近中文字幕国语免费高清6 | 这里只有精品视频在线 | 久久久国产精品麻豆 | 久久久久精 | 免费观看黄色12片一级视频 | 亚州性色| 色综合欧洲 | 狠狠色噜噜狠狠狠狠2022 | 久射网| 国产成人免费高清 | 精品999久久久 | av片子在线观看 | 九九九九热精品免费视频点播观看 | 99精品欧美一区二区蜜桃免费 | 欧美人zozo| 草莓视频在线观看免费观看 | 亚洲精品福利在线 | 黄色亚洲免费 | 国产精品精品国产色婷婷 | 日韩免费在线视频 | 国产一区二区三区免费在线观看 | 国产小视频免费观看 | 久久精品成人欧美大片古装 | 色婷婷婷 | 日本中文一区二区 | 国产精品第10页 | 麻豆免费观看视频 | 麻豆视频免费播放 | 美女性爽视频国产免费app | 久久久久久蜜桃一区二区 | 九九热精品在线 | 日韩三区在线观看 | 欧美精品v国产精品 | 国产亚洲精品精品精品 | 日韩精品中文字幕av | 黄色免费在线看 | 国产人免费人成免费视频 | 97人人网 | 91亚洲精品久久久久图片蜜桃 | 国产一区免费视频 | www黄免费 | 91av99 | 国产小视频福利在线 | 激情网站网址 | zzijzzij日本成熟少妇 | 日韩欧美高清 | 日韩精品不卡在线观看 | 国产在线高清精品 | 一区二区视频在线免费观看 | 日韩a免费 | 中文字幕在线观看视频一区二区三区 | 91亚洲狠狠婷婷综合久久久 | 天天干天天干天天干天天干天天干天天干 | 成人久久免费 | 欧美精品被 | 三级av在线 | 九七在线视频 | 日韩3区| 狠狠的干狠狠的操 | 97超碰人人澡| 天天操天天操 | 久草视频视频在线播放 | 99国产精品一区 | av成人在线电影 | 欧美日韩一区二区免费在线观看 | 日本h视频在线观看 | av免费网站观看 | 五月开心激情网 | 波多野结衣电影一区 | 91插插视频 | 亚洲欧洲日韩在线观看 | 久久视频在线 | 高清国产一区 | 国产精品99久久久久久武松影视 | 国精产品999国精产 久久久久 | 国产精品地址 | 天天色天天射天天干 | 视色网站 | 国产伦精品一区二区三区在线 | 免费a v观看 | 免费人成在线观看网站 | 精品一二三四五区 | 亚洲精品视频在线观看网站 | 激情视频区 | 97超碰在线免费 | 久久精品精品电影网 | 午夜三级在线 | 国产精品 亚洲精品 | 伊人成人久久 | 日韩特黄一级欧美毛片特黄 | 六月激情久久 | 丁香激情视频 | 亚洲天堂网在线视频 | 欧美日韩国产二区 | 久久精品中文字幕 | 夜夜操天天干 | 日韩精品一区二区在线观看 | 精品国产视频一区 | 久久99国产精品免费 | 中文字幕av免费观看 | 亚洲一区日韩精品 | 国产精品久久久久久久久久不蜜月 | 91在线你懂的 | 欧美俄罗斯性视频 | 久久精品99国产精品酒店日本 | 一级做a视频 | 精品国产一区二区三区噜噜噜 | 国产成人精品一区二三区 | 伊人激情综合 | 伊人成人精品 | 日韩色在线 | 精品久久久久久久久久 | 久久亚洲免费 | 亚洲电影网站 | 国产原创av在线 | 国产视频一区二区在线播放 | 在线亚洲欧美日韩 | 精品一区二区在线播放 | 丁香综合网 | 成人精品国产免费网站 | 婷婷av网 | 欧美成人按摩 | 最新精品视频在线 | 色av男人的天堂免费在线 | 丁香五婷 | 欧美巨乳网 | 中文字幕av全部资源www中文字幕在线观看 | 日韩亚洲国产中文字幕 | 天天曰视频| 国产伦精品一区二区三区高清 | 久久神马影院 | 免费网站色| 日韩av女优视频 | 久章草在线观看 | 三上悠亚一区二区在线观看 | 国产资源站 | 国产精品69av | 日日操天天操夜夜操 | 91精品天码美女少妇 | 91爱看片| 亚洲3级 | 精品国模一区二区三区 | 播五月婷婷 | 日日夜夜亚洲 | 99草视频| 久久这里精品视频 | 国产一级大片免费看 | 久草在线视频国产 | 人人澡人人爽欧一区 | 欧美一二三区播放 | 亚洲一区二区三区91 | 亚洲国产精品视频 | 中文电影网| 999国产| 久久久久久久久久久黄色 | 午夜在线看 | 亚洲综合欧美精品电影 | 日韩首页| 色综合狠狠干 | 久久久96| 亚洲精品视频在线观看视频 | 亚洲成人精品 | 久久久精品视频网站 | 欧美日韩国产在线一区 | 丁香婷婷综合激情五月色 | 亚洲一区二区三区在线看 | 蜜臀久久99精品久久久久久网站 | 国产黑丝一区二区三区 | 波多野结衣在线视频一区 | 成人va天堂 | 国产一区二区电影在线观看 | 九色琪琪久久综合网天天 | wwwwwww色| 久久福利小视频 | 美女黄频视频大全 | 免费在线国产视频 | 精品一区二区6 | 亚洲人人网 | 免费一级片观看 | 久久免费久久 | www.久久爱.cn | 玖玖在线精品 | 国产精品美乳一区二区免费 | 欧美伦理电影一区二区 | 91麻豆国产福利在线观看 | 2023天天干 | 日批视频在线观看免费 | 99久久精品久久久久久动态片 | 91专区在线观看 | 欧美午夜精品久久久久久浪潮 | 丝袜制服天堂 | 国产黑丝一区二区 | 月下香电影 | 国产成a人亚洲精v品在线观看 | 亚洲综合色婷婷 | 亚洲综合视频在线播放 | 国产精品第十页 | 少妇精品久久久一区二区免费 | 国产日韩精品在线观看 | 欧美日在线 | 久久免费在线观看视频 | 久久免费大片 | 国产激情电影综合在线看 | 天天色视频 | 五月综合激情婷婷 | 成人精品视频久久久久 | 99久久综合狠狠综合久久 | 精品久久久久久久久久久久久 | 中文字幕在线人 | 久久久久久综合 | 国产精品九九久久99视频 | 日韩欧美一区二区在线 | 四虎在线视频免费观看 | 色偷偷88欧美精品久久久 | 玖草在线观看 | 久久只精品99品免费久23小说 | 日本女人在线观看 | 91chinesexxx| 曰本三级在线 | 中文字幕欧美激情 | 成人免费91 | 中文字幕九九 | 色婷婷激情网 | 91精品免费在线观看 | 国产成人综合精品 | 亚洲欧洲在线视频 | 午夜国产一区二区 | 国产不卡视频在线 | 亚洲在线成人精品 | 亚洲国产三级在线 | 精品黄色在线 | 国产一二三在线视频 | 国产精品第十页 | 超碰97成人| 精品在线观看一区二区三区 | 国产在线观看国语版免费 | 免费情趣视频 | 国产精品久久久久一区二区 | 97超碰人人澡人人爱 | 色婷婷免费视频 | 色综合久久五月 | 亚洲精品合集 | 国产又粗又猛又色又黄网站 | 欧美日韩99 | 免费观看久久 | 成年人在线看片 | 狠狠干五月天 | 久久激情视频 久久 | 日批在线观看 | 国产福利精品视频 | 国产精品12 | 亚洲天堂网视频 | 亚洲a资源 | 国产精品视频最多的网站 | 亚洲激情小视频 | 成人免费看电影 | 亚洲国产激情 | 九九久久久久久久久激情 | 午夜精品一区二区三区视频免费看 | 中文字幕日本电影 | 91视频一8mav | 日韩中文字幕免费在线播放 | 婷婷丁香在线视频 | 婷婷久操| 激情综合网五月 | 日韩在线视频免费播放 | 最新av在线播放 | 日韩在线电影一区二区 | 久久免费成人 | 免费观看高清 | 久久人人爽人人爽人人 | 国产精品激情偷乱一区二区∴ | 久久久精品免费观看 | 天天干中文字幕 | 丁香婷婷综合五月 | 91成人免费视频 | 99精品视频免费观看视频 | 国内成人精品2018免费看 | 日本免费久久高清视频 | 久久99精品久久久久久 | 日韩电影在线观看一区二区 | 国产高清综合 | 色噜噜狠狠狠狠色综合 | 欧美一区二区视频97 | 久草在线最新 | 国产精品麻 | 黄色av免费 | 国产精品久久久av久久久 | 久久精品理论 | 三级a毛片 | 久久综合久久综合久久综合 | 国产日产亚洲精华av | 黄色片网站 | 精品国产成人在线影院 | 精品亚洲视频在线 | 91精品视屏 | 一级黄色片在线免费看 | 日本一区二区不卡高清 | 国产精品嫩草影视久久久 | 波多野结衣理论片 | 久久精品99国产精品亚洲最刺激 | 精品字幕| 中文字幕资源网在线观看 | 极品久久久 | 天天操天天舔天天干 | 免费视频一二三区 | 欧美久久99| 伊人看片 | 色综合久久久久 | 在线电影a | 一区二区成人国产精品 | 在线观看中文av | www178ccom视频在线 | 五月天天av| 免费在线精品视频 | 国色天香永久免费 | 99精品视频精品精品视频 | 精油按摩av| av888.com| 久久免费视频网 | 一级欧美黄 | 特黄一级毛片 | 香蕉在线影院 | 深夜国产福利 | 亚洲午夜精品电影 | 91麻豆精品国产91久久久更新时间 | 久久婷五月 | 永久免费毛片 | 天天天色 | 日韩手机在线观看 | 精品国产观看 | 久久免费视频在线 | 国产精品嫩草69影院 | av成人亚洲 | 国产精品久久久久久爽爽爽 | 91男人影院| 亚洲天堂网在线视频观看 | 国产一级久久久 | 成人av一区二区三区 | 免费一级黄色 | 亚洲黄色三级 | 国精产品一二三线999 | 色九九影院 | 国产字幕在线观看 | 久久观看免费视频 | 91精品视频播放 | 亚洲一二三久久 | 99精品国产高清在线观看 | 国产精品 999| 91麻豆福利| 欧洲激情在线 | 国产高清 不卡 | 成人国产精品久久久久久亚洲 | 99免费在线播放99久久免费 | 国产精品久久久久久一二三四五 | 亚洲午夜剧场 | 亚洲精品乱码久久久久久写真 | 久久国产品 | 国内视频在线 | 特黄色大片 | 九九色网 | 国产护士在线 | 天天操天天操天天操天天操天天操 | 中文字幕免费观看视频 | 成人毛片a | 免费a级观看| 中文字幕精品www乱入免费视频 | 日韩一区精品 | 在线小视频| 午夜影视剧场 | 激情五月色播五月 | 国产日本在线播放 | 久久躁日日躁aaaaxxxx | 亚洲国产97在线精品一区 | 日韩精品视频在线观看网址 | 亚洲伦理精品 | 国产一区二区三区久久久 | 精品国内自产拍在线观看视频 | 91精品婷婷国产综合久久蝌蚪 | 91网页版在线观看 | 国产精品乱码久久久久 | 亚洲黄色免费电影 | 日韩在线第一 | 国产精品久久av | 99视频在线免费播放 | 色中色亚洲| 探花视频在线观看免费 | 久久99精品久久久久久秒播蜜臀 | 亚洲成a人片77777kkkk1在线观看 | ww视频在线观看 | 91在线视频精品 | 在线视频日韩一区 | 欧美日韩精 | 欧美va电影| 97成人精品 | 国产精品影音先锋 | 免费看色网站 | 婷婷激情综合 | 亚洲最大av网站 | 久久久亚洲电影 | 97精品国自产拍在线观看 | 正在播放亚洲精品 | 久久精品一区二区国产 | 四虎成人精品永久免费av | 夜夜干天天操 | 欧美性视频网站 | 国产色视频网站 | 免费麻豆 | 五月婷婷六月丁香 | 精品国产诱惑 | 国产女教师精品久久av | 亚洲综合色婷婷 | 国产高清中文字幕 | 免费看久久久 | 亚洲综合最新在线 | 国产一区 在线播放 | 少妇bbb | 99久久成人 | 国产精品九九久久久久久久 | 国产精品69av | 久草香蕉在线视频 | 国产在线中文字幕 | 国产原厂视频在线观看 | 日本中文字幕在线免费观看 | 麻豆影视网站 | 午夜精品区 | 国产糖心vlog在线观看 | 国产精品不卡在线播放 | 手机av在线免费观看 | 国产无遮挡又黄又爽馒头漫画 | 狠狠色噜噜狠狠狠 | 国产精品mv在线观看 | 国产精品视频在线看 | 日韩精品免费一区 | 国产黄在线 | 一级一级一片免费 | 国内小视频在线观看 | 亚洲男模gay裸体gay | 中文字幕二区 | 69久久久| 国产在线永久 | 丝袜少妇在线 | 超碰在线cao | 国产成人精品一区二区三区福利 | 日日摸日日添夜夜爽97 | 99九九视频 | 久久久久国产成人精品亚洲午夜 | 夜夜骑首页 | 欧美精品资源 | 色综合中文字幕 | 亚洲精品www久久久 www国产精品com | free,性欧美 九九交易行官网 | 在线国产一区二区三区 | 69久久久久久久 | 五月激情丁香婷婷 | 成人欧美日韩国产 | 在线视频中文字幕一区 | 色网站在线免费 | 国产美女视频一区 | 少妇18xxxx性xxxx片 | 在线免费高清视频 | 国产日韩视频在线 | 久久麻豆视频 | 精品一区二三区 | www狠狠 | 伊人资源站 | 91精品啪在线观看国产81旧版 | 久久精品美女视频 | 久久免费视频2 | 成人久久久久久久久久 | 狠狠色噜噜狠狠狠狠 | 蜜臀av性久久久久av蜜臀妖精 | 国产无吗一区二区三区在线欢 | 亚洲国产丝袜在线观看 | 探花视频在线观看免费版 | 国产精品h在线观看 | 国产小视频免费在线网址 | 国产日韩视频在线 | 国产黄色视 | 欧美一区,二区 | 四虎在线影视 | 香蕉在线播放 | 国产精品高潮久久av | 中国美女一级看片 | 欧美日韩中文字幕在线视频 | 国产裸体无遮挡 | 91久久黄色 | 久久免费av电影 | 黄色精品一区二区 | 国产亚洲精品久久网站 | 黄色软件在线观看免费 | 天天操夜夜逼 | 偷拍福利视频一区二区三区 | 久久午夜电影 | 又大又硬又黄又爽视频在线观看 | 天天爱天天操天天射 | 久久久久黄 | 亚洲国产中文在线观看 | 国产高清精品在线 | 国产精品久久中文字幕 | 国产精品人成电影在线观看 | 国产日韩欧美精品在线观看 | 91桃色国产在线播放 | 天天干人人| 在线观看一区视频 | 国产91成人 | 精品在线亚洲视频 | 国产免费xvideos视频入口 | 国产成人l区 | 日韩一区在线播放 | 成人免费在线观看电影 | 亚洲视频在线观看免费 | 97视频免费观看 | 国产在线国偷精品产拍 | 超碰精品在线观看 | 伊人导航| 久久精品国产v日韩v亚洲 | 成人黄色免费在线观看 | 成+人+色综合| 成人国产一区 | 国产91在线免费视频 | 国产一区二区三区高清播放 | 欧美激情精品久久 | 综合黄色网 | 中文字幕中文字幕在线中文字幕三区 | 在线中文字幕一区二区 | 欧美国产日韩一区二区三区 | 三级黄色欧美 | 深爱激情av | 日韩大片在线观看 | 欧美午夜视频在线 | 国产经典三级 | 国内精品久久久 | 中文字幕视频网 | 91大神在线看 | 亚洲九九影院 | 99热只有精品在线观看 | 日日爽天天爽 | www久久久 | 日韩一区二区免费在线观看 | 韩日三级在线 | 手机看片国产 | 国产精品av免费 | 日韩精品不卡在线观看 | 国产999精品久久久 免费a网站 | 日批视频国产 | 国产黄色大片免费看 | 婷婷丁香在线 | 成人免费观看网址 | 亚洲精品免费在线观看视频 | 99精品视频免费全部在线 | 天天摸日日摸人人看 | www视频在线观看 | 天天曰天天干 | 国产不卡在线播放 | 人人射人人爽 | 日韩伦理片一区二区三区 | 蜜臀精品久久久久久蜜臀 | 国产玖玖视频 | 免费一级片观看 | 久久久鲁 | 毛片久久久 | 国产亚洲视频在线观看 | 国产麻豆传媒 | 日韩av福利在线 | 四虎在线观看视频 | 激情影院在线观看 | 亚洲乱码国产乱码精品天美传媒 | 日本爱爱片| 国产 日韩 在线 亚洲 字幕 中文 | 91福利在线导航 | 亚洲精品观看 | 午夜精品视频福利 | 在线视频 日韩 | 99免费看片| 欧美精品一区二区蜜臀亚洲 | 成人午夜毛片 | 久久婷婷精品 | 婷色在线 | 日韩欧美69 | 91完整版在线观看 | 少妇高潮冒白浆 | 麻豆久久久久 | 国产一区高清在线观看 | 黄色毛片在线观看 | 日日夜夜噜噜噜 | 欧美色婷婷 | 在线观看视频在线观看 | 激情综合色综合久久综合 | 97超碰人人模人人人爽人人爱 | 欧美日韩精品在线视频 | 菠萝菠萝在线精品视频 | 日韩av成人在线观看 | 欧美在线视频不卡 | 国产99区| 婷婷精品在线 | 欧洲精品码一区二区三区免费看 | 天天操夜夜拍 | 国产视频九色蝌蚪 | 免费看片网址 | 波多野结衣电影久久 | 综合影视 | 91一区啪爱嗯打偷拍欧美 | 免费看十八岁美女 | 久久久久综合 | 午夜视频在线观看一区二区三区 | 超碰在线97免费 | 国产在线国偷精品产拍 | 日本中文字幕网址 | 在线午夜电影神马影院 | 国产网红在线观看 | 美女久久一区 | 一区二区三区免费播放 | 波多野结衣资源 | 中日韩欧美精彩视频 | 国产亚洲精品精品精品 | 久久久久亚洲精品男人的天堂 | 欧美久久九九 | 91大神精品视频在线观看 | 亚洲乱码精品 | 国产专区日韩专区 | 丰满少妇久久久 | 久久伊人色综合 | 一区二区视频在线观看免费 | 免费高清在线观看电视网站 | 亚洲黄色高清 | 国产成人av电影在线 | 国产精品久久久久久久久久久久久久 | 久久免费看毛片 | 美女网站视频免费黄 | 99久久婷婷国产精品综合 | 97超碰资源总站 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩网站中文字幕 | 久久人人干| 在线观看av小说 | 日韩电影在线观看一区二区 | 久久99亚洲网美利坚合众国 | 一区在线播放 | 国产精品久久久久影院日本 | 国产午夜激情视频 |