문제

나는 Unix 소켓이 플랫폼 별이기 때문에 비 자바 코드가 포함되어야한다는 것을 알고 있습니다. 특히, 우리는 JDBC를 사용하여 UNIX 도메인 소켓 만 활성화 된 MySQL 인스턴스에 연결하는 데 관심이 있습니다.

이것이 지원되는 것처럼 보이지는 않지만, 내가 읽은 내용에서 UNIX 소켓을 기반으로 JDBC에 소켓 Factory를 쓸 수 있어야합니다. 만약에 Java 용 Unix 소켓의 괜찮은 구현을 찾을 수 있습니다.

누구든지 이것을 시도한 사람이 있습니까? 그러한 구현을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

Juds Library를 확인하십시오. Java Unix 도메인 소켓 라이브러리입니다 ...

https://github.com/mcfunley/juds

다른 팁

JunixSocket을 사용할 수 있습니다. https://github.com/kohlschutter/junixsocket

UNIX 소켓을 통해 Java (Connector/J)에서 MySQL에 연결하기위한 코드를 이미 제공합니다.

다른 구현과 비교할 때 큰 장점 중 하나는 JunixSocket이 표준 Java Socket API를 사용한다는 것입니다.

원본으로 kohlschutter/junixsocket , 다른 대답에서 언급 된 것은 죽은 것처럼 보이며, 포크를 확인할 수 있습니다.

특히 Fiken/JunixSocket 유망한 것 같습니다. 저자는 UNIX 소켓을 사용하여 PostgreSQL에 대한 연결 지원을 추가했습니다. PGJDBC, 예를 들어.

JNA 라이브러리를 확인하십시오. Pure Java와 Jni Native Code 사이의 중간 집입니다.

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

그만큼 MariaDB JDBC 드라이버 이제 이것을 지원하며 MySQL JDBC 드라이버와 호환됩니다.

JDBC URL을 사용하십시오.

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

이 라이브러리는 JNA를 사용하여 JNA를 사용하여 기본 UNIX 도메인 소켓에 액세스하므로 JNA 라이브러리를 포함해야한다는 점에 주목할 가치가 있습니다. 내 테스트에서 꽤 잘 작동합니다. 오프로드에서 기본 코드로의 CPU 바운드 Java 프로세스의 속도 향상을 보았습니다.

그만큼 JNR 프로젝트 (느슨한 기초입니다 프로젝트 파나마)가 있습니다 유닉스 소켓 구현.

인터넷에서 일부 검색에서 유용한 라이브러리가 밝혀졌습니다.

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

웨이 백 링크

소켓 공장을 작성하는 것만으로는 쉽습니다. 그렇게 한 후에는 운전자에게 전달할 수 있습니다. 따라서.(웨이 백 링크).

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