欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud Gateway網(wǎng)關(guān)功能介紹與使用

 更新時間:2022年12月09日 11:46:00   作者:幽默涵養(yǎng)miss u  
SpringCloud Gateway 是 Spring Cloud 的一個全新項目,它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway網(wǎng)關(guān)作用,需要的朋友可以參考下

一、什么是API網(wǎng)關(guān)

API網(wǎng)關(guān)作用就是把各個服務(wù)對外提供的API匯聚起來,讓外界看起來是一個統(tǒng)一的接口。同時也可在網(wǎng)關(guān)中提供額外的功能。

總結(jié):網(wǎng)關(guān)就是所有項目的一個統(tǒng)一入口。

二、基本使用

1.準(zhǔn)備Eureka注冊中心

2.準(zhǔn)備一個微服務(wù)工程

3.搭建Gateway網(wǎng)關(guān)微服務(wù)

(1)導(dǎo)入依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

(2)編寫配置文件

server:
  port: 9999
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
# 自動發(fā)現(xiàn)工具的本地路由規(guī)則是:
# 請求路徑 - http://網(wǎng)關(guān)IP:網(wǎng)關(guān)端口/微服務(wù)的服務(wù)名/要訪問的具體地址
# gateway自動解析,把請求地址中的'微服務(wù)的服務(wù)名'截取,從Eureka Client發(fā)現(xiàn)的服務(wù)列表中查看,如果有同名服務(wù),則開始轉(zhuǎn)發(fā)。
spring:
  application:
    name: cloud-gateway
  cloud: # spring cloud相關(guān)配置的常用前綴
    gateway: # 網(wǎng)關(guān)技術(shù)配置前綴
      discovery: # 自動發(fā)現(xiàn)工具
        locator: # 本地邏輯
          enabled: true # 開啟自動發(fā)現(xiàn)工具的本地路由邏輯
          lower-case-service-id: true # 把從EurekaServer上發(fā)現(xiàn)的服務(wù)名稱,轉(zhuǎn)換成全小寫

(3)編寫啟動類

@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }
}

三、謂詞

謂詞:當(dāng)滿足條件在進(jìn)行路由轉(zhuǎn)發(fā)。

在Spring Cloud Gateway中謂詞實現(xiàn)GatewayPredicate接口。其中類名符合:XXXRoutePredicateFactory,其中XXX就是在配置文件中謂詞名稱。

所有的謂詞都設(shè)置在predicates屬性中,當(dāng)設(shè)置多個謂詞時取邏輯與條件,且一個謂詞只能設(shè)置一組條件,如果需要有個多條件,添加多個相同謂詞。

(1)Path

用于匹配路由地址規(guī)則的謂詞。

spring:
  application:
    name: cloud-gateway
  cloud: 
    gateway:
      discovery:
        locator:
          enabled: false # 關(guān)閉自動發(fā)現(xiàn)工具的本地路由邏輯
          lower-case-service-id: true 
      routes:  # 配置多路由策略的屬性,類型是List。配置方案是:回車 + 縮進(jìn) + - + 空格。集合中的每個對象的屬性,對齊多行配置
        - id: application-service # 路由的唯一名稱
          uri: lb://application-service # 規(guī)則滿足后,轉(zhuǎn)發(fā)到的地址。lb是spring cloud gateway支持的一種協(xié)議名
          predicates: # 謂詞
            - Path=/service/**  # 路由地址規(guī)則
          filters:  # 過濾器,先使用,后續(xù)課程細(xì)致講解。后續(xù)案例配置統(tǒng)一,文檔中省略
            - StripPrefix=1

(2)Query

用于校驗請求中是否包含指定的請求參數(shù),同時可也校驗請求參數(shù)值是否符合要求。

- id: application-service
  uri: lb://application-service 
  predicates: # 謂詞
    - Path=/service/**  
    - Query=name # 請求參數(shù)必須包含name

下述配置代表,請求中必須包含命名為name和age的參數(shù),且參數(shù)值必須已'bjsxt'開頭。下述配置中bjsxt.*是一個正則表達(dá)式。在正則表達(dá)式中點(.)表示匹配任意一個字符。所以當(dāng)請求參數(shù)name=bjsxt或name=bjsxtAdmin等都能滿足謂詞條件。

如果設(shè)定請求中必須包含多個參數(shù)及值。則設(shè)置多個Query。在此處演示多個相同謂詞配置,其他謂詞中就不在強調(diào)如何配置多個謂詞。

- id: application-service 
  uri: lb://application-service 
  predicates:
    - Path=/service/**  
    - Query=name,bjsxt.* # 請求參數(shù)必須包含name,請求參數(shù)的值必須以 bjsxt 開頭
    - Query=age # 請求參數(shù)必須包含age

(3)Header

用于校驗請求中是否包含指定的請求頭,同時可也校驗請求頭數(shù)值是否符合要求。配置方式和Query類似。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/**  
    - Query=name,bjsxt.* 
    - Query=age
    - Header=Host,.* # 請求頭必須有Host,值為任意字符串

(4)Method

Method表示請求方式。支持多個值,使用逗號分隔,多個值之間為or條件。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - Method=GET,POST # 請求方式必須是GET或POST

(5)RemoteAddr

允許訪問的客戶端地址。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - RemoteAddr=192.168.41.252 # 客戶端IP必須是192.168.41.252

(6)Host

匹配請求中Host請求頭的值。滿足Ant模式(之前在Spring Security中學(xué)習(xí)過)可以使用:

  • ? 匹配一個字符
  • * 匹配0個或多個字符
  • ** 匹配0個或多個目錄

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - Host=127.0.0.1:9999 # 請求頭Host值必須是127.0.0.1:9999

(7)Cookie

要求請求中包含指定Cookie名和滿足特定正則要求的值。

Cookie必須有兩個值,第一個Cookie包含的參數(shù)名,第二個表示參數(shù)對應(yīng)的值,正則表達(dá)式。不支持一個參數(shù)寫法。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - Cookie=name,bjsxt.* # 請求必須包含名稱是name,值符合bjsxt開頭的cookie。

(8)Before

在指定時間點之前。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - Before=2022-10-01T18:00:00.000+08:00[Asia/Shanghai] # 2022-10-01晚18點前可以訪問

(9)After

在指定時間點之后。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - After=2020-10-01T08:00:00.000+08:00[Asia/Shanghai] # 2020-10-01早8點后可以訪問

(10)Between

請求時必須在設(shè)定的時間范圍內(nèi),才進(jìn)行路由轉(zhuǎn)發(fā)。

- id: application-service
  uri: lb://application-service
  predicates:
    - Path=/service/** 
    - Between=2020-10-01T08:00:00.000+08:00[Asia/Shanghai],2022-10-01T18:00:00.000+08:00[Asia/Shanghai] # 2020-10-01早8點后,2022-10-01晚18點前可以訪問

(11)Weight

多版本服務(wù)發(fā)布的時候,偶爾使用。

如v1.0+v1.1兩個版本同時發(fā)布服務(wù)。內(nèi)容一致,實現(xiàn)機制不同。發(fā)布兩個不同命名的服務(wù)集群。使用Gateway做負(fù)載均衡并設(shè)置權(quán)重。 ? 代表同一個組中URI進(jìn)行負(fù)載均衡。語法:Weight=組名,負(fù)載均衡權(quán)重 ? 在Eureka中注冊兩個服務(wù),這個服務(wù)(項目)是相同的,應(yīng)用程序名分別叫做application-service1和application-service2。 ? Gateway在路由匹配時application-service1將占20%,application-service2將占80%。

- id: application-service1
  uri: lb://application-service1
  predicates:
    - Path=/service/**
    - Weight=group1,2
- id: application-service2
  uri: lb://application-service2
  predicates:
    - Path=/service/**
    - Weight=group1,8

四、過濾器-Filter

在路由轉(zhuǎn)發(fā)到代理服務(wù)之前和代理服務(wù)返回結(jié)果之后額外做的事情。Filter是在路由轉(zhuǎn)發(fā)之后,被代理的服務(wù)執(zhí)行前后運行的。只要Filter執(zhí)行了,說一定滿足了謂詞條件。 ? 在Spring Cloud Gateway的路由中Filter分為:

  • 路由過濾器:框架內(nèi)置的Filter實現(xiàn)都是路由過濾器,都是GatewayFilter實現(xiàn)類型。本章節(jié)所有案例都是路由過濾器。
  • 全局過濾器:框架未內(nèi)置全局過濾器實現(xiàn),需自定義。全局過濾器需實現(xiàn)接口GlobalFilter。

(1)StripPrefix

跳過路由uri中前幾段后發(fā)送給下游。

spring:
  application:
    name: cloud-gateway
  cloud: 
    gateway:
      discovery:
        locator:
          enabled: false
          lower-case-service-id: true 
      routes:  
        - id: application-service 
          uri: lb://application-service
          predicates: 
            - Path=/service/**  
          filters:  # 過濾器
            - StripPrefix=1 # 跳過路由uri中前1段后發(fā)送給下游。

(2)AddRequestHeader

添加請求頭參數(shù),參數(shù)名和值之間使用逗號分隔。

filters:
  - StripPrefix=1
  - AddRequestHeader=company,bjsxt

(3)AddRequestParameter

添加請求表單參數(shù),多個參數(shù)需要有多個過濾器。

filters:
  - StripPrefix=1
  - AddRequestParameter=name,bjsxt
  - AddRequestParameter=age,18

(4)AddResponseHeader

添加響應(yīng)頭。

filters:
  - StripPrefix=1
  - AddResponseHeader=company,bjsxt··

(5)DedupeResponseHeader

對指定響應(yīng)頭去重復(fù)。配置語法:DedupeResponseHeader=響應(yīng)頭參數(shù) 或 DedupeResponseHeader=響應(yīng)頭參數(shù),strategy。

  • 去重策略strategy可選值:
  • RETAIN_FIRST :默認(rèn)值,保留第一個
  • RETAIN_LAST 保留最后一個

RETAIN_UNIQUE 保留唯一的,出現(xiàn)重復(fù)的屬性值,會保留一個。例如有兩個My:bbb的屬性,最后會只留一個。

filters:
  - StripPrefix=1
  - DedupeResponseHeader=MyHeader,RETAIN_UNIQUE 

(6)CircuitBreaker

實現(xiàn)熔斷時使用,支持CircuitBreaker和Hystrix兩種。

(7)FallbackHeaders

可以添加降級時的異常信息。

(8)PrefixPath

給符合規(guī)則替換后的URI地址添加統(tǒng)一的前綴地址。

(9)RequestRateLimiter

限流過濾器。

(10)RedirectTo

重定向。有兩個參數(shù),status和url。其中status應(yīng)該300系列重定向狀態(tài)碼。

(11)RemoveRequestHeader

刪除請求頭參數(shù)。

(12)RemoveResponseHeader

刪除響應(yīng)頭參數(shù)。

(13)RemoveRequestParameter

刪除請求參數(shù)。

(14)RewritePath

重寫請求路徑。

(15)RewriteResponseHeader

重寫響應(yīng)頭參數(shù)。

(16)SaveSession

如果項目中使用Spring Security和Spring Session整合時,此屬性特別重要。

(17)SecureHeaders

具有權(quán)限驗證時,建議的頭信息內(nèi)容。

(18)SetPath

功能和StripPrefix有點類似。語法更貼近restful。

- id: setpath_route 
  uri: https://example.org 
  predicates: 
    - Path=/api/{segment} 
  filters: 
    - SetPath=/{segment}

(19)SetRequestHeader

替換請求參數(shù)頭數(shù)。不是添加。

(20)SetResponseHeader

替換響應(yīng)頭參數(shù)。

(21)SetStatus

設(shè)置響應(yīng)狀態(tài)碼。

(22)Retry

設(shè)置重試次數(shù)。

(23)RequestSize

請求最大大小。包含maxSize參數(shù),單位包括“KB”或“MB”等。默認(rèn)為“B”。

(24)ModifyRequestBody

修改請求體內(nèi)容。

(25)ModifyResponseBody

修改響應(yīng)體

五、使用Gateway實現(xiàn)限流

令牌桶算法

令牌桶算法可以說是對漏桶算法的一種改進(jìn)。

在桶中放令牌,請求獲取令牌后才能繼續(xù)執(zhí)行。如果桶中沒有令牌,請求可以選擇進(jìn)行等待或者直接拒絕。

由于桶中令牌是按照一定速率放置的,所以可以一定程度解決突發(fā)訪問。如果桶中令牌最多有100個,QPS最大為100。

(1)導(dǎo)入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

(2)新建Key解析器

/**
 * 限流過濾器配置必要的類型。
 * 令牌桶算法中令牌工廠的組件之一,用于生成一個個與客戶端對應(yīng)的令牌key。 提供一個能對應(yīng)客戶端的數(shù)據(jù)。
 * 如:IP,用戶登錄名等。
 *
 * 當(dāng)前類型對象,需要Spring容器管理。
 */
