Domanda

Mi rendo conto che poiché i socket UNIX sono specifici della piattaforma, ci deve essere un codice non Java coinvolto. In particolare, siamo interessati a utilizzare JDBC per connettersi a un'istanza MySQL che ha solo socket di dominio UNIX abilitati.

Non sembra che questo sia supportato, ma da quello che ho letto dovrebbe essere almeno possibile scrivere un SocketFactory per JDBC basato su socket UNIX se possiamo trovare un'implementazione decente di socket UNIX per Java.

Qualcuno ha provato questo? Qualcuno sa di tale implementazione?

È stato utile?

Soluzione

Verifica la libreria JUDS. È una libreria Java Unix Domain Socket ...

https://github.com/mcfunley/juds

Altri suggerimenti

Potresti usare junixsocket: https://github.com/kohlschutter/junixsocket

Fornisce già il codice per la connessione a MySQL da Java (Connector / J) tramite socket Unix.

Un grande vantaggio rispetto ad altre implementazioni è che junixsocket utilizza l'API Java Socket standard.

Dato che l'originale kohlschutter / junixsocket , menzionato in un'altra risposta, sembra essere morto, puoi controllare le sue forcelle.

Soprattutto fiken / junixsocket sembra promettente. Il suo autore ha aggiunto il supporto per la connessione a PostgreSQL utilizzando unix socket tramite pgjdbc , per esempio.

Scopri la libreria JNA. È una casa a metà strada tra puro codice nativo Java e JNI

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

Il driver JDBC MariaDB ora supporta questo ed è compatibile con il driver MySQL JDBC.

Utilizza un URL JDBC come:

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

Vale la pena notare che questa libreria richiede l'inclusione della libreria JNA in quanto utilizza JNA per accedere ai socket di dominio unix nativi. Funziona abbastanza bene nei miei test. Ho visto miglioramenti della velocità sui processi Java associati alla CPU dall'offload al codice nativo.

Il progetto JNR (che è una base generica per project panama ) ha un unix socket implementazione.

Alcune ricerche su Internet hanno scoperto la seguente libreria dall'aspetto utile:

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

Link di ritorno

Scrivere una factory socket dovrebbe essere abbastanza semplice. Una volta fatto, puoi passarlo al tuo driver 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);
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top