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

com.fastchar.extend.druid.FastDruidDataSourceProvider Maven / Gradle / Ivy

package com.fastchar.extend.druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.fastchar.annotation.AFastClassFind;
import com.fastchar.annotation.AFastObserver;
import com.fastchar.core.FastChar;
import com.fastchar.database.info.FastDatabaseInfo;
import com.fastchar.interfaces.IFastDataSourceProvider;
import com.fastchar.utils.FastClassUtils;

import javax.sql.DataSource;
import java.lang.reflect.Field;

//具体详细配置介绍,请参看官方文档 https://github.com/alibaba/druid/wiki
@AFastObserver
@AFastClassFind("com.alibaba.druid.pool.DruidDataSource")
public class FastDruidDataSourceProvider implements IFastDataSourceProvider {
    private DruidDataSource dataSource = null;

    @Override
    public DataSource getDataSource(FastDatabaseInfo databaseInfo) {
        if (dataSource == null) {
            dataSource = new DruidDataSource();
            dataSource.setUrl(databaseInfo.toUrl());
            dataSource.setUsername(databaseInfo.getUser());
            dataSource.setPassword(databaseInfo.getPassword());
            dataSource.setDriverClassName(databaseInfo.getDriver());
            dataSource.setValidationQuery(buildValidationQuery(databaseInfo.toUrl()));

            try {
                FastDruidConfig druid = FastChar.getConfigs().getDruidConfig();
                for (Field field : FastDruidConfig.class.getDeclaredFields()) {
                    field.setAccessible(true);
                    Object o = field.get(druid);
                    if (o != null) {
                        Field declaredField = FastClassUtils.getDeclaredField(DruidDataSource.class, field.getName());
                        if (declaredField != null) {
                            declaredField.setAccessible(true);
                            declaredField.set(dataSource, o);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return dataSource;
    }


    private String buildValidationQuery(String url) {
        if (url.startsWith("jdbc:oracle")) {
            return "select 1 from dual";
        } else if (url.startsWith("jdbc:db2")) {
            return "select 1 from sysibm.sysdummy1";
        } else if (url.startsWith("jdbc:hsqldb")) {
            return "select 1 from INFORMATION_SCHEMA.SYSTEM_USERS";
        } else if (url.startsWith("jdbc:derby")) {
            return "select 1 from INFORMATION_SCHEMA.SYSTEM_USERS";
        }
        return "select 1";
    }



    public void onWebStop() {
        try {
            if (dataSource != null) {
                dataSource.close();
            }
        } finally {
            dataSource = null;
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy