亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot數(shù)據(jù)庫(kù)查詢超時(shí)配置詳解

 更新時(shí)間:2024年11月25日 10:56:59   作者:CC大煊  
這篇文章主要介紹了SpringBoot數(shù)據(jù)庫(kù)查詢超時(shí)配置,超時(shí)配置可以避免長(zhǎng)時(shí)間占用數(shù)據(jù)庫(kù)連接,提高系統(tǒng)的響應(yīng)速度和吞吐量,還可以快速的反饋可以提升用戶體驗(yàn),避免用戶因長(zhǎng)時(shí)間等待而感到挫敗,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下

1. 簡(jiǎn)介

1.1 介紹數(shù)據(jù)庫(kù)超時(shí)配置的重要性

  • 系統(tǒng)性能:超時(shí)配置可以避免長(zhǎng)時(shí)間占用數(shù)據(jù)庫(kù)連接,提高系統(tǒng)的響應(yīng)速度和吞吐量。
  • 資源優(yōu)化:合理的超時(shí)設(shè)置幫助優(yōu)化數(shù)據(jù)庫(kù)資源的使用,防止資源長(zhǎng)時(shí)間被無(wú)效查詢占用。
  • 系統(tǒng)穩(wěn)定性:通過(guò)避免長(zhǎng)時(shí)間的數(shù)據(jù)庫(kù)操作,可以減少系統(tǒng)崩潰和性能瓶頸的風(fēng)險(xiǎn)。
  • 用戶體驗(yàn):快速的反饋可以提升用戶體驗(yàn),避免用戶因長(zhǎng)時(shí)間等待而感到挫敗。

1.2 概述Spring Boot在數(shù)據(jù)庫(kù)連接中的應(yīng)用

  • 自動(dòng)配置:Spring Boot通過(guò)自動(dòng)配置簡(jiǎn)化了數(shù)據(jù)庫(kù)連接的設(shè)置,開(kāi)發(fā)者只需少量配置即可啟動(dòng)和運(yùn)行。
  • 支持多種數(shù)據(jù)庫(kù)連接池:Spring Boot支持多種連接池技術(shù),如HikariCP、Tomcat JDBC Pool、Druid等,這些都可以通過(guò)簡(jiǎn)單的配置進(jìn)行集成。
  • 靈活性和擴(kuò)展性:Spring Boot提供了多種配置選項(xiàng),允許開(kāi)發(fā)者根據(jù)具體需求調(diào)整數(shù)據(jù)庫(kù)連接的各種參數(shù)。

可以將數(shù)據(jù)庫(kù)連接想象成餐廳中的座位。如果顧客(數(shù)據(jù)請(qǐng)求)占用座位時(shí)間過(guò)長(zhǎng),將導(dǎo)致其他顧客等待時(shí)間增加,影響餐廳(系統(tǒng))的整體服務(wù)效率和顧客滿意度。

2. 配置文件層面處理超時(shí)

2.1 Spring Boot數(shù)據(jù)庫(kù)連接的基本配置

Spring Boot通過(guò)簡(jiǎn)化配置,使得連接數(shù)據(jù)庫(kù)變得非常容易。您可以從介紹如何在Spring Boot中通過(guò)application.propertiesapplication.yml文件配置數(shù)據(jù)源開(kāi)始。以下是一個(gè)基本的配置示例:

# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

解釋每個(gè)屬性的作用:

  • spring.datasource.url:數(shù)據(jù)庫(kù)的URL連接字符串。
  • spring.datasource.username 和 spring.datasource.password:數(shù)據(jù)庫(kù)的登錄用戶名和密碼。
  • spring.datasource.driver-class-name:JDBC驅(qū)動(dòng)的全限定名,這里使用的是MySQL的驅(qū)動(dòng)。

2.2 常用的數(shù)據(jù)庫(kù)連接池

數(shù)據(jù)庫(kù)連接池是提高數(shù)據(jù)庫(kù)操作效率的關(guān)鍵組件。在Spring Boot中,可以輕松集成多種數(shù)據(jù)庫(kù)連接池。以下是最常見(jiàn)的連接池配置方法:

HikariCP

HikariCP是Spring Boot 2.x默認(rèn)的數(shù)據(jù)庫(kù)連接池,以其性能和簡(jiǎn)潔性著稱。配置HikariCP的基本參數(shù)如下:

# application.properties
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.maximum-pool-size=10

解釋參數(shù):

  • connection-timeout:等待來(lái)自池的連接的最大毫秒數(shù)。
  • maximum-pool-size:連接池中允許的最大連接數(shù)。

如何在Spring Boot中配置HikariCP

Spring Boot默認(rèn)支持HikariCP,如果你在項(xiàng)目中引入了Spring Boot Starter JDBC或Spring Boot Starter Data JPA,HikariCP會(huì)被自動(dòng)配置。要顯式配置HikariCP的參數(shù),你可以在application.properties或application.yml文件中進(jìn)行設(shè)置。下面是一些基本的配置示例:

# application.properties
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# HikariCP specific settings
spring.datasource.hikari.connection-timeout=30000 # 30 seconds
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.idle-timeout=600000 # 10 minutes
spring.datasource.hikari.max-lifetime=1800000 # 30 minutes

HikariCP的關(guān)鍵超時(shí)參數(shù)

HikariCP 提供了幾個(gè)關(guān)鍵的超時(shí)參數(shù),這些參數(shù)對(duì)于優(yōu)化數(shù)據(jù)庫(kù)連接和確保應(yīng)用性能至關(guān)重要:

  • connectionTimeout:這是從池中獲取連接時(shí)的最大等待時(shí)間。如果在此時(shí)間內(nèi)無(wú)法獲取到連接,系統(tǒng)將拋出異常。默認(rèn)值是 30 秒。
  • idleTimeout:這是一個(gè)連接在被視為閑置之前可以空閑的最長(zhǎng)時(shí)間。超過(guò)這個(gè)時(shí)間的連接將被釋放,從而減少資源消耗。默認(rèn)值是 10 分鐘。
  • maxLifetime:這是連接在池中存在的最大時(shí)間。超過(guò)這個(gè)時(shí)間的連接將被關(guān)閉并替換,這有助于防止?jié)撛诘膬?nèi)存泄漏或數(shù)據(jù)庫(kù)問(wèn)題。默認(rèn)值是 30 分鐘。
  • maximumPoolSize:這是連接池中管理的最大連接數(shù)。這個(gè)數(shù)值應(yīng)根據(jù)應(yīng)用的負(fù)載和數(shù)據(jù)庫(kù)服務(wù)器的能力進(jìn)行適當(dāng)設(shè)置。

通過(guò)合理配置這些參數(shù),您可以確保數(shù)據(jù)庫(kù)連接池在高效運(yùn)行的同時(shí),也能夠處理異常情況,從而保持應(yīng)用的穩(wěn)定性和響應(yīng)速度。

Tomcat JDBC Pool

雖然HikariCP是默認(rèn)的連接池,但Spring Boot同樣支持Tomcat JDBC連接池。如果要使用Tomcat JDBC Pool,可以這樣配置:

# application.properties
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.initial-size=5
spring.datasource.tomcat.max-wait=10000

解釋參數(shù):

  • max-active:活躍狀態(tài)下最大連接數(shù)。
  • initial-size:初始化時(shí)建立物理連接的個(gè)數(shù)。
  • max-wait:在拋出異常之前,池等待返回連接的最大時(shí)間(以毫秒為單位)。

Druid連接池

Druid是一個(gè)廣泛使用的數(shù)據(jù)庫(kù)連接池,由阿里巴巴開(kāi)發(fā),因其強(qiáng)大的監(jiān)控和擴(kuò)展功能在Java社區(qū)中非常受歡迎。在Spring Boot應(yīng)用中集成Druid連接池可以提高數(shù)據(jù)庫(kù)操作的效率和可靠性。本章節(jié)將介紹Druid連接池的關(guān)鍵特性、配置方法以及如何在Spring Boot中使用它。

關(guān)鍵特性

Druid連接池提供了許多重要的功能,使其在業(yè)界中脫穎而出:

  1. 詳細(xì)的監(jiān)控:Druid提供了一個(gè)監(jiān)控頁(yè)面,可以顯示應(yīng)用程序的SQL查詢和數(shù)據(jù)庫(kù)連接池的狀態(tài),幫助開(kāi)發(fā)者優(yōu)化數(shù)據(jù)庫(kù)操作和排查問(wèn)題。
  2. 擴(kuò)展性:Druid支持多種數(shù)據(jù)庫(kù),可以通過(guò)插件擴(kuò)展其功能,如SQL執(zhí)行日志、連接池事件監(jiān)聽(tīng)等。
  3. 防御SQL注入:Druid內(nèi)置了SQL防注入的功能,增加了應(yīng)用的安全性。
  4. 高可靠性:提供連接池和數(shù)據(jù)庫(kù)連接的高可用性配置,如失敗重試機(jī)制等。

配置方法

在Spring Boot中使用Druid連接池,首先需要添加Druid的依賴到你的pom.xmlbuild.gradle文件中。以下是一個(gè)Maven配置示例:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>

接下來(lái),你需要在application.propertiesapplication.yml文件中配置Druid的基本屬性,如數(shù)據(jù)庫(kù)連接信息、池大小、等待時(shí)間等:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/yourdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 連接池的配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1

使用Druid監(jiān)控

Druid連接池的一個(gè)顯著優(yōu)點(diǎn)是它的監(jiān)控功能。要啟用Druid的監(jiān)控統(tǒng)計(jì)功能,可以添加以下配置:

spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.stat-view-servlet.enabled=true

# 配置監(jiān)控頁(yè)面訪問(wèn)的賬號(hào)和密碼
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin

這些配置后,你可以通過(guò)訪問(wèn)http://localhost:8080/druid/index.html來(lái)查看監(jiān)控界面。

3. 代碼層面配置處理超時(shí)

在這一部分,您可以詳細(xì)介紹如何在Spring Boot中配置不同類型的數(shù)據(jù)庫(kù)超時(shí),包括連接超時(shí)、SQL查詢超時(shí)和事務(wù)超時(shí)。這些配置有助于確保數(shù)據(jù)庫(kù)操作不會(huì)因長(zhǎng)時(shí)間執(zhí)行而影響整個(gè)應(yīng)用的性能和穩(wěn)定性。

3.1 配置SQL查詢超時(shí)(Query Timeout)

SQL查詢超時(shí)是指一條SQL語(yǔ)句的最大執(zhí)行時(shí)間。如果查詢超過(guò)設(shè)定時(shí)間還沒(méi)有完成,那么數(shù)據(jù)庫(kù)將停止執(zhí)行該查詢并返回錯(cuò)誤。

  • MyBatis配置示例

    在MyBatis中,可以在Mapper的XML配置文件中或者使用注解方式來(lái)設(shè)置SQL查詢的超時(shí)時(shí)間。

<select id="findUserById" resultType="User" timeout="10">
  SELECT * FROM users WHERE id = #{id}
</select>
  • 這個(gè)例子中,timeout 設(shè)置為10秒。如果查詢執(zhí)行超過(guò)10秒,將會(huì)被中斷并拋出超時(shí)異常。

3.2 配置事務(wù)超時(shí)(Transaction Timeout)

事務(wù)超時(shí)指的是整個(gè)事務(wù)的最大允許執(zhí)行時(shí)間。如果事務(wù)中的一系列操作超過(guò)了這個(gè)時(shí)間還未完成,那么事務(wù)將被回滾。

Spring事務(wù)超時(shí)配置

在Spring中,可以通過(guò)@Transactional 注解來(lái)設(shè)置事務(wù)的超時(shí)時(shí)間。

@Transactional(timeout = 120) // 事務(wù)超時(shí)時(shí)間設(shè)置為120秒
public void processTransaction() {
    // 事務(wù)處理邏輯
}
  • 在這個(gè)示例中,timeout 屬性設(shè)置為120秒。如果事務(wù)處理超過(guò)120秒,Spring將自動(dòng)回滾事務(wù)。

通過(guò)這樣的配置,開(kāi)發(fā)者可以更好地控制數(shù)據(jù)庫(kù)操作的時(shí)間,從而提高應(yīng)用的響應(yīng)性和穩(wěn)定性。

4. 異常處理與優(yōu)化

當(dāng)配置和使用數(shù)據(jù)庫(kù)連接時(shí),正確處理超時(shí)異常和進(jìn)行適當(dāng)?shù)呐渲脙?yōu)化是至關(guān)重要的。這不僅可以提升應(yīng)用的穩(wěn)定性和性能,還能提高用戶體驗(yàn)。

4.1 如何處理數(shù)據(jù)庫(kù)超時(shí)異常

在Spring Boot應(yīng)用中,處理數(shù)據(jù)庫(kù)超時(shí)異常通常涉及以下幾個(gè)步驟:

  1. 捕獲異常

    • 在Spring Boot中,可以通過(guò)在服務(wù)層或數(shù)據(jù)訪問(wèn)層捕獲java.sql.SQLExceptionorg.springframework.dao.QueryTimeoutException來(lái)處理超時(shí)異常。
    • 示例代碼:
@Service
public class DataService {
    @Autowired
    private DataRepository dataRepository;

    public Data getDataById(long id) {
        try {
            return dataRepository.findById(id);
        } catch (QueryTimeoutException e) {
            // 處理超時(shí)異常,如記錄日志、發(fā)送警報(bào)等
            log.error("Query timed out for id: " + id, e);
        }
        return null;
    }
}
  1. 適當(dāng)反饋

    • 應(yīng)提供適當(dāng)?shù)腻e(cuò)誤反饋給前端或調(diào)用者,確保他們了解請(qǐng)求失敗的原因。
    • 可以通過(guò)定義全局異常處理器來(lái)統(tǒng)一處理和返回錯(cuò)誤信息。
  2. 重試機(jī)制

    • 在某些情況下,實(shí)施簡(jiǎn)單的重試邏輯可能是合適的,尤其是在面對(duì)臨時(shí)網(wǎng)絡(luò)問(wèn)題或短暫的數(shù)據(jù)庫(kù)負(fù)載高峰時(shí)。

4.2. 配置優(yōu)化建議

數(shù)據(jù)庫(kù)連接池的配置對(duì)于應(yīng)用性能有著直接影響。合理的配置可以顯著提高應(yīng)用的響應(yīng)速度和處理能力,尤其在高并發(fā)場(chǎng)景下更為關(guān)鍵。本章將提供一些具體的配置優(yōu)化建議,以及如何根據(jù)不同的數(shù)據(jù)量和應(yīng)用場(chǎng)景進(jìn)行調(diào)整。

了解應(yīng)用需求

在進(jìn)行任何配置之前,首先需要了解應(yīng)用的具體需求:

  • 并發(fā)用戶數(shù):應(yīng)用同時(shí)服務(wù)的用戶數(shù)量。
  • 請(qǐng)求的復(fù)雜性:數(shù)據(jù)庫(kù)操作的復(fù)雜度,包括查詢和事務(wù)處理的復(fù)雜度。
  • 數(shù)據(jù)量大小:數(shù)據(jù)庫(kù)中數(shù)據(jù)的總量,以及每次操作處理的數(shù)據(jù)量。

基本連接池配置

對(duì)于一個(gè)中等規(guī)模的Web應(yīng)用,假設(shè)有約1000個(gè)并發(fā)用戶,每個(gè)用戶平均每分鐘發(fā)起5次數(shù)據(jù)庫(kù)請(qǐng)求,以下是一個(gè)基本的連接池配置示例:

# 初始連接數(shù)
spring.datasource.initial-size=10

# 最小空閑連接數(shù)
spring.datasource.min-idle=10

# 最大活躍連接數(shù)
spring.datasource.max-active=100

# 獲取連接等待超時(shí)的時(shí)間
spring.datasource.max-wait=10000

# 配置間隔多久進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接
spring.datasource.time-between-eviction-runs-millis=60000

# 配置一個(gè)連接在池中最小生存的時(shí)間
spring.datasource.min-evictable-idle-time-millis=300000

# 用來(lái)檢測(cè)連接是否有效的查詢語(yǔ)句
spring.datasource.validation-query=SELECT 1
spring.datasource.validation-query-timeout=5

# 測(cè)試連接
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=false

高并發(fā)場(chǎng)景優(yōu)化

在高并發(fā)場(chǎng)景下,如電商平臺(tái)的大促期間,連接池的配置需要調(diào)整以應(yīng)對(duì)突發(fā)的高負(fù)載。例如,如果預(yù)計(jì)并發(fā)用戶將增加到5000人,每人每分鐘約10次數(shù)據(jù)庫(kù)請(qǐng)求,建議的配置可能需要如下調(diào)整:

# 初始連接數(shù)
spring.datasource.initial-size=50

# 最小空閑連接數(shù)
spring.datasource.min-idle=50

# 最大活躍連接數(shù)
spring.datasource.max-active=500

# 獲取連接等待超時(shí)的時(shí)間
spring.datasource.max-wait=8000

監(jiān)控與動(dòng)態(tài)調(diào)整

使用如Druid或HikariCP的連接池,它們提供的監(jiān)控功能可以幫助你實(shí)時(shí)了解連接池的狀態(tài)和數(shù)據(jù)庫(kù)的性能。根據(jù)監(jiān)控?cái)?shù)據(jù)動(dòng)態(tài)調(diào)整連接池的配置是一個(gè)高級(jí)優(yōu)化策略,可以根據(jù)實(shí)際負(fù)載自動(dòng)調(diào)整連接池大小。在實(shí)際操作中,建議逐步調(diào)整并密切監(jiān)控系統(tǒng)的響應(yīng),以找到最合適的配置平衡點(diǎn)。

以上就是SpringBoot數(shù)據(jù)庫(kù)查詢超時(shí)配置詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot數(shù)據(jù)庫(kù)超時(shí)配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring security權(quán)限配置與使用大全

    Spring security權(quán)限配置與使用大全

    Spring Security 本質(zhì)上是借助一系列的 Servlet Filter來(lái)提供各種安全性功能,但這并不需要我們手動(dòng)去添加或者創(chuàng)建多個(gè)Filter,本文重點(diǎn)給大家介紹spring-security的配置與使用及實(shí)現(xiàn)方式,感興趣的朋友一起看看吧
    2021-09-09
  • Spring Boot文件上傳最新解決方案

    Spring Boot文件上傳最新解決方案

    本文給大家分享Spring Boot文件上傳功能的示例代碼,包括單文件上傳示例和多文件上傳,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • 一文搞懂MyBatis多數(shù)據(jù)源Starter實(shí)現(xiàn)

    一文搞懂MyBatis多數(shù)據(jù)源Starter實(shí)現(xiàn)

    本文將實(shí)現(xiàn)一個(gè)MyBatis的Springboot的Starter包,引用這個(gè)Starter包后,僅需要提供少量配置信息,就能夠完成MyBatis多數(shù)據(jù)源的初始化和使用,需要的小伙伴可以參考一下
    2023-04-04
  • JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析

    JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析

    這篇文章主要介紹了JavaWeb dbutils執(zhí)行sql命令并遍歷結(jié)果集時(shí)不能查到內(nèi)容的原因分析及簡(jiǎn)單處理方法,文中給大家介紹了javaweb中dbutils的使用,需要的朋友可以參考下
    2017-12-12
  • spring中的特殊注解@RequiredArgsConstructor詳解

    spring中的特殊注解@RequiredArgsConstructor詳解

    這篇文章主要介紹了spring中的特殊注解@RequiredArgsConstructor,包括注解注入,構(gòu)造器注入及setter注入,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入功能

    Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入功能

    這篇文章主要介紹了Spring?boot?使用QQ郵箱進(jìn)行一個(gè)驗(yàn)證登入,主要包括qq郵箱開(kāi)啟權(quán)限和創(chuàng)建發(fā)送驗(yàn)證碼的請(qǐng)求Controller,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Eclipse中常用快捷鍵匯總

    Eclipse中常用快捷鍵匯總

    這篇文章主要介紹了Eclipse中常用快捷鍵,文中介紹的非常詳細(xì),幫助大家更好的利用eclipse開(kāi)發(fā),感興趣的朋友可以了解下
    2020-07-07
  • Java中@ConditionalOnProperty注解使用

    Java中@ConditionalOnProperty注解使用

    在Spring?Boot中,@ConditionalOnProperty注解是一種方便的工具,用于根據(jù)應(yīng)用程序配置文件中的屬性值來(lái)控制Bean的創(chuàng)建和加載,本文就來(lái)介紹一下Java中@ConditionalOnProperty注解使用,感興趣的可以了解一下
    2023-11-11
  • 使用Java判定一個(gè)數(shù)值是否在指定的開(kāi)閉區(qū)間范圍內(nèi)

    使用Java判定一個(gè)數(shù)值是否在指定的開(kāi)閉區(qū)間范圍內(nèi)

    這篇文章主要給大家介紹了關(guān)于使用Java判定一個(gè)數(shù)值是否在指定的開(kāi)閉區(qū)間范圍內(nèi)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    Spring Boot優(yōu)雅使用RocketMQ的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Spring Boot優(yōu)雅使用RocketMQ的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論