Подтвердить что ты не робот

Какое рекомендуемое место для сценариев SQL (DDL)?

Какое рекомендуемое расположение для SQL, DDL,... скриптов в стандартная структура каталогов Maven?

Я уверен, что почти каждый веб-проект использует БД и какие-то сценарии SQL, которые нужно где-то хранить, так что, возможно, было бы "лучшим" местом для хранения этих файлов?

Просьба сообщить.

4b9b3361

Ответ 1

Я думаю, что нет лучшей практики для этого. В моем прошлом проекте я создал отдельный каталог для хранения такого сценария SQL.

Например, src/main/db.

Он не будет упакован в окончательный JAR файл по умолчанию (что является предпочтительным способом в большинстве случаев), но он достаточно удобен, чтобы упаковывать его в сборке. Вы даже можете упаковать их в основной JAR артефакта, добавив соответствующее объявление ресурса или используя плагин maven build-helper.

Однако все зависит от того, как вы используете этот скрипт. Мое простое "практическое правило" заключается в том, что я хотел бы поместить их в resources/ только тогда, когда они действительно являются ресурсами, загружаемыми приложением.

Ответ 2

Я думаю, что это полностью зависит от того, когда и как обрабатываются эти скрипты:

  • Время компиляции: это то, что ваш компилятор/инструментальная цепочка потребляет и производит артефакты. Руководство maven на этом очень ясное, и, следовательно, файлы будут принадлежать где-то в src/main/, например src/main/sql или src/main/db. Хотя я бы этого не сделал, я мог видеть, что они используются задачей компиляции для изменения вашей БД. Я мог видеть, что скрипты Liquibase используются здесь, а затем выполняются с помощью задачи maven.
  • Время выполнения: они используются вашей средой выполнения и либо изменяют ее, либо потребляются ею для получения результатов. Размещение их в src/main/resources кажется разумным, так что ваши процессы времени выполнения могут потреблять их, изменяя вашу БД по вашему усмотрению - скажем, как часть вашей обработки hot-fix при развертывании или как часть вашей обычной работы по контролю версий на ходу, Опять же, возможно, вы отправляете Liquibase с вашим приложением, а затем делаете изменения на месте DB таким образом...
  • Время разработки. Мне кажется, что это самый вероятный сценарий. Где я должен хранить свой DDL, чтобы правильно отслеживать их в VCS и поддерживать мою структуру, совместимую с maven? Для меня это src/scripts/sql или src/scripts/db. Это ставит их в качестве "исходных" файлов в рамках maven, но в месте, предназначенном для использования более ad hoc.

Ответ 3

src/main/resources - хорошее место, но помните, что он упакован в вашу последнюю банку, так что это зависит от того, хотите ли вы показать это в своем производственном коде или нет.

Если нет, вы можете отфильтровать это, добавив выверку конфигурации maven-jar-plugin к соответствующему pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
         <excludes>src/main/resources/privateSubdir/**</excludes>
    </configuration>
</plugin>

Ответ 4

Я использовал бы src/main/resources для этой цели. Возможно создание там вложенной папки.

Ответ 5

Это очень зависит от вашего пробега, но в первую очередь это хорошая идея отделить ваше приложение от базовой структуры базы данных. Поэтому я рекомендую переместить все связанные с базой данных данные в отдельный проект maven. Сделав это, в сценариях базы данных есть хороший слот в/src/main/scripts.

Ответ 6

Я разделил свое приложение на несколько проектов Eclipse, по одному для каждого архитектурного уровня. Это включает в себя базу данных. По сути, я создал новый тип упаковки "база данных" только для этого проекта. Я создал папку src/main/sql и в нее вместо пакетов Java добавляю схемы базы данных (например, src/main/sql/security). Я полагаю, если вы используете каталоги, это будут сначала каталоги, а затем под ними схемы. В каждой из папок схемы я поместил папку для каждого типа объекта базы данных (таблица, представление и т.д.), Чтобы в итоге я нашел, например, src/main/sql/security/tables, а затем поместил все определения таблицы. файлы для этой схемы там. Мне интересно читать любые мнения по этому поводу.