Java의 UNIX 소켓 구현?
-
05-07-2019 - |
문제
나는 Unix 소켓이 플랫폼 별이기 때문에 비 자바 코드가 포함되어야한다는 것을 알고 있습니다. 특히, 우리는 JDBC를 사용하여 UNIX 도메인 소켓 만 활성화 된 MySQL 인스턴스에 연결하는 데 관심이 있습니다.
이것이 지원되는 것처럼 보이지는 않지만, 내가 읽은 내용에서 UNIX 소켓을 기반으로 JDBC에 소켓 Factory를 쓸 수 있어야합니다. 만약에 Java 용 Unix 소켓의 괜찮은 구현을 찾을 수 있습니다.
누구든지 이것을 시도한 사람이 있습니까? 그러한 구현을 아는 사람이 있습니까?
해결책
Juds Library를 확인하십시오. Java Unix 도메인 소켓 라이브러리입니다 ...
다른 팁
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 사이의 중간 집입니다.
그만큼 MariaDB JDBC 드라이버 이제 이것을 지원하며 MySQL JDBC 드라이버와 호환됩니다.
JDBC URL을 사용하십시오.
jdbc:mariadb://localhost:3306/revmgt?localSocket=/var/run/mysqld/mysqld.sock
이 라이브러리는 JNA를 사용하여 JNA를 사용하여 기본 UNIX 도메인 소켓에 액세스하므로 JNA 라이브러리를 포함해야한다는 점에 주목할 가치가 있습니다. 내 테스트에서 꽤 잘 작동합니다. 오프로드에서 기본 코드로의 CPU 바운드 Java 프로세스의 속도 향상을 보았습니다.
인터넷에서 일부 검색에서 유용한 라이브러리가 밝혀졌습니다.
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);
}
}
}