Как получить доступ к родителю `classpath:` в URL JDBC? - PullRequest
0 голосов
/ 23 января 2019

При запуске теста я использую базу данных h2, и файл init.sql расположен по адресу src/main/test/db/init.sql.

Если я использую URL JDBC следующим образом: spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql', программа будет искать его по адресу src/main/test/db/resources/db/init.sql, что не то, что найти init.sql.

Если я укажу вот так: spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/../db/init.sql', появится сообщение об ошибке, в котором говорится, что файл не найден.

Вопрос в том, какой URL мне нужно указать, чтобы JDBC искал init.sql в src/main/test/db/init.sql?

1 Ответ

0 голосов
/ 23 января 2019

При запуске теста файл init.sql ищется в папке ресурсов, потому что по умолчанию для maven проектов при запуске теста, содержимое каталога /src/test/resources помещается в корень вашегоCLASSPATH.Поэтому, когда вы указываете classpath в качестве переменной среды в свойстве spring.datasource.druid.url, как и в вашем вопросе, к каталогу /src/test/resources/ добавляется префикс.

Чтобы ответить на ваш вопрос, убедитесь, что файл init.sqlможно найти, используя указанное свойство spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:/db/init.sql', вам нужно изменить папку ресурсов maven по умолчанию, изменив тег сборки pom.xml следующим образом:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/test</directory>
        </resource>
    </resources>
</build>

Я бы рекомендовал для лучшей практики,вы скорее перемещаете файл init.sql в папку src/test/resources и используете свойство spring.datasource.druid.url=jdbc:h2:mem:s;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:init.sql', которое должно работать.

...