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

qunar.tc.qmq.jdbc.JdbcTemplateHolder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2018 Qunar, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package qunar.tc.qmq.jdbc;

import java.util.ServiceLoader;

import javax.sql.DataSource;

import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import qunar.tc.qmq.configuration.DynamicConfig;
import qunar.tc.qmq.configuration.DynamicConfigLoader;

import org.springframework.jdbc.core.JdbcTemplate;

/**
 * @author keli.wang
 * @since 2017/9/28
 */
public class JdbcTemplateHolder {
    private static final Supplier DS_SUPPLIER = Suppliers.memoize(JdbcTemplateHolder::createDataSource);
    private static final Supplier SUPPLIER = Suppliers.memoize(JdbcTemplateHolder::createJdbcTemplate);

    private static JdbcTemplate createJdbcTemplate() {
        return new JdbcTemplate(DS_SUPPLIER.get());
    }

	private static DataSource createDataSource() {
		final DynamicConfig config = DynamicConfigLoader.load("datasource.properties");
		ServiceLoader factories = ServiceLoader.load(DataSourceFactory.class);
		for (DataSourceFactory factory : factories) {
			return factory.createDataSource(config);
		}

		return new DefaultDataSourceFactory().createDataSource(config);
	}

    public static JdbcTemplate getOrCreate() {
        return SUPPLIER.get();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy