SqlSessionFactory в службе Windows выдает исключение NullPointerException

#java #spring #mybatis

#java #весна #mybatis

Вопрос:

Когда я запускаю свое приложение из командной строки (java -jar forward.jar ) все работает нормально, никаких исключений не возникает. Однако при запуске того же приложения, что и служба Windows, я получаю исключение NullPointerException.

19.06.2014 14:44:46.442 [DefaultListableBeanFactory] [AbstractBeanFactory.java ] [ОТЛАДКА] [Поток-0 ] Игнорирование исключения создания компонента при проверке типа FactoryBean: org.springframework.beans.factory.Исключение UnsatisfiedDependencyException: ошибка при создании компонента с именем ‘phoneNumberRepository’, определенным в URL [jar:file:/C:/forward.jar !/com/forward/persistence/db/PhoneNumberRepository.class ]: Неудовлетворенная зависимость, выраженная через свойство компонента ‘SqlSessionFactory’: : Ошибка создания компонента с именем ‘SqlSessionFactory’, определенным в URL [jar:file:/C:/forward.jar !/mybatis-context.xml ]: Ошибка вызова метода init; вложенное исключение — java.lang.Исключение NullPointerException; вложенным исключением является org.springframework.beans.factory.Исключение BeanCreationException: ошибка при создании компонента с именем ‘SqlSessionFactory’, определенным в URL [jar:file:/C:/prem-forward.jar !/mybatis-context.xml ]: Сбой вызова метода init; вложенным исключением является java.lang.Исключение NullPointerException

и затем

Вызвано: org.springframework.beans.factory.Исключение NoSuchBeanDefinitionException: не найден соответствующий компонент типа [com.forward.persistence.db.PhoneNumberRepository] для зависимости: ожидается по крайней мере 1 компонент, который квалифицируется как кандидат на автоматическое подключение для этой зависимости. Аннотации зависимостей: {@org.springframework.beans.factory.annotation.Автоматическое подключение (обязательно = true)} в org.springframework.beans.factory.support.Исключение DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:988) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.Доразрешенная зависимость (DefaultListableBeanFactory.java:858) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:486 ) ~[spring-beans-3.2.4.RELEASE.jar:3.2.4.RELEASE] … 28 общих фреймов опущены

Это мой myBatis-context.xml определение:

 <import resource="classpath*:datasource-context.xml"/>

<mybatis:scan base-package="com.forward.persistence.db" />

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="com.forward.model"/> <!-- Register the short names of beans as aliases -->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.forward.persistence.db" />
</bean>
 

ОБНОВЛЕНИЕ: Определение PhoneNumberRepository.xml заключается в следующем

 <?xml version="1.0" encoding="UTF-8"?>
 
 <resultMap type="com.forward.model.PhoneNumber" id="phoneMap">
    <result column="number" property="number"/>
    <result column="partition" property="partition"/>
</resultMap>

<select id="findAll"  resultMap="phoneMap">
    SELECT *
    FROM PhoneNumber
    ORDER BY number;
</select>
 

MyBatis сопоставляет межфазный PhoneNumberRepository с этим XML-файлом для создания компонента.

Комментарии:

1. Пожалуйста, покажите определение com.forward.persistence.db.PhoneNumberRepository .

Ответ №1:

Проблема заключалась в том, что служба Java отличалась на компьютере развертывания и локальном компьютере, на котором был скомпилирован проект.