2016-11-23 64 views
0

我使用默認記錄器進行spring啓動應用程序 - Logback。據我所知,Logback本地實現了SLF4J API。java應用程序在「info」模式下運行良好,並在Logback的「調試」模式下拋出異常

我的春天啓動的應用效果很好,當我使用記錄模式「信息」或「錯誤」,但在「調試」模式引發此異常(當應用程序被啓動):

07:17:41.884 [main] ERROR o.s.boot.SpringApplication - Application startup failed 
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'config': Invocation of init method failed; nested exception is java.lang.NullPointerException 
     at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408) 
... 
... 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) 
     at com.ric.web.BillWebApplication.main(BillWebApplication.java:40) 
    Caused by: java.lang.NullPointerException: null 
     at org.hibernate.pretty.MessageHelper.collectionInfoString(MessageHelper.java:264) 
     at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:267) 
... 16 common frames omitted 

我的配置豆PostConstruct方法:

@PostConstruct 
private void setUp() throws EmptyStorable { 
    Obj obj = objMng.getByCD("Модуль начисления"); 
    calendar = new GregorianCalendar(); 
    calendar.clear(Calendar.ZONE_OFFSET); 

    obj.getDw().size(); <---Exception here! 

    calendar.setTime(parMng.getDate(obj, "Begin")); 
    setCurDt1(calendar.getTime()); 
    calendar.setTime(parMng.getDate(obj, "End")); 
    setCurDt2(calendar.getTime()); 
    String yy = String.valueOf(calendar.get(Calendar.YEAR)); 
    String mm = String.valueOf(calendar.get(Calendar.MONTH)+1); 
    mm = "0"+mm; 
    mm = mm.substring(mm.length()-2, mm.length()); 
    setPeriod(yy+mm); 
    setCntCurDays(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 
    setPartDays(1/getCntCurDays()); 
} 

我logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- Log message format --> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 
     </pattern> 
    </encoder> 
    </appender> 

    <!-- Setting the root level of logging to INFO --> 
    <root level="debug"> <--here I was changing logging mode 
    <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.ric.bill</groupId> 
    <artifactId>BillWeb</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 

     <!-- Spring --> 
     <spring-framework.version>4.2.5.RELEASE</spring-framework.version> 

     <!-- Hibernate/JPA --> 
     <hibernate.version>5.1.0.Final</hibernate.version> 

     <!-- Test --> 
     <junit.version>4.12</junit.version> 

     <start-class>com.rrr.bill2</start-class> 
     <java.version>1.8</java.version> 

    </properties> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.0.RELEASE</version> 
     <relativePath /> 
    </parent> 

    <dependencies> 

     <!-- http://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api --> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <!-- Spring and Transactions --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <!-- Support for Ehcache and others --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>${spring-framework.version}</version> 
     </dependency> 

     <!-- Hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 

     <!-- <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> 
      <version>5.1.0.Final</version> </dependency> --> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.2.2</version> 
     </dependency> 

     <!-- Test Artifacts --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring-framework.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>${junit.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <!-- http://mvnrepository.com/artifact/org.springframework/spring-aspects --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>4.2.6.RELEASE</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.3.3.RELEASE</version> 
     </dependency> 

     <!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-ehcache</artifactId> 
      <version>5.2.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
      <version>1.16.8</version> 
      <scope>provided</scope> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/c3p0/c3p0 --> 
     <dependency> 
      <groupId>c3p0</groupId> 
      <artifactId>c3p0</artifactId> 
      <version>0.9.1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-c3p0</artifactId> 
      <version>5.2.2.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-collections4</artifactId> 
      <version>4.1</version> 
     </dependency> 

     <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc14 --> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>oracle</artifactId> 
      <version>10.2.0.2.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.0</version> 
     </dependency> 


     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-loader</artifactId> 
      <scope>provided</scope> 
     </dependency> 

    </dependencies> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <configuration> 
        <excludes> 
         <exclude> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-loader</artifactId> 
         </exclude> 
        </excludes> 
       </configuration>     

       <executions> 
       <execution> 
        <goals> 
        <goal>repackage</goal> 
        </goals> 
       </execution> 
       </executions> 

      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.8</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <configuration> 
          <target> 
           <zip destfile="${project.build.directory}/${project.build.finalName}.jar" 
            update="true" compress="store"> 
            <fileset dir="${project.build.directory}/classes" 
             includes="com/ric/web/Bootstrap.class" /> 
           </zip> 
          </target> 
         </configuration> 
         <goals> 
          <goal>run</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

如果我從@PostConstruct方法中刪除代碼行,我會在應用程序的其他部分得到另一個異常。

我不明白我的應用程序,當我切換測井公司模式的怪異行爲......

UPD 1

我發現袋子變量是方法無效:

@Override 
public int size() { 
    return readSize() ? getCachedSize() : bag.size(); 
} 
休眠PersistentBag.class的

完全錯誤堆棧:

08:51:16.237 [main] ERROR o.s.boot.SpringApplication - Application startup failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'config': Invocation of init method failed; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:369) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) 
    at com.ric.web.BillWebApplication.main(BillWebApplication.java:40) 
Caused by: java.lang.NullPointerException: null 
    at org.hibernate.pretty.MessageHelper.collectionInfoString(MessageHelper.java:265) 
    at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollection(CollectionLoadContext.java:267) 
    at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:221) 
    at org.hibernate.engine.loading.internal.CollectionLoadContext.endLoadingCollections(CollectionLoadContext.java:194) 
    at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.endLoading(CollectionReferenceInitializerImpl.java:154) 
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishLoadingCollections(AbstractRowReader.java:249) 
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:212) 
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:133) 
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122) 
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86) 
    at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:688) 
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75) 
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2152) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:565) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:247) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:132) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:161) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:146) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:247) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:145) 
    at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:261) 
    at com.ric.bill.Config.setUp(Config.java:68) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365) 
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:310) 
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:133) 
    ... 16 common frames omitted 
08:51:16.241 [Resource Destroyer in BasicResourcePool.close()] DEBUG c.m.v2.c3p0.impl.NewPooledConnection - [email protected] closed by a client. 
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:566) 
    at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) 
    at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964) 
    at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:989) 
    at com.mchange.v2.resourcepool.BasicResourcePool.access$100(BasicResourcePool.java:32) 
    at com.mchange.v2.resourcepool.BasicResourcePool$5.run(BasicResourcePool.java:1174) 

回答

1

看起來這可能是Hibernate 5.1.0.Final中的一個錯誤。您是否想過提交錯誤報告以及單獨的測試用例來複制問題?

Here is where the debug logging occurs:是的,您需要啓用調試日誌記錄才能執行此代碼路徑。

Here is whereNullPointerException正在拋出。

您是否嘗試過使用調試器通過MessageHelper.java來查看究竟是什麼導致了NPE?

作爲一種變通方法,禁用調試日誌記錄CollectionLoadContext.java在Hibernate中加入下面一行到你的logback配置文件:

<logger name="org.hibernate.engine.loading.internal.CollectionLoadContext" level="INFO"/> 
+0

CK1,看到我的UPD-1 – Lev

+0

我已經更新了我一個解決辦法回答。這是我所能想到的,以防止在DEBUG級別登錄時出現'NullPointerException'。 – ck1

相關問題