91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么配置使用HikariCP數據源

發布時間:2021-10-19 17:19:11 來源:億速云 閱讀:180 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么配置使用HikariCP數據源”,在日常操作中,相信很多人在怎么配置使用HikariCP數據源問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么配置使用HikariCP數據源”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

使用場景

HikariCP 這個數據源號稱是最快的數據源。 其實個人認為 性能肯定還是在SQL語句和數據庫。而且 這個數據源功能其實并不多。
個人不喜歡使用 將其作為主數據源。
druid 數據源對比

但是 如果將 HikariCP 作為讀取 讀取第三方 數據庫 也就是多數據源來 使用,個人認為是非常適合的。

多數據源配置

package com.door.remote.dataSource;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.db.Db;
import com.door.common.constants.DbConst;
import com.door.common.constants.biz.dr.DbSetType;
import com.door.entity.dr.AcDrDbSource;
import com.door.utils.db.CfsDatabase;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * 數據源管理器
 *
 * @author oumin
 * @date 2021/1/23 10:01
 */
@Component
@Log4j2
public class DataSourceManager {

  // 24 小時超時
  private static final long timeOut = 24 * 60 * 60 * 1000L;

  private final Object createLock = new Object();

  private static final TimedCache<String, DataSource> timedDataSourceCache =
      CacheUtil.newTimedCache(timeOut);

  @PostConstruct // 初始化方法的注解方式  等同與init-method=init
  public void init() {

    // 啟動定時任務,每 xx 毫秒 檢查一次過期
    timedDataSourceCache.schedulePrune(timeOut);
  }

  /**
   * 獲取數據源
   *
   * @return
   */
  public DataSource getAndMaybePut(CfsDatabase cfsDatabase) {
    String key = cfsDatabase.toString();
    DataSource curr = timedDataSourceCache.get(key);
    if (curr == null) {
      synchronized (this.createLock) {
        curr = timedDataSourceCache.get(key);
        if (curr == null) {
          timedDataSourceCache.put(key, this.createDataSource(cfsDatabase));
        }
        return timedDataSourceCache.get(key);
      }
    } else {
      return curr;
    }
  }

  private DataSource createDataSource(CfsDatabase cfsDatabase) {
    HikariDataSource dataSource = new HikariDataSource();
    dataSource.setDriverClassName(DbConst.getDbDriverByDbType(cfsDatabase.getDbType()));

    if (DbSetType.DB_MYSQL.getName().equalsIgnoreCase(cfsDatabase.getDbType())) {
      // 兼容 MYSQL8 時區,和 指定連接超時  connectTimeout=20000  ,  和 不使用 SSL:    characterEncoding=utf- 8&useSSL=false&serverTimezone=Hongkong
      String timeZone = cfsDatabase.getTimeZone();
      String url = cfsDatabase.getUrl();
      String urlDb = "";
      if (StringUtils.isNoneBlank(timeZone)) {
        urlDb = DbConst.MYSQL_URL + url + DbConst.MYSQL_STR + timeZone + DbConst.MYSQL_TIME_OUT;
      } else {
        // 如果timeZone 為空,mysql就用默認的時區
        urlDb = DbConst.MYSQL_URL + url + DbConst.MYSQL_STR_ZOOR + DbConst.MYSQL_TIME_OUT;
      }
      dataSource.setJdbcUrl(urlDb);
    } else {
      dataSource.setJdbcUrl(cfsDatabase.getUrl());
    }

    dataSource.setUsername(cfsDatabase.getUserName());
    dataSource.setPassword(cfsDatabase.getPassword());
    //    dataSource.setPassword(PasswordKey.getDecodePassword(source.getDatasourcePassword()));
    dataSource.setMaximumPoolSize(10);
    dataSource.setMinimumIdle(1);

    // 默認 30S
    //    dataSource.setConnectionTimeout(source.getConnTimeout());

    // 修復 連接超時異常
    // 默認false . 目前業務都是查詢而已
    //    dataSource.setReadOnly(true); 只讀模式,如果數據庫支持 只讀模式才有優化效果,否則沒有

    // 單位都是毫秒以下的
    dataSource.setIdleTimeout(60 * 1000L);
    dataSource.setValidationTimeout(3 * 1000L);
    dataSource.setMaxLifetime(300 * 1000L);

    // mysql 和 Oracle 使用 SELECT 1 FROM DUAL  ,其他 數據庫 使用  select 1
    // 雖然 官網 不推薦配置這個 TestQuery 而是在數據庫支持JDBC4規范的情況下就不要配置。但是避免麻煩還是配置加上了
    dataSource.setConnectionTestQuery(DbConst.getTestSQL(cfsDatabase.getDbType()));
    dataSource.setPoolName("數據源ID" + cfsDatabase.getSourceId());
    return dataSource;
  }

  /**
   * 測試SQL
   *
   * @param sql 測試SQL
   * @param dbSource 測試數據源
   */
  public void testSQL(String sql, AcDrDbSource dbSource) throws SQLException {

    log.info("測試SQL :{}", sql);
    CfsDatabase database = CfsDatabase.converterByDataSource(dbSource);

    DataSource dataSource = this.getAndMaybePut(database);

    Db.use(dataSource).query(sql);
  }
}

到此,關于“怎么配置使用HikariCP數據源”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜章县| 临江市| 灵石县| 封丘县| 长乐市| 繁昌县| 宜川县| 遂川县| 府谷县| 耿马| 东平县| 旅游| 姜堰市| 廉江市| 延长县| 绥德县| 天峻县| 关岭| 满洲里市| 肥西县| 阳曲县| 白山市| 沽源县| 富裕县| 博野县| 岫岩| 麻城市| 驻马店市| 左权县| 奉节县| 奉新县| 扎兰屯市| 乡城县| 会同县| 诏安县| 长子县| 江达县| 张北县| 黄梅县| 华阴市| 中阳县|