MyBatis啟動時掌握台無窮輸入日記的緣由及處理方法。本站提示廣大學習愛好者:(MyBatis啟動時掌握台無窮輸入日記的緣由及處理方法)文章只能為提供參考,不一定能成為您想要的結果。以下是MyBatis啟動時掌握台無窮輸入日記的緣由及處理方法正文
你能否碰到過上面的情形,掌握台無窮的輸入上面的日記:
Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
這個毛病只要在和Spring集成的情形下才會湧現。
每次只需湧現這個毛病,我都曉得是XML失足了,然則詳細是誰人XML還沒法直接確認,由於這裡的日記看不出來任何有效的信息。
想定位這個毛病,我有一個罕見的辦法,就是從法式啟動的某一個進口斷點,然後慢慢定位這個毛病。
不外這類方法依然很費事,這裡要說的是一種敏捷定位處理的方法,操作起來很簡略。
找到org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 類,鄙人面辦法:
protected void autowireByType( String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs) { 這個辦法年夜概在1200行閣下。找到這個辦法中catch異常的處所: catch (BeansException ex) { throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex); }
在throw這一行斷點便可,這個處所是最早捕捉異常的處所,當Mapper.xml文件失足的時刻,這裡的異常信息以下:
異常信息是很具體的,詳細異常文字以下:
org.springframework.core.NestedIOException:
Failed to parse mapping resource:
'file [F:\Liu\Git\bhgl\target\Franchisee-1.0\WEB-INF\classes\com\abel533\property\dao\EmployeeMapper.xml]';
nested exception is org.apache.ibatis.builder.BuilderException:
Error creating document instance.
Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 媒介中不許可有內容。
翻開這個失足的XML後,發明一個很無語的毛病:
不曉得甚麼情形,開首多了emplo,根本上只需是 XML 中出甚麼錯,都是相似的異常信息,普通都是 XML 解析出的錯。
還有一個成績,為何失足後只能看到無窮輸入的一行日記,而看不到這裡詳細的異常信息呢?
經由過程追蹤代碼,發明在org.springframework.beans.factory.support.AbstractBeanFactory類中的辦法:
protected Class<?> getTypeForFactoryBean(String beanName, RootBeanDefinition mbd) { if (!mbd.isSingleton()) { return null; } try { FactoryBean<?> factoryBean = doGetBean(FACTORY_BEAN_PREFIX + beanName, FactoryBean.class, null, true); return getTypeForFactoryBean(factoryBean); } catch (BeanCreationException ex) { // Can only happen when getting a FactoryBean. if (logger.isDebugEnabled()) { logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex); } onSuppressedException(ex); return null; } }
這裡捕捉異常後,直接return null招致異常被吞。
因為這裡是最初一層捕捉異常的處所,並且這個處所捕捉到的異常規模會更廣,是以在這裡斷點檢查成績也是很不錯的選擇,因為這裡經由多層異常處置,真實的毛病信息隱蔽的比擬深,以下圖:
看到這兒,信任再碰到這個成績的時刻應當會很輕易處理了。