UNIX socket implementation for Java?

后端 未结 7 680
感动是毒
感动是毒 2020-11-27 16:10

I realize that since UNIX sockets are platform-specific, there has to be some non-Java code involved. Specifically, we\'re interested in using JDBC to connect to a MySQL in

相关标签:
7条回答
  • 2020-11-27 16:28

    The JNR project (which is a loose basis for project panama) has a unix socket implementation.

    0 讨论(0)
  • 2020-11-27 16:31

    Some searching on the internet has uncovered the following useful-looking library:

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

    Wayback Link

    Writing a socket factory should be easy enough. Once you've done so, you can pass it to your 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);
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-27 16:36

    Check out the JNA library. It's a halfway house between pure Java and JNI native code

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

    0 讨论(0)
  • 2020-11-27 16:39

    As the original kohlschutter/junixsocket , mentioned in another answer seems to be dead, you can check out its forks.

    Especially fiken/junixsocket looks promising. Its author has added support for connection to PostgreSQL using unix socket via pgjdbc, for example.

    0 讨论(0)
  • 2020-11-27 16:40

    The MariaDB JDBC driver now supports this and is compatible with the MySQL JDBC driver.

    Use a JDBC url like:

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

    Worth noting that this library require including the JNA library as it uses JNA to access native unix domain sockets. It works pretty well in my testing. I saw speed improvements on CPU bound java processes from the offload to native code.

    0 讨论(0)
  • 2020-11-27 16:44

    You could use junixsocket: https://github.com/kohlschutter/junixsocket

    It already provides code for connecting to MySQL from Java (Connector/J) via Unix sockets.

    One big advantage compared to other implementations is that junixsocket uses the standard Java Socket API.

    0 讨论(0)
提交回复
热议问题