Пинг сервер MySQL с использованием JDBC - PullRequest
13 голосов
/ 27 марта 2011

Это кажется довольно простым (не для меня) ...

Как можно пропинговать сервер MySQL, используя JDBC? я успешно использовал запросы выбора и вставки с JDBC и MySQL, но как пинговать ???

ТИА

Ответы [ 3 ]

32 голосов
/ 27 марта 2011

Драйвер MySQL JDBC (Connector / J) обеспечивает механизм проверки связи.

Если вы выполняете SQL-запрос с добавлением /* ping */, например:

"/* ping */ SELECT 1"

Это фактически приведет к тому, что драйвер отправит эхо-запрос на сервер и вернет поддельный, легкий набор результатов.

(Вы можете найти это глубоко в документации Connector / J ; ищите «ping» на этой странице. Внимательно прочитайте: этот механизм очень чувствителен к используемый синтаксис. В отличие от большинства SQL, «разбор» маркера «ping» происходит в самом драйвере JDBC на стороне клиента.).

1 голос
/ 27 марта 2011

Я не знаю, как это сделать в JDBC, так как вы можете использовать Connection Pooling для проверки вашего соединения следующим образом (это context.xml для Tomcat (находится в каталоге META-INF вашего приложения)):

<Resource name="jdbc/My_DS" auth="Container" type="javax.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000"
            username="USERNAME" password="PASSWORD" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/MYDB?autoReconnect=true" 
            removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
            testOnBorrow="true" validationQuery="SELECT 1" />

validationQuery проверяет, успешно ли установлено соединение.

1 голос
/ 27 марта 2011

Я не думаю, что в APD JDBC есть что-то для этого.

Но вы можете просто использовать InetAddress и метод isReachable (), чтобы проверить, существует ли сервер (что, по сути, делает пинг).

http://download.oracle.com/javase/6/docs/api/java/net/InetAddress.html#isReachable%28int%29

Редактировать :Если вы хотите проверить, работает ли MySQL, а не пинговать сервер, вы можете попробовать открыть сокет для сервера через порт MySQL по умолчанию.

Примерно так:

InetAddress addr = InetAddress.getByName("your.server.com");
int port = 3306;
SocketAddress sockaddr = new InetSocketAddress(addr, port);
Socket sock = new Socket();
sock.connect(sockaddr, 2000); // open the connection with a 2 seconds timeout

Если connect () не выдает исключение, то что-то работает на порту 3306.

Если вы хотите убедиться, что этоСервер MySQL на этом порту, единственный способ - установить соединение JDBC (но для этого вам нужно действительное имя пользователя / пароль) и выполнить оператор, например оператор PING, упомянутый Брайаном.

...