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

io.edurt.datacap.driver.cluster.RedisClusterDriver Maven / Gradle / Ivy

The newest version!
package io.edurt.datacap.driver.cluster;

import io.edurt.datacap.core.Logger;
import io.edurt.datacap.core.RedisConnection;
import io.edurt.datacap.driver.conf.RedisClusterConnectionInfo;
import io.edurt.datacap.driver.redis.RedisDriver;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.JedisCluster;

import java.net.URI;
import java.net.URISyntaxException;
import java.sql.*;
import java.util.Properties;

public class RedisClusterDriver
        implements Driver
{
    private final static Logger LOGGER = new Logger(RedisDriver.class);

    private static final String REDIS_CLUSTER_JDBC_PREFIX = "jdbc:redis-cluster:";

    static {
        try {
            DriverManager.registerDriver(new RedisClusterDriver());
        }
        catch (Exception e) {
            LOGGER.log("Can't register driver!");
            throw new RuntimeException("Can't register driver!", e);
        }
    }

    @Override
    public Connection connect(String url, Properties info)
            throws SQLException
    {
        if (!this.acceptsURL(url)) {
            LOGGER.log("wrong url. url is %s", url);
            return null;
        }
        if (info == null) {
            info = new Properties();
        }

        String rawUrl = url.replaceFirst("jdbc:", "");
        RedisClusterConnectionInfo connectionInfo = new RedisClusterConnectionInfo(rawUrl, info);

        JedisCluster jedisCluster = new JedisCluster(
                connectionInfo.getNodes(),
                connectionInfo.getTimeout(),
                connectionInfo.getTimeout(),
                connectionInfo.getMaxAttempts(),
                connectionInfo.getUsername(),
                connectionInfo.getPassword(),
                null,
                new GenericObjectPoolConfig<>()
        );
        JedisRedisClusterClient jedisRedisClusterClient = new JedisRedisClusterClient(jedisCluster);

        return new RedisConnection(jedisRedisClusterClient, "0", info);
    }

    @Override
    public boolean acceptsURL(String url)
            throws SQLException
    {
        return url.toLowerCase().startsWith(REDIS_CLUSTER_JDBC_PREFIX);
    }

    @Override
    public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
            throws SQLException
    {
        return new DriverPropertyInfo[0];
    }

    @Override
    public int getMajorVersion()
    {
        return 0;
    }

    @Override
    public int getMinorVersion()
    {
        return 0;
    }

    @Override
    public boolean jdbcCompliant()
    {
        return false;
    }

    @Override
    public java.util.logging.Logger getParentLogger()
            throws SQLFeatureNotSupportedException
    {
        return null;
    }

    public static void main(String[] args)
            throws URISyntaxException
    {
        URI uri = new URI("cluster:///?hosts=localhost:3306");
        System.out.println(uri.getQuery());
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy