Java 从内存运行.jar时MySQL缺少资源异常HikariCP
我创建了一个客户端程序,它使用Netty通过TCP套接字下载.jar,并创建一个新的JarInputStream实例 当我初始化程序时,所有东西都会加载,直到连接数据库时抛出MissingResourceException 最初的jar(通过netty发送的jar)在正常情况下通过terminal/commandprompt运行时运行良好。我认为这至少在我的代码中不是一个问题 我正在使用HikariCP进行数据库池,当连接到数据库时,它会抛出以下堆栈跟踪:Java 从内存运行.jar时MySQL缺少资源异常HikariCP,java,mysql,classloader,hikaricp,Java,Mysql,Classloader,Hikaricp,我创建了一个客户端程序,它使用Netty通过TCP套接字下载.jar,并创建一个新的JarInputStream实例 当我初始化程序时,所有东西都会加载,直到连接数据库时抛出MissingResourceException 最初的jar(通过netty发送的jar)在正常情况下通过terminal/commandprompt运行时运行良好。我认为这至少在我的代码中不是一个问题 我正在使用HikariCP进行数据库池,当连接到数据库时,它会抛出以下堆栈跟踪: Caused by: java.lan
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连接器java:5.1.37
HikariCP-java6:2.3.12
我可以确认LocalizedErrorMessages.properties文件确实位于com/mysql/jdbc中
我正在使用的类加载器:http://pastebin.com/9VsV32Yg
从terminal/commandprompt执行时,原始jar运行良好。
原始jar中的入口点在我的TCP应用程序中得到正确执行,因为我可以在控制台中看到它的启动输出
希望有人知道问题的原因。您需要实现公共URL getResourceString name和各种其他资源API。类加载器不只是加载类,它还提供对JAR中包含的其他资源的访问。在我扩展的java.lang.ClassLoader中,它没有声明为抽象。jar中资源的正确URL.protocol是什么?为什么不重写该方法,设置断点,然后找出答案?如果我记得的话,它是以jar://或什么开头的。