@Component
public class MyKeyResolver implements KeyResolver {
    @Override
    public Mono<String> resolve(ServerWebExchange exchange) {
        String ip = exchange.getRequest() // 獲取請求對象
                .getRemoteAddress() // 獲取客戶端地址對象 InetSocketAddress
                .getAddress() // 獲取客戶端地址對象 InetAddress
                .getHostAddress(); // 獲取客戶端的主機地址(IP或唯一的主機名)
        return Mono.just(ip); // 創(chuàng)建返回結(jié)果對象
    }
}

(3)編寫配置文件

server:
  port: 9999
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: cloud-gateway
  cloud: 
    gateway: 
      discovery: 
        locator: 
          enabled: false 
          lower-case-service-id: true
      routes:
        - id: rateLimiter
          uri: lb://application-service
          predicates:
            - Path=/limiter/**
          filters:
            - StripPrefix=1
            - name: RequestRateLimiter
              args:
                keyResolver: '#{@myKeyResolver}' # 表達(dá)式, #{} 從容器找對象, @beanId
                # redis-rate-limiter是用于做令牌校驗,和令牌生成的類型。gateway框架提供了基于Redis的實現(xiàn)。
                redis-rate-limiter.replenishRate: 1 # 每秒令牌生成速率
                redis-rate-limiter.burstCapacity: 2 # 令牌桶容量上限

六、使用Gateway實現(xiàn)服務(wù)降級

(1)導(dǎo)入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

(2)編輯降級邏輯控制器

/**
 * 服務(wù)降級控制器
 */
@Controller
public class FallbackController {
    /**
     * 服務(wù)降級處理方法。
     * 當(dāng)通過gateway轉(zhuǎn)發(fā)請求的服務(wù),不可用時,當(dāng)前方法執(zhí)行。返回降級數(shù)據(jù)。
     * @return
     */
    @RequestMapping(value = "/fallback", produces = {"text/html; charset=UTF-8"})
    @ResponseBody
    public String fallback(){
        return "<div style='color:red; text-align: center'>服務(wù)器忙,請稍后重試!</div>";
    }
}

(3)配置文件

- id: hystrix
  uri: lb://application-service
  predicates:
    - Path=/hystrix/**
  filters:
    - StripPrefix=1
    - name: Hystrix
      args:
    name: fallback # 隨意定義的名稱。相當(dāng)于@HystrixCommand注解中的commandKey屬性。
    fallbackUri: forward:/fallback # 如果轉(zhuǎn)發(fā)的服務(wù)不可用,請求轉(zhuǎn)發(fā)到當(dāng)前系統(tǒng)的哪一個路徑上。

七、自定義全局過濾器

編輯全局過濾器

/**
 * 自定義全局過濾器。
 * 必須實現(xiàn)接口GlobalFilter
 * 當(dāng)前類型的對象,必須被spring容器管理。
 * 無須配置,所有路由都生效。
 *
 * 執(zhí)行順序:
 *  先執(zhí)行網(wǎng)關(guān)過濾器,后執(zhí)行全局過濾器
 *  多個全局過濾器,執(zhí)行順序由Spring boot掃描管理當(dāng)前對象的順序決定。
 *  每個過濾器,都是完整執(zhí)行后,才執(zhí)行下一個過濾器。
 */
@Component
public class MyGlobalFilter implements GlobalFilter {
    /**
     * 過濾方法。
     * 實現(xiàn)上,只有唯一的要求。必須調(diào)用方法chain.filter(exchange),并把方法的返回值,返回。
     * @param exchange
     * @param chain
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("前置全局過濾");
        Mono<Void> result = chain.filter(exchange);
        System.out.println("后置全局過濾");
        return result;
    }
}

八、自定義路由過濾器

定義針對于Router的Filter。必須經(jīng)由配置才能生效。 注意:

  • 類名必須定義為XxxGatewayFilterFactory。注入到Spring容器后使用時的名稱就叫做xxx。
  • 類建議繼承AbstractGatewayFilterFactory。如果不繼承,則必須實現(xiàn)接口GatewayFilterFactory,這種方式開發(fā)成本高。
  • 所有需要傳遞進(jìn)來的參數(shù)都配置到當(dāng)前類的靜態(tài)內(nèi)部類Config中。

(1)編輯路由過濾器

/**
 * 自定義網(wǎng)關(guān)過濾器(路由過濾器),必須經(jīng)過配置使用才能生效的過濾器。
 * 要求當(dāng)前類型的對象必須被spring容器管理。
 * 要求必須實現(xiàn)接口 GatewayFilterFactory, 建議繼承AbstractGatewayFilterFactory
 *
 * 多個網(wǎng)關(guān)過濾器執(zhí)行順序:
 *  按照配置文件中,過濾器的配置順序,依次運行。每個過濾器完整運行結(jié)束后,執(zhí)行下一個過濾規(guī)則。
 */
@Component
public class LoggerFilterGatewayFilterFactory
            extends AbstractGatewayFilterFactory<LoggerFilterGatewayFilterFactory.Config> {
    /**
     * 建議提供2個構(gòu)造方法。一個無參數(shù)。一個有參數(shù),參數(shù)類型就是當(dāng)前類型中的Config靜態(tài)內(nèi)部類的類對象類型。
     * 父類型,可以幫助解析配置文件,并創(chuàng)建Config對象。
     */
    public LoggerFilterGatewayFilterFactory(){
        this(Config.class);
    }
    public LoggerFilterGatewayFilterFactory(Class<Config> configClass){
        super(configClass);
    }
    /**
     * 如果需要簡化配置方案。提供方法shortcutFieldOrder
     * 有當(dāng)前方法,配置文件使用,可以簡化配置為    LoggerFilter=abc
     * 沒有當(dāng)前方法,配置文件完整編寫,內(nèi)容是:
     *   name: LoggerFilter
     *   args:
     *     remark: abc
     */
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("remark");
    }
    /**
     * 創(chuàng)建網(wǎng)關(guān)過濾器的方法。
     * @param config 就是配置文件中的內(nèi)容,就是當(dāng)前類型中的靜態(tài)內(nèi)部類對象。
     * @return 一般使用匿名內(nèi)部類,創(chuàng)建GatewayFilter接口的實現(xiàn)對象。
     */
    @Override
    public GatewayFilter apply(Config config) {
        return new GatewayFilter() {
            /**
             * 過濾方法。要求必須調(diào)用chain.filter(exchange),并返回方法的返回結(jié)果
             * @param exchange
             * @param chain
             * @return
             */
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                System.out.println("前置 - 日志過濾器 - config.remark = " + config.getRemark());
                Mono<Void> result = chain.filter(exchange);
                System.out.println("后置 - 日志過濾器 - config.remark = " + config.getRemark());
                return result;
            }
        };
    }
    /**
     * 定義靜態(tài)內(nèi)部類,作為配置對象
     * 定義的每個屬性,都是用于在配置文件中配置的對應(yīng)屬性。
     * 必須提供getter和setter方法。
     */
    public static class Config{
        private String remark;
        public String getRemark() {
            return remark;
        }
        public void setRemark(String remark) {
            this.remark = remark;
        }
    }
}

