天天看點

GreenPlum - Schema 如何連接配接?

背景

最近在寫多資料源的時候,遇到了 GP,因為之前倒騰過 Oracle 和 Gaussdb,他們也都有 schema 的概念,以為這個也差不多,但是發現在連接配接池那塊總是報錯 schema,如下

java.lang.AbstractMethodError: com.pivotal.jdbc.greenplumbase.ddu.setSchema

後來在一番倒騰,找到了解決方案~

方案

1、URL 拼接 Schema

這個方案是針對使用 com.pivotal.jdbc.GreenplumDriver 驅動來講的,URL 規範 jdbc:pivotal:greenplum:// 因為在如下連接配接的時候,絕對報上面的錯

<dependency>
    <groupId>com.pivotal.greenplumgroupId>
    <artifactId>greenplumartifactId>
    <version>1.0version>
dependency>      
HikariConfig configuration = new HikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSource hikariDataSource = new HikariDataSource(configuration);      

是以我們需要稍微改造下,采用拼接 URL,代碼如下

HikariConfig configuration = new HikariConfig();
// 處理特殊資料庫的 URL
DataSourceEntityUtil.evalParam(dataSource);
configuration.setJdbcUrl(dataSource.getUrl());
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(dataSource.getSchema());
HikariDataSource hikariDataSource = new HikariDataSource(configuration);      
public class DataSourceEntityUtil {

    public static void evalParam(DataSourceEntity dataSource) {
        Integer dataSourceType = dataSource.getDataSourceType();
        if (DataSourceTypeEnum.GREENPLUM.getType().equals(dataSourceType)) {
            dataSource.setUrl(buildUrlForGreenPlum(dataSource));
            // 清空 Schema
            dataSource.setSchema(null);
        }
    }

    private static String buildUrlForGreenPlum(DataSourceEntity dataSource) {
        String schema = dataSource.getSchema();
        String url = dataSource.getUrl() + ";initializationString=set search_path to " + schema;
        return url;
    }
}      
<dependency>
    <groupId>org.postgresqlgroupId>
    <artifactId>postgresqlartifactId>
    <version>42.1.1version>
dependency>      
HikariConfig configuration = new HikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSource hikariDataSource = new HikariDataSource(configuration);      

繼續閱讀