質問

UNIXソケットはプラットフォーム固有であるため、Java以外のコードが必要になることがわかっています。具体的には、JDBCを使用して、UNIXドメインソケットのみが有効になっているMySQLインスタンスに接続することに関心があります。

これはサポートされているようには見えませんが、私が読んだことから、少なくともUNIXソケットに基づいたJDBCのSocketFactoryを書くことができるはずです if まともな実装を見つけることができますJava用のUNIXソケット。

誰かがこれを試しましたか?誰でもそのような実装を知っていますか?

役に立ちましたか?

解決

JUDSライブラリをチェックアウトします。これは、Java Unixドメインソケットライブラリです...

https://github.com/mcfunley/juds

他のヒント

junixsocketを使用できます: https://github.com/kohlschutter/junixsocket

すでに、Unixソケットを介してJava(Connector / J)からMySQLに接続するためのコードを提供しています。

他の実装と比較した大きな利点の1つは、junixsocketが標準のJava Socket APIを使用することです。

別の回答で言及された元の kohlschutter / junixsocket は死んでいるようで、確認できますフォークを外します。

特に fiken / junixsocket は有望に見えます。その作成者は、たとえば pgjdbc を介してUnixソケットを使用したPostgreSQLへの接続のサポートを追加しました。

JNAライブラリをチェックアウトします。純粋なJavaとJNIのネイティブコードの中間に位置します

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

MariaDB JDBCドライバーがこれをサポートするようになりましたMySQL JDBCドライバーと互換性があります。

次のようなJDBC URLを使用します。

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

このライブラリは、JNAを使用してネイティブUNIXドメインソケットにアクセスするため、JNAライブラリを含める必要があることに注意してください。私のテストではかなりうまくいきます。 CPUにバインドされたJavaプロセスのオフロードからネイティブコードまでの速度が向上しました。

インターネットでの検索により、次の便利なライブラリが見つかりました。

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

ウェイバックリンク

ソケットファクトリの作成は十分に簡単なはずです。そうしたら、それをドライバーに渡すことができます THUSLY 。(ウェイバックリンク)。

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);
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top