(2)編輯配置文件

- id: logger
  uri: lb://application-service
  predicates:
    - Path=/logger/**
  filters:
    - StripPrefix=1
    - LoggerFilter=simpleTestGatewayFilter
    - name: LoggerFilter
        args:
          remark: fullyTestGatewayFilter

到此這篇關(guān)于SpringCloud Gateway網(wǎng)關(guān)功能介紹與使用的文章就介紹到這了,更多相關(guān)SpringCloud Gateway內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java網(wǎng)絡(luò)編程UDP實現(xiàn)多線程在線聊天

    Java網(wǎng)絡(luò)編程UDP實現(xiàn)多線程在線聊天

    這篇文章主要為大家詳細(xì)介紹了Java網(wǎng)絡(luò)編程UDP實現(xiàn)多線程在線聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java 面試題基礎(chǔ)知識集錦

    Java 面試題基礎(chǔ)知識集錦

    本文主要介紹Java基礎(chǔ)面試題集錦,這里整理了面試java工程師的基礎(chǔ)知識題錦,有需要的小伙伴可以參考下
    2016-09-09
  • springboot各種格式轉(zhuǎn)pdf的實例代碼

    springboot各種格式轉(zhuǎn)pdf的實例代碼

    這篇文章主要介紹了springboot各種格式轉(zhuǎn)pdf的實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 如何使用Java統(tǒng)計gitlab代碼行數(shù)

    如何使用Java統(tǒng)計gitlab代碼行數(shù)

    這篇文章主要介紹了如何使用Java統(tǒng)計gitlab代碼行數(shù),實現(xiàn)方式通過git腳本將所有的項目拉下來并然后通過進(jìn)行代碼行數(shù)的統(tǒng)計,需要的朋友可以參考下
    2023-10-10
  • Java模擬多線程實現(xiàn)搶票代碼實例

    Java模擬多線程實現(xiàn)搶票代碼實例

    這篇文章主要介紹了Java模擬多線程實現(xiàn)搶票,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • java實現(xiàn)文件夾上傳功能實例代碼(SpringBoot框架)

    java實現(xiàn)文件夾上傳功能實例代碼(SpringBoot框架)

    在web項目中上傳文件夾現(xiàn)在已經(jīng)成為了一個主流的需求,下面這篇文章主要給大家介紹了關(guān)于java實現(xiàn)文件夾上傳功能(springBoot框架)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 使用Mybatis對數(shù)據(jù)庫進(jìn)行單表操作的實現(xiàn)示例

    使用Mybatis對數(shù)據(jù)庫進(jìn)行單表操作的實現(xiàn)示例

    這篇文章主要介紹了使用Mybatis對數(shù)據(jù)庫進(jìn)行單表操作的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mybatis如何獲取剛剛新插入數(shù)據(jù)的主鍵值id

    mybatis如何獲取剛剛新插入數(shù)據(jù)的主鍵值id

    這篇文章主要介紹了mybatis如何獲取剛剛新插入數(shù)據(jù)的主鍵值id問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot?Web請求響應(yīng)詳細(xì)代碼示例

    SpringBoot?Web請求響應(yīng)詳細(xì)代碼示例

    在Web開發(fā)中請求和響應(yīng)是必不可少的環(huán)節(jié),Spring Boot Web應(yīng)用中請求響應(yīng)的分層解耦是構(gòu)建高效、可維護(hù)系統(tǒng)的關(guān)鍵實踐,下面這篇文章主要介紹了SpringBoot?Web請求響應(yīng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Java中方法名稱和泛型相同的用法示例

    Java中方法名稱和泛型相同的用法示例

    這篇文章主要介紹了Java中方法名稱和泛型相同的用法,結(jié)合實例形式分析了泛型替代方法名稱的相關(guān)使用技巧,需要的朋友可以參考下
    2019-08-08

最新評論