成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringBoot與HikariCP整合,實現數據庫連接池動態優化系統

開發 前端
Craigslist 是全球最大的分類廣告網站,在其廣告發布和搜索系統中使用 HikariCP 來管理數據庫連接,支持大量的用戶訪問。

HikariCP 是目前最高效的 JDBC 連接池,能夠顯著提升應用程序的性能和響應速度。

我們為什么選擇HikariCP?

  • 低延遲:HikariCP 在基準測試中表現優異,通常比其他流行的連接池(如 C3P0、DBCP)快得多。
  • 優化的鎖機制:通過減少不必要的同步操作和優化鎖機制,HikariCP 提供了更快的連接獲取和釋放速度。
  • 高效資源管理:HikariCP 使用較少的內存來維護連接池,減少了垃圾回收的壓力。
  • 最少的對象和線程:內部使用少量的對象和線程,避免過多的上下文切換,從而提高整體性能。
  • 簡單直觀:提供了簡單且直觀的配置選項,大多數情況下默認配置已經足夠使用。
  • 多種配置方式:支持屬性文件、Java 配置類等多種配置方式,靈活適應不同的需求。
  • 兼容性強:可以與各種關系型數據庫一起使用,包括 MySQL、PostgreSQL、Oracle 等。
  • 健康檢查:能夠自動檢測并移除死連接,確保連接池中的連接始終有效。
  • 定期驗證:通過定期檢查和驗證連接的有效性來維護連接池的狀態。
  • 靈活性:允許動態調整連接池的大小和其他參數,滿足不同應用場景的需求。
  • API支持:提供了豐富的 API 和回調機制,便于開發者進行定制化配置。
  • 無縫集成:SpringBoot默認使用HikariCP作為其內置的連接池實現,無需額外配置即可使用。

哪些公司使用了HikariCP?

  • Twitter在其推文發布和檢索系統中使用 HikariCP 來管理數據庫連接,支持大量的用戶互動。
  • Uber在其調度系統和訂單管理系統中使用 HikariCP 來管理數據庫連接,確保實時性和可靠性。
  • eBay在其電子商務平臺上使用 HikariCP 來管理數據庫連接,支持高并發的用戶請求。
  • Salesforce在其銷售自動化和客戶服務系統中使用 HikariCP 來管理數據庫連接。
  • Microsoft Azure在其各種云服務中使用 HikariCP 來管理數據庫連接,提供高效的數據處理能力。
  • IBM在其內部應用和云計算服務中使用 HikariCP 來管理數據庫連接。
  • Spotify 是全球領先的音樂流媒體服務。用HikariCP優化其后端服務的數據庫連接管理,支持高并發用戶請求。
  • Square在其支付系統中使用HikariCP來管理數據庫連接,確保交易的高效處理。
  • LinkedIn用于其龐大的用戶數據管理和推薦系統中的數據庫連接池。
  • Airbnb在其復雜的后端系統中使用 HikariCP 來管理數據庫連接,確保用戶體驗的流暢性。
  • Dropbox在其文件管理系統中使用 HikariCP 來管理數據庫連接,支持大量用戶的文件操作。
  • Craigslist 是全球最大的分類廣告網站,在其廣告發布和搜索系統中使用 HikariCP 來管理數據庫連接,支持大量的用戶訪問。

代碼實操

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/><!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dynamic-hikaricp-config</name>
    <description>Demo project for Spring Boot with dynamic HikariCP configuration</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.properties

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/ecommerce
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

配置HikariCP數據源

package com.example.demo.config;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Bean
    public DataSource dataSource() {
        // 創建HikariConfig實例
        HikariConfig config = new HikariConfig();
        // 設置JDBC URL
        config.setJdbcUrl("jdbc:mysql://localhost:3306/ecommerce");
        // 設置數據庫用戶名
        config.setUsername("root");
        // 設置數據庫密碼
        config.setPassword("password");
        // 啟用預編譯語句緩存
        config.addDataSourceProperty("cachePrepStmts", "true");
        // 設置預編譯語句緩存大小
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        // 設置每個連接的最大預編譯語句數量
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        // 返回HikariDataSource實例
        return new HikariDataSource(config);
    }
}

處理與產品的REST請求

package com.example.demo.controller;

import com.example.demo.model.Product;
import com.example.demo.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // 獲取所有產品
    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    // 創建新產品
    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productService.createProduct(product);
    }

    // 根據ID獲取單個產品
    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    // 更新產品信息
    @PutMapping("/{id}")
    public Product updateProduct(@PathVariable Long id, @RequestBody Product productDetails) {
        return productService.updateProduct(id, productDetails);
    }

    // 刪除產品
    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable Long id) {
        productService.deleteProduct(id);
    }
}

用于動態調整HikariCP配置

package com.example.demo.controller;

import com.example.demo.service.HikariConfigService;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/api/config")
public class HikariConfigController {

    @Autowired
    private HikariConfigService hikariConfigService;

    // 獲取當前HikariCP配置
    @GetMapping
    public String getConfig() {
        HikariDataSource dataSource = hikariConfigService.getDataSource();
        return"Current configuration: maxPoolSize=" + dataSource.getMaximumPoolSize() +
                ", connectionTimeout=" + dataSource.getConnectionTimeout();
    }

    // 設置最大連接數
    @PostMapping("/maxPoolSize/{size}")
    public String setMaxPoolSize(@PathVariable int size) {
        if (size > 0) {
            hikariConfigService.setMaxPoolSize(size);
            return"Updated maxPoolSize to " + size;
        } else {
            return"Invalid size";
        }
    }

    // 設置連接超時時間
    @PostMapping("/connectionTimeout/{timeout}")
    public String setConnectionTimeout(@PathVariable long timeout) {
        if (timeout >= 0) {
            hikariConfigService.setConnectionTimeout(timeout);
            return"Updated connectionTimeout to " + timeout + "ms";
        } else {
            return"Invalid timeout";
        }
    }
}

產品實體類

package com.example.demo.model;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Data
@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 產品ID
    private String name; // 產品名稱
    private double price; // 產品價格
    private String description; // 產品描述
}

訂單實體類

package com.example.demo.model;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@Data
@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 訂單ID
    private Long productId; // 關聯的產品ID
    private int quantity; // 訂單數量
    private double totalAmount; // 總金額
}

Product Repository

package com.example.demo.repository;

import com.example.demo.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
}

Order Repository

package com.example.demo.repository;

import com.example.demo.model.Order;
import org.springframework.data.jpa.repository.JpaRepository;

public interface OrderRepository extends JpaRepository<Order, Long> {
}

Product Service

package com.example.demo.service;

import com.example.demo.model.Product;
import com.example.demo.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    // 獲取所有產品
    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    // 創建新產品
    public Product createProduct(Product product) {
        return productRepository.save(product);
    }

    // 根據ID獲取單個產品
    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }

    // 更新產品信息
    public Product updateProduct(Long id, Product productDetails) {
        Product product = productRepository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));
        product.setName(productDetails.getName());
        product.setPrice(productDetails.getPrice());
        product.setDescription(productDetails.getDescription());
        return productRepository.save(product);
    }

    // 刪除產品
    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

管理HikariCP配置的服務層

package com.example.demo.service;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class HikariConfigService {

    @Autowired
    private HikariDataSource dataSource;

    // 獲取HikariDataSource實例
    public HikariDataSource getDataSource() {
        return dataSource;
    }

    // 設置最大連接數
    public void setMaxPoolSize(int size) {
        dataSource.setMaximumPoolSize(size);
    }

    // 設置連接超時時間
    public void setConnectionTimeout(long timeout) {
        dataSource.setConnectionTimeout(timeout);
    }
}

Application

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

測試

設置最大連接數

curl -X POST http://localhost:8080/api/config/maxPoolSize/20

Respons:

Updated maxPoolSize to 20

設置連接超時時間

curl -X POST http://localhost:8080/api/config/connectionTimeout/30000

Respons:

Updated connectionTimeout to 30000ms


責任編輯:武曉燕 來源: Java知識日歷
相關推薦

2024-01-10 08:17:50

HikariCP數據庫Spring

2025-02-07 12:11:52

2009-06-24 07:53:47

Hibernate數據

2009-07-17 13:32:49

JDBC數據庫

2010-03-18 15:09:15

python數據庫連接

2021-07-07 14:20:15

高并發服務數據庫

2011-07-29 15:11:42

WeblogicOracle數據庫連接

2017-06-22 14:13:07

PythonMySQLpymysqlpool

2019-11-27 10:31:51

數據庫連接池內存

2009-06-16 09:25:31

JBoss配置

2025-01-16 10:34:18

2022-02-21 07:48:54

Mysql數據庫SpringBoot

2019-12-30 15:30:13

連接池請求PHP

2021-08-12 06:52:01

.NET數據庫連接池

2020-04-30 14:38:51

數據庫連接池線程

2018-10-10 14:27:34

數據庫連接池MySQL

2025-04-25 08:34:52

2025-03-03 07:30:00

SpringBootJGraphT網絡建模

2011-05-19 09:53:33

數據庫連接池

2009-07-29 09:33:14

ASP.NET數據庫連
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区在线视频 | 91亚洲国产成人精品一区二三 | 成人一区二区在线 | 99欧美精品 | 国产精品久久久久婷婷二区次 | 亚洲精品一区二区三区在线 | 中文字幕国产视频 | 欧美日韩成人 | 一区二区三区四区在线 | 成人免费视频播放 | 久久91av | 欧美不卡一区二区三区 | 91极品尤物在线播放国产 | 欧美三级久久久 | 日本一区二区三区四区 | 99热热热| 国产精品国色综合久久 | 超碰男人天堂 | 亚洲一区二区三区高清 | 日本不卡一区二区三区 | 一级黄色大片 | 成人av一区 | 国产一区二区三区在线 | 九色91视频| 91色视频在线观看 | 国产福利资源 | h视频在线观看免费 | 成人一区二区三区在线观看 | 欧美成人一区二区三区 | 欧美日韩亚洲视频 | 亚洲精品免费看 | 久久综合成人精品亚洲另类欧美 | 欧美亚洲成人网 | 色综合久久88色综合天天 | 欧美在线国产精品 | 成人免费视频观看视频 | 北条麻妃99精品青青久久 | 久久久久久久久久久成人 | 亚洲www啪成人一区二区 | 日韩淫片免费看 | 中文字幕 在线观看 |