从blob读取大型excel时遇到问题。
的pom.xml
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
码
Workbook workbook = StreamingReader.builder()
.rowCacheSize(100) // number of rows to keep in memory (defaults to 10)
.bufferSize(4096) // buffer size to use when reading InputStream to file (defaults to 1024)
.open(in);
获得以下异常
java.lang.NoClassDefFoundError:org / slf4j / LoggerFactory 在com.monitorjbl.xlsx.StreamingReader。(StreamingReader.java:45) at com.scmcaf.dao.FileUploadChildDAOImpl.excuteSchedulerForLineDetails(FileUploadChildDAOImpl.java:131) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) 在org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 在org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocation(TransactionInterceptor.java:98) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:266) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at com.sun.proxy。$ Proxy36.excuteSchedulerForLineDetails(Unknown Source) 在com.scmcaf.controller.TestController.doSomething(TestController.java:425) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) 在org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) 在org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExenter 代码hereecutor.java:615) 在java.lang.Thread.run(Thread.java:744) 引起:java.lang.ClassNotFoundException:org.slf4j.LoggerFactory
答案 0 :(得分:0)
您需要为依赖项添加SLF4J API:https://mvnrepository.com/artifact/org.slf4j/slf4j-api
当缺少某个类时,您可以在mvnrepository.com中搜索该类。只需复制org/slf4j/LoggerFactory
答案 1 :(得分:0)
您正在使用错误版本的slf4j,因为您在pom.xml中明确声明了
如果你需要它,请尝试使用1.7.12版本或删除它,因为它是xlsx-streamer的依赖项
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
有关maven如何在同一个依赖项的多个版本的情况下工作的更多信息,请阅读Transitive Dependencies一章 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html:
依赖关系中介 - 这决定了依赖关系的版本 将在遇到多个版本的工件时使用。 目前,Maven 2.0仅支持使用“最近定义” 这意味着它将使用最接近的依赖版本 您的项目在依赖树中。你可以随时保证 版本通过在项目的POM中明确声明它。请注意,如果 两个依赖版本在依赖关系树中处于相同的深度, 直到Maven 2.0.8没有定义哪一个会赢,但从那以后 Maven 2.0.9这是声明中的顺序:第一个 宣言获胜。
"nearest definition" means that the version used will be the closest one to your project in the tree of dependencies, eg. if
A,B和C的依赖性定义为A - >; B - &gt; C - &gt; D 2.0和A. - &GT; E - &gt; D 1.0,然后在构建A时将使用D 1.0,因为从A到D到E的路径更短。你可以明确添加一个 依赖于A中的D 2.0来强制使用D 2.0
答案 2 :(得分:-1)
这是一个棘手的问题。我用log4j遇到了类似的问题。 导航到JRE的目录,例如:
C:\Program Files\Java\jre8\lib
创建一个文件夹endorsed
并删除jar log4j-1.2.17.jar
(在您的案例中使用相关版本)。然后重新启动您的应用程序。
这解决了我。