Enfrentando un problema al leer un gran Excel de blob.

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>

código

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);

Obteniendo debajo de la excepción

java.lang.NoClassDefFoundError: org / slf4j / LoggerFactory en com.monitorjbl.xlsx.StreamingReader. (StreamingReader.java:45) en com.scmcaf.dao.FileUploadChildDAOImpl.excuteSchedulerForLineDetails.Impreso. .invoke0 (Native Method) en sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) en sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) en java.lang.revoct.Method.intoke.information.Method. : 606) en org.springframework. ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:157) en org.springframework.transaction.interceptor.TransactionInterceptor $ 1.proceedWithInvocat ion (TransactionInterceptor.java:98) en org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction (TransactionAspectSupport.java:266) en org.springframework.transaction.interceptor.TransactionInterceptor.invoketor.workcenter. .aop.framework.ReflectiveMethodInvocation.proceed (ReflectiveMethodInvocation.java:179) en org.springframework.aop.framework.JdkDynamicAopProxy.invoke (JdkDynamicAopProxy.java:207) en com.sun.proxy. $ Proxyduck. com.scmcaf.controller.TestController.doSomething (TestController.java:425) en sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) at sun.reg. invocar (DelegatingMethodAccessorImpl.java:43) en java.lang.reflect.Method.invoke (Method.java:606) a t org.springframework.scheduling.support.ScheduledMethodRunnable.run (ScheduledMethodRunnable.java:65) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run (DelegatingErrorHandlingRunnable.java. (Executors.java:471) en java.util.concurrent.FutureTask.runAndReset (FutureTask.java:304) en java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java.curva.java.java.java.java.java .ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:293) en java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) en java.util.concurrent.Than.exe. ) en java.lang.Thread.run (Thread.java:744) Causado por: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

0
Shrikant Ganorkar 18 ene. 2018 a las 13:22

3 respuestas

La mejor respuesta

Está utilizando la versión incorrecta de slf4j en la que declara explícitamente en su pom.xml

Intente usar la versión 1.7.12 si la necesita explícitamente o elimínela, ya que es una dependencia para xlsx-streamer

<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 <version>1.7.12</version>
</dependency>

Para obtener más información sobre cómo funciona Maven en caso de versión múltiple de la misma dependencia, lea el capítulo Dependencias transitivas https://maven.apache.org/guides/introduction/ Introduccion a la dependencia-mecanismo.html:

Mediación de dependencia: esto determina qué versión de una dependencia se utilizará cuando se encuentren varias versiones de un artefacto. Actualmente, Maven 2.0 solo admite el uso de la "definición más cercana", lo que significa que usará la versión de la dependencia más cercana a su proyecto en el árbol de dependencias. Siempre puede garantizar una versión declarándola explícitamente en el POM de su proyecto. Tenga en cuenta que si dos versiones de dependencia están a la misma profundidad en el árbol de dependencia, hasta Maven 2.0.8 no se definió cuál ganaría, pero desde Maven 2.0.9 es el orden en la declaración lo que cuenta: la primera declaración gana.

"nearest definition" means that the version used will be the closest one to your project in the tree of dependencies, eg. if

las dependencias para A, B y C se definen como A -> B -> C -> D 2.0 y A -> E -> D 1.0, entonces D 1.0 se utilizará al construir A porque la ruta de A a D a través de E Es más corto. Podría agregar explícitamente una dependencia a D 2.0 en A para forzar el uso de D 2.0

0
Laurent B 18 ene. 2018 a las 11:34

Debe agregar una API SLF4J a sus dependencias: https://mvnrepository.com/artifact /org.slf4j/slf4j-api

Cuando falta alguna clase, puede buscarla en mvnrepository.com. Simplemente copie allí org/slf4j/LoggerFactory

0
Victor 18 ene. 2018 a las 10:31

Este es complicado. Tuve un problema similar como este con log4j. Navegue al directorio de su JRE, por ejemplo:

C:\Program Files\Java\jre8\lib

Cree una carpeta endorsed y suelte el jar log4j-1.2.17.jar (use la versión relevante en su caso) en ella. Luego reinicie su aplicación.

Esto lo resolvió para mí.

-1
Ayo K 18 ene. 2018 a las 10:32