All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.ltsopensource.store.jdbc.SqlTemplateFactory Maven / Gradle / Ivy

package com.github.ltsopensource.store.jdbc;

import com.github.ltsopensource.core.cluster.Config;
import com.github.ltsopensource.core.spi.ServiceLoader;
import com.github.ltsopensource.store.jdbc.datasource.DataSourceProvider;

import javax.sql.DataSource;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 保证一个DataSource对应一个SqlTemplate
 *
 * @author Robert HG ([email protected]) on 3/8/16.
 */
public class SqlTemplateFactory {

    private static final ConcurrentMap HOLDER = new ConcurrentHashMap();

    public static SqlTemplate create(Config config) {
        DataSourceProvider dataSourceProvider = ServiceLoader.load(DataSourceProvider.class, config);
        DataSource dataSource = dataSourceProvider.getDataSource(config);
        SqlTemplate sqlTemplate = HOLDER.get(dataSource);

        if (sqlTemplate != null) {
            return sqlTemplate;
        }
        synchronized (HOLDER) {
            sqlTemplate = HOLDER.get(dataSource);
            if (sqlTemplate != null) {
                return sqlTemplate;
            }
            sqlTemplate = new SqlTemplateImpl(dataSource);
            HOLDER.putIfAbsent(dataSource, sqlTemplate);
            return sqlTemplate;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy