001/** 002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package io.jboot.db.datasource; 017 018import com.zaxxer.hikari.HikariConfig; 019import com.zaxxer.hikari.HikariDataSource; 020import io.jboot.Jboot; 021 022import javax.sql.DataSource; 023 024/** 025 * @author Michael Yang 杨福海 (fuhai999@gmail.com) 026 * @version V1.0 027 */ 028public class HikariDataSourceFactory implements DataSourceFactory { 029 030 @Override 031 public DataSource createDataSource(DataSourceConfig config) { 032 033 HikariConfig hikariConfig = new HikariConfig(); 034 hikariConfig.setJdbcUrl(config.getUrl()); 035 hikariConfig.setUsername(config.getUser()); 036 hikariConfig.setPassword(config.getPassword()); 037 hikariConfig.addDataSourceProperty("cachePrepStmts", config.isCachePrepStmts()); 038 hikariConfig.addDataSourceProperty("prepStmtCacheSize", config.getPrepStmtCacheSize()); 039 hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", config.getPrepStmtCacheSqlLimit()); 040 hikariConfig.setDriverClassName(config.getDriverClassName()); 041 hikariConfig.setPoolName(config.getPoolName()); 042 hikariConfig.setMaximumPoolSize(config.getMaximumPoolSize()); 043 044 if (config.getMaxLifetime() != null) { 045 hikariConfig.setMaxLifetime(config.getMaxLifetime()); 046 } 047 if (config.getIdleTimeout() != null) { 048 hikariConfig.setIdleTimeout(config.getIdleTimeout()); 049 } 050 051 if (config.getMinimumIdle() != null) { 052 hikariConfig.setMinimumIdle(config.getMinimumIdle()); 053 } 054 055 if (config.getConnectionInitSql() != null) { 056 hikariConfig.setConnectionInitSql(config.getConnectionInitSql()); 057 } 058 059 if(config.getKeepaliveTime() != null){ 060 hikariConfig.setKeepaliveTime(config.getKeepaliveTime()); 061 } 062 063 if(config.getValidationQuery() != null){ 064 hikariConfig.setConnectionTestQuery(config.getValidationQuery()); 065 } 066 067 HikariDataSource dataSource = new HikariDataSource(hikariConfig); 068 069 if (Jboot.getMetric() != null) { 070 dataSource.setMetricRegistry(Jboot.getMetric()); 071 } 072 073 return dataSource; 074 } 075}