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}