【问题标题】:MySQL MissingResourceException when running .jar from memory HikariCP从内存 HikariCP 运行 .jar 时出现 MySQL MissingResourceException
【发布时间】:2015-10-27 19:38:46
【问题描述】:

我创建了一个客户端程序,它使用 Netty 来通过 TCP 套接字下载 .jar 并创建 JarInputStream 的新实例

当我初始化程序时,一切都会加载查找,直到连接数据库时抛出 MissingResourceException。

正常通过终端/命令提示符运行时,原始 jar(通过 netty 发送的那个)运行良好。我认为这至少在我的代码中不是问题。

我正在使用 HikariCP 进行数据库池,当连接到数据库时,它会抛出这个堆栈跟踪:

Caused by: java.lang.ExceptionInInitializerError
    at com.mysql.jdbc.ConnectionPropertiesImpl.<clinit>(ConnectionPropertiesImpl.java:586)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:374)
    at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:117)
    at com.zaxxer.hikari.pool.PoolUtilities.initializeDataSource(PoolUtilities.java:110)
    at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:157)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80)
Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale nl_NL
    at com.mysql.jdbc.Messages.<clinit>(Messages.java:54)
    ... 38 more
Caused by: java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale nl_NL
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:721)
    at com.mysql.jdbc.Messages.<clinit>(Messages.java:52)
    ... 38 more

我正在使用:

mysql-connector-java:5.1.37 HikariCP-java6 : 2.3.12

我可以确认 LocalizedErrorMessages.properties 文件确实在 com/mysql/jdbc 中。

我正在使用的类加载器:http://pastebin.com/9VsV32Yg

从终端/命令提示符执行时,原始 jar 运行良好。 原始 jar 中的入口点在我的 TCP 应用程序中正确执行,因为我可以看到它的启动输出出现在控制台中。

希望有人知道导致问题的原因。

【问题讨论】:

    标签: java mysql classloader hikaricp


    【解决方案1】:

    您需要实现 public URL getResource(String name) 和其他各种资源 API。 ClassLoader 不仅仅是加载类,它还提供对 JAR 中包含的其他资源的访问。

    【讨论】:

    • 它没有在我扩展的 java.lang.ClassLoader 中声明为抽象。 jar 中资源的正确 URL.protocol 是什么?
    • 为什么不重写方法,设置断点,然后找出来?如果我记得它以 jar:// 或其他东西开头。
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2010-11-28
    • 2012-09-11
    • 2016-10-10
    • 2018-03-12
    • 2014-07-21
    相关资源
    最近更新 更多