在 Raspbian GNU/Linux 11 (bullseye) 上执行 jar 时 Java 通信链接失败

Posted

技术标签:

【中文标题】在 Raspbian GNU/Linux 11 (bullseye) 上执行 jar 时 Java 通信链接失败【英文标题】:Java communication link failure when executing jar on Raspbian GNU/Linux 11 (bullseye) 【发布时间】:2022-01-13 09:49:12 【问题描述】:

我使用 Eclipse 在 Windows 上创建了一个 java 程序,它连接到托管在 Hostinger 上的 mysql 数据库。我设置了连接,以便能够从外部访问数据库。当我在 Windows 上运行程序时,我可以毫无错误地访问我的数据库。

然后我将这个程序导出到一个 jar 文件并在我的 Raspberry 上创建了一个 localhost 数据库并尝试这个程序,它运行良好。 现在,当我更改数据库以访问 Hostinger 上的数据库时,我的 Raspberry 上出现此错误:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

为什么我在 Raspberry 上出现此错误,但在 windows 上却没有? 我正在使用命令运行程序:java -jar myprogram.jar

这里是代码: db.properties

# mysql properties
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://ip_hostinger:3306/database_name
mysql.username=user
mysql.password=pwd

Database.java

public static MysqlDataSource getMySQLDataSource() throws FileNotFoundException, IOException 
        
        Properties props = new Properties();
        InputStream is = null;
        MysqlDataSource ds = null;

        is = Database.class.getResourceAsStream("db.properties");
        props.load(is);

        ds = new MysqlConnectionPoolDataSource();
        ds.setURL(props.getProperty("mysql.url"));
        ds.setUser(props.getProperty("mysql.username"));
        ds.setPassword(props.getProperty("mysql.password"));

        return ds;
    

        public static ArrayList<String> DatabaseSelect() throws IOException, SQLException 
        
        Connection con = null;
        Statement stm = null;
        ResultSet rs = null;
        
        ArrayList<String> resultSelect = new ArrayList<String>();
        
        try 
            con = getMySQLDataSource().getConnection();
            stm = con.createStatement();
            rs = stm.executeQuery("SELECT * from table");
            while (rs.next()) 
                String str = rs.getString("str");
                resultSelect.add(str);
            
            
         catch (SQLException e) 
            e.printStackTrace();
         finally 
            if (con != null) 
                con.close();
            
        
        return resultSelect;
    

【问题讨论】:

请发布完整的异常堆栈跟踪 如果您设法解决了问题,请将解决方案发布为答案,并在超时后接受。请不要在问题本身中编辑解决方案。顺便说一句:如果这是解决方案,那么您的 MySQL 服务器版本可能已经过时了,更好的解决方案是升级您的 MySQL 服务器。 【参考方案1】:

通过在文件 /usr/lib/jvm/java-11-openjdk-armhf/conf/security/java.security 中注释这些行来解决问题

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
     DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
     include jdk.disabled.namedCurves

【讨论】:

以上是关于在 Raspbian GNU/Linux 11 (bullseye) 上执行 jar 时 Java 通信链接失败的主要内容,如果未能解决你的问题,请参考以下文章

Deepin GNU/Linux 15.11

在 raspbian 上编译 pybind11 测试用例时出现致命错误

在GNU Linux中怎样得到一个进程当前的流量

GNU Linux高并发性能优化方案

我将使用啥 GNU/Linux 命令行工具对文件执行搜索和替换?

如何在 raspbian 上安装最新版本的 nginx?