Какой путь следует использовать для поиска файла CSV, используемого в инструкции SQL (Load data local infile) При развертывании файла WAR на Tomcat

#spring #maven #tomcat #war #flyway

#spring #maven #tomcat #Война #flyway

Вопрос:

Я работал над проектом Spring Boot, я использую Flyway для управления версиями базы данных в этом проекте. В папке миграции есть несколько SQL-файлов, содержащих инструкции «Load data local infile», ссылающиеся на некоторые CSV-файлы.

Пример:

 load data local infile 'C:/Program Files (x86)/Apache Software Foundation/Tomcat 8.5/webapps/originator/WEB-INF/classes/insertData/subject.csv' INTO TABLE subject
  

Как я могу сделать этот путь относительным?
Я пытался

 './classes/insertData/subject.csv'

'./insertData/subject.csv'
  

И некоторые другие комбинации также, но не смогли устранить эту проблему

Ошибка:

Вызвано: java.sql.SQLException: не удается открыть файл ‘.. / ../insertData/subject.csv’ для команды ‘LOAD DATA LOCAL INFILE’.Из-за лежащего в основе IOException:

ЗАПУСТИТЬ ВЛОЖЕННОЕ ИСКЛЮЧЕНИЕ java.io.FileNotFoundException СООБЩЕНИЕ: ….insertDatasubject.csv (система не может найти указанный путь) STACKTRACE: java.io.FileNotFoundException: ….insertDatasubject.csv (система не может найти указанный путь)

Ответ №1:

Я смог вставить данные в таблицы из файлов CSV в процессе миграции с пути к ресурсам. В сценарии миграции я использовал весь путь, написанный, как показано ниже.

 LOAD DATA LOCAL INFILE './src/main/resources/<FOLDER>/<FILE>.csv' INTO TABLE <TABLE_NAME>
    FIELDS TERMINATED BY ','
    optionally enclosed by '"'
    LINES TERMINATED BY 'rn'
    IGNORE 1 LINES;
  

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

Ответ №2:

Вместо написания SQL-скрипта вы можете использовать миграцию на основе Java для чтения и вставки данных в таблицу. Вы можете использовать свойство «flyway.locations», чтобы указать путь для миграции на основе Java в вашем application.properties. В качестве пути по умолчанию выполните поиск «./db /migration» ресурсов. Для получения дополнительной информации проверьте https://flywaydb.org/documentation/migrations#java-based-migrations