Frage

Ich weiß, dass da UNIX-Sockets sind plattformspezifisch, gibt es einige Nicht-Java-Code eingebunden werden muss. Insbesondere sind wir daran interessiert, JDBC in Verwendung mit einer MySQL-Instanz zu verbinden, die nur UNIX Domain Sockets aktiviert ist.

Es ist nicht wie diese sieht wird unterstützt, aber von dem, was ich gelesen habe, sollte es zumindest möglich sein, eine Socket für JDBC zu schreiben, basierend auf UNIX-Sockets , wenn können wir eine ordentliche Umsetzung finden von UNIX-Sockets für Java.

Hat jemand versucht das? Kennt jemand von einer solchen Implementierung?

War es hilfreich?

Lösung

Kasse der Juds Bibliothek. Es ist eine Java-Unix-Domain-Socket-Bibliothek ...

https://github.com/mcfunley/juds

Andere Tipps

könnten Sie verwenden junixsocket: https://github.com/kohlschutter/junixsocket

Es gibt bereits Code für die Verbindung zu MySQL von Java (Connector / J) über Unix-Sockets.

Ein großer Vorteil im Vergleich zu anderen Implementierungen ist, dass junixsocket das Standard-Java-Socket-API verwendet.

Da die ursprüngliche Kohlschütter / junixsocket , in einer anderen Antwort erwähnt scheint tot zu sein, können Sie überprüfen, aus seinen Gabeln.

Besonders fiken / junixsocket sieht vielversprechend aus. Sein Autor hat zusätzliche Unterstützung für den Anschluss an PostgreSQL mit Unix-Socket über pgjdbc , zum Beispiel.

Überprüfen Sie die JNA Bibliothek aus. Es ist eine Zwischenstation zwischen reinen Java und JNI nativen Code

https://github.com/twall/jna/

Die MariaDB JDBC-Treiber dies jetzt unterstützt und kompatibel mit den MySQL JDBC-Treiber.

Verwenden Sie eine JDBC-URL wie:

jdbc:mariadb://localhost:3306/revmgt?localSocket=/var/run/mysqld/mysqld.sock

Bemerkenswert, dass diese Bibliothek erfordern, einschließlich der JNA Bibliothek als es JNA verwendet native Sockets Unix Domain zuzugreifen. Es funktioniert ziemlich gut in meinen Tests. Ich sah Verbesserungen in der Geschwindigkeit der CPU gebunden Java-Prozesse vom Offload zu nativen Code.

Das JNR Projekt (das ist eine lose Basis für Projekt panama ) hat einen Unix-Socket Umsetzung.

Einige Benutzer über das Internet hat die folgende nützliche aussehende Bibliothek aufgedeckt:

http://www.nfrese.net/software/gnu_net_local/overview.html

Wayback Link-

eine Socket-Factory Schreiben sollte einfach genug sein. Sobald Sie dies getan haben, können Sie es zu Ihrem Fahrer passieren thusly . ( Wayback Link-).

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.management.driverlaunched.ServerLauncherSocketFactory;

public class ConnectorMXJTestExample {
    public static void main(String[] args) throws Exception {
        String hostColonPort = "localhost:3336";

        String driver = com.mysql.jdbc.Driver.class.getName();
        String url = "jdbc:mysql://" + hostColonPort + "/" + "?"
                + "socketFactory="
                + ServerLauncherSocketFactory.class.getName();
        String userName = "root";
        String password = "";

        Class.forName(driver);
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, userName, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT VERSION()");
            rs.next();
            String version = rs.getString(1);
            rs.close();
            stmt.close();

            System.out.println("------------------------");
            System.out.println(version);
            System.out.println("------------------------");
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            ServerLauncherSocketFactory.shutdown(hostColonPort);
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top