Slackware 12 действительно медленный JDBC - PullRequest
1 голос
/ 03 октября 2011

Приветствие, у меня есть некоторая проблема с JDBC, он настолько медленный, что невероятно.

Тот же код прекрасно работает при подключении Windows к удаленной базе данных.

Но в slackware требуетсякак 30 секунд для подключения, и первая попытка всегда терпит неудачу.Я должен был обойти это, чтобы попытаться снова, чтобы убедиться, что он соединяется.Но даже это не должно быть таким медленным.

с помощью команды mysql в bash, кажется, соединяется мгновенно.

Вот код, используемый для создания базы данных

public static Object createDBConnection(String dbType, String host, String hostPort, String dbName, String userName, String password) {

    String connectionString = buildConnectionString(dbType, host, hostPort, dbName, userName, password);
    Connection connection = null;

    try {
        if(dbType.equals(K_dbTypeMySQL)){               
            Class.forName("com.mysql.jdbc.Driver");
        }else if(dbType.equals(K_dbTypeSqlServer)){
            Class.forName("net.sourceforge.jtds.jdbc.Driver");              
        }else if(dbType.equals(K_dbTypeSqlServerExpress)){
            Class.forName("net.sourceforge.jtds.jdbc.Driver");              
        }else if(dbType.equals(K_dbTypePostgres))   {
            Class.forName("org.postgresql.Driver");
        }


        connection = DriverManager.getConnection(connectionString);
        return connection; 

    }
    catch (Exception e)
    {               
        e.printStackTrace();
        return null;
    }       
}

public static String buildConnectionString(String dbType, String host, String hostPort, String dbName, String userName, String password){
    String connectionString = null;
    if((dbType.equals(K_dbTypeMySQL))){
        connectionString = "jdbc:mysql://" + host + ":" + hostPort + "/" + dbName + "?user=" + userName + "&password=" + password;
    }else if((dbType.equals(K_dbTypeSqlServer)))
        connectionString = "jdbc:jtds:sqlserver://" + host + ":" + hostPort + ";databaseName=" + dbName + ";selectMethod=cursor;user=" + userName + ";password=" + password;        
    else if((dbType.equals(K_dbTypeSqlServerExpress)))
        connectionString = "jdbc:jtds:sqlserver://" + host + ":" + hostPort + ";databaseName=" + dbName + ";selectMethod=cursor;user=" + userName + ";password=" + password;
    else if(dbType.equals(K_dbTypePostgres))
        connectionString = String.format("jdbc:postgresql://%s:%s/%s?user=%s&password=%s",host,hostPort,dbName,userName,password);


    return connectionString;
}

Iпробовал использовать разные драйверы, но одно и то же, первая попытка всегда требует подключения (20 секунд), вторая - 2 секунды.

У меня возникает одна и та же проблема при попытке открыть URL-адрес https с помощью URLConnection всегдаНе удается во второй раз без проблем.

У кого-нибудь есть понимание этой проблемы?Так как у меня есть проблема с открытием URL HTTPS с Java, может быть, некоторые проблемы с SSL?MySQL использует SSL в любом случае?

версия сервера: 5.1.41

хост: localhost

Драйвер jdbc: 5.1.8, 5.1.12, 5.1.17 (все проблемы одинаковы)

сборка java: root @ LinuxMZ: ~ / nx_dev / sicm # java -version версия java "1.6.0_06" Java (TM) среда выполнения SE (сборка 1.6.0_06-b02) Java HotSpot (TM) Клиент VM (сборка10.0-b22, смешанный режим, совместное использование)

// EDIT 127.0.0.1 и localhost делают ту же проблему

спасибо за вашу помощь


Пока ничего,DBManager.createConnection зависает на 20 секунд.Я пытался подключиться с другой машины, и она работает без нареканий.

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

30 секунд пахнет как тайм-аут DNS при поиске имени, которое вы дали.

Вы можете подтвердить это, используя вместо этого IP-адрес в качестве имени хоста.

0 голосов
/ 28 апреля 2013

Похоже, MySQL пытается разрешить клиента с помощью nslookup. В текущем контексте клиент имеет 127.0.0.1 или 192.168.1.XXX. Я думаю, что это связано с неправильным именованием в / etc / hosts . Посмотрите в этом файле, если нет плохой записи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...