SpringLiquibase работа с ресурсами

189
03 апреля 2019, 07:40

В моем проекте есть тестовый модуль, и модули-pojo с hibernate entity классами.

Тест содержит бин SpringLiquibase, задача которого перед запуском тестов накатить changelog.xml, находящийся вместе с entity классами.

Все в порядке, если changelog находится в каталоге тестового модуля. При попытке поднять модуль, указав путь относительно корня проекта, возникает исключение.

Структура:

|-project
 |-pojo-module
   |-src
     |-main
       |-resources
         |-db
           |-changelog.xml
 |-model-test
   |-src
     |-main
       |-java
         |-test
           |-config
             |-LiquibaseConfig.java
   |-resources
     |-liquibase.properties

Бин:

@Configuration
@Import(OracleDatabaseConfig.class)
public class LiquibaseConfig  {
    private static final Logger logger = LoggerFactory.getLogger(LiquibaseConfig.class);
    @Value("${liquibase.changelog.path}")
    private String changelogPath;
    @Autowired
    DataSource dataSource;
    @Bean
    SpringLiquibase springLiquibase(){
        SpringLiquibase springLiquibase = new SpringLiquibase();
        springLiquibase.setDataSource(dataSource);
        springLiquibase.setDropFirst(drop);
        springLiquibase.setChangeLog(changelogPath);
        springLiquibase.setChangeLogParameters(properties());
        return springLiquibase;
    }

Путь до changelog задан в конфигурации таким образом:

liquibase.changelog.path=\\cdm-hbm-mapping\\ekpit-model\\src\\main\\resources\\db\\changelog.xml

Исключение:

Caused by: liquibase.exception.ChangeLogParseException: Error Reading Migration File: class path resource [cdm-hbm-mapping/ekpit-model/src/main/resources/db/changelog.xml] cannot be resolved to URL because it does not exist
    at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:112)
    at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17)
    at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229)
    at liquibase.Liquibase.update(Liquibase.java:202)
    at liquibase.Liquibase.update(Liquibase.java:192)
    at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:431)
    at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)
    ... 59 more
Caused by: java.io.FileNotFoundException: class path resource [cdm-hbm-mapping/ekpit-model/src/main/resources/db/changelog.xml] cannot be resolved to URL because it does not exist
    at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195)
    at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.getResourcesAsStream(SpringLiquibase.java:161)
    at liquibase.util.StreamUtil.singleInputStream(StreamUtil.java:186)
    at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:93)
    ... 67 more

Пробовал так же получить экземпляр загрузчика классов, принадлежащих искомому модулю, но получил исключение.

try {
    springLiquibase.setChangeLog(AccessValue.class.getClassLoader().getResource(changelogPath).getFile());
} catch (NullPointerException e) {
    e.printStackTrace();
}

Исключение:

    Caused by: liquibase.exception.ChangeLogParseException: Error Reading Migration File: class path resource [D:/Projects/cdm-ora/model-test/target/test-classes/db/changelog.xml] cannot be resolved to URL because it does not exist
                at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:112)
                at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:17)
                at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:229)
                at liquibase.Liquibase.update(Liquibase.java:202)
                at liquibase.Liquibase.update(Liquibase.java:192)
                at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:431)
                at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)
                ... 59 more
Caused by: java.io.FileNotFoundException: class path resource [D:/Projects/cdm-ora/model-test/target/test-classes/db/changelog.xml] cannot be resolved to URL because it does not exist
                at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195)
                at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.getResourcesAsStream(SpringLiquibase.java:161)
                at liquibase.util.StreamUtil.singleInputStream(StreamUtil.java:186)
                at liquibase.parser.core.xml.XMLChangeLogSAXParser.parseToNode(XMLChangeLogSAXParser.java:93)
                ... 67 more
READ ALSO
Нарисовать овальный SeekBar с ограничениями

Нарисовать овальный SeekBar с ограничениями

Розовая область: по этой области овал должен двигаться по вертикалиБелый шарик должен перетаскиваться по нижней линии овала

148
Picasso в цикле, создается ли он каждый раз?

Picasso в цикле, создается ли он каждый раз?

При данном коде, Picasso создается каждый раз или же там существует что-то, что не позволяет создавать один и тот же объект Picasso?

147
regexp. Как заменить все кроме шаблона?

regexp. Как заменить все кроме шаблона?

мне нужно получить SIP/101

140
spring-data jpa возможно ли дать права пользователю?

spring-data jpa возможно ли дать права пользователю?

использую spring-data-jpa и postgresql, возможно ли через какую-нибудь аннотацию дать права конкретному пользователю на чтение таблицы, например через...

163