在 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 通信链接失败的主要内容,如果未能解决你的问题,请参考以下文章
在 raspbian 上编译 pybind11 测试用例时出现致命错误