Файлы сопоставления Spring Boot * .hbm.xml не загружены в тесте

Эту проблему сложно объяснить, поэтому взгляните на проект: https://github.com/darzz/boot_bug Это минимальная настройка, воспроизводящая ошибку.

Описание. Стек приложений - это Spring Boot с Spring Data и Spring Batch. Файл testNamedQuery.hbm.xml находится в папке src / main / resources / query.

При запуске из класса Application пакетное задание завершается успешно, в журналах нет исключений. Однако при запуске из класса ApplicationNotWorking, который является точной копией, просто поместите в корень тестового источника, пакетное задание завершится ошибкой:

Caused by: org.hibernate.MappingException: Named query not known: findPersonNames
    at org.hibernate.internal.AbstractSessionImpl.getNamedQuery(AbstractSessionImpl.java:177) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final]
    at org.springframework.batch.item.database.HibernateItemReaderHelper.createQuery(HibernateItemReaderHelper.java:146) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.batch.item.database.HibernateItemReaderHelper.getForwardOnlyCursor(HibernateItemReaderHelper.java:123) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.batch.item.database.HibernateCursorItemReader.doOpen(HibernateCursorItemReader.java:185) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:144) ~[spring-batch-infrastructure-3.0.5.RELEASE.jar:3.0.5.RELEASE]
    ... 39 common frames omitted

Получается, что при запуске тестов файлы * .hbm.xml не загружаются! После исследования и отладки, я думаю, я мог бы найти причину - корневой URL-адрес блока сохранения настроен для тестов для целевых / тестовых классов, но файлы сопоставления находятся в / target / classes.

Возможная причина, на мой взгляд, может быть аналогична описанной здесь http://blog.carbonfive.com/2007/05/17/using-classpath-vs-classpath-when-loading-spring-resources/

Но я понятия не имею, как решить эту проблему в Spring Boot, не создавая конфигурацию persistence.xml только для целей тестирования. Не хочу копировать файлы * .hbm.xml из main / resources в test / resources.

Есть у кого-нибудь идеи?


person darzz    schedule 30.10.2015    source источник


Ответы (2)


Если я правильно понял проблему, вы хотите запустить Spring Boot Test, который должен получать файлы * .hbm из пути к классам.

Где вы хранили свои файлы * .hbm?

Вы должны убедиться, что все файлы * .hbm хранятся в src / main / resources. Следовательно, когда вы запускаете тестовый класс, который будет вызывать фактический класс, который ссылается на файлы * .hbm из src / main / Ресурсы.

Если приведенное выше решение не помогает, вам необходимо поделиться файловой структурой проекта.

person K. Singh    schedule 30.10.2015
comment
Привет спасибо за ответ. Я создал минимальный проект, который воспроизводит проблему и помещает его на github - посмотрите, пожалуйста (исходный вопрос отредактирован). Для меня это странные вещи, но я только начал свой путь с весенних ботинок ... - person darzz; 30.10.2015
comment
Вы делаете спокойный сервис? вам необходимо использовать интеграционное тестирование для загрузки Spring. Несмотря на создание класса springbootapplication для тестирования; вам нужно создать тестовый класс, используя @RunWith (SpringJUnit4ClassRunner.class) и @SpringApplicationConfiguration (classes = AppMain.class) - person K. Singh; 30.10.2015
comment
Нет, просто весеннее пакетное приложение, не нужно проводить сквозные тесты с локальной базой данных, но файлы * .hbm.xml не загружаются, даже если я использую то, что вы предложили. - person darzz; 02.11.2015

Я заглянул в проект git. Кажется, вам нужно изменить ApplicationNotWorking.java, поскольку это тестовый класс, поэтому он должен быть примерно таким:

// SRC / тест / Java

package bug;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.stackoverflow.springboot.BatchProcessing;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class )
public class ApplicationNotWorking {
    //Inject required bean which you want to test.
    @Autowired
    private BatchProcessing bProcess;
    //If above @Autowired BatchProcessing  do not work then you can object  
    //directly to kick off the test. BatchProcessing bProcess = new 
    //BatchProcessing();    

    //This way you can test each method
    @Test
    public void testBatchProcessing(){
        System.out.println("***BatchProcessing: " + bProcess.batchProcess());
    }
}
person K. Singh    schedule 30.10.2015
comment
Спасибо за ответ, но это все равно не решает проблемы с загрузкой файла * .hbm.xml. - person darzz; 02.11.2015