2016-04-10 2 views
2

Я видел несколько вопросов, связанных с этой проблемой, но я не нашел четкого ответа.Как указать расположение файла SQLite db в Spring Maven WAR

Мне нужно упаковать файл SQLite .db в WAR и работать с этим файлом DB в WAR или взорванной WAR.

Мой проект Spring, используя Spring JDBC.

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

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> 
<property name="connectionInitSqls"> 
    <list> 
     <value>PRAGMA foreign_keys = ON</value> 
    </list> 
</property> 
<property name="driverClassName" value="org.sqlite.JDBC" /> 
<property name="url" value="jdbc:sqlite:app2.db" /> 
</bean> 

Когда я разворачивать, я могу вытащить БД в файл WAR только если поместить его в каталог WebContent/resources. Кажется, я не работаю с альтернативными URI. (например, jdbc:sqlite::resource:app2.db, jdbc:sqlite:WebContent:resources:app2.db, jdbc:sqlite:/resources/app2.db и т. д.). Я видел ответы, предполагающие, что я привязываю его к местоположению каталога развертывания tomcat конкретно, но я бы предпочел, чтобы местоположение не зависело от чего-либо вне WAR.

У кого-нибудь есть рабочий пример (с использованием XML-конфигурации для источника данных в SpringContext) для сопоставления данных (включая строку URI jigbc) и соответствующую спецификацию pom.xml maven-war-plugin (если применимо) для решения проблемы разрешения проекта файл SQLite .db, сохраненный в проекте в WAR?

Заранее спасибо.

--edit (дополнительное уточнение информации в ответ на комментарии) -

Я смог получить .db в классах subidirectory в WAR с помощью этого каталога (или через что-то в подкаталоге WebApps на а обходное сопоставление ресурсов в спецификации maven-war-plugin), но это не основная проблема.

Моя проблема: как я могу ссылаться на .db через относительный URL/URI, когда он находится в WAR. Мне нужно указать драйвер jdbc в это место через относительный путь, чтобы он мог быть доступен независимо от места развертывания.

У меня есть варианты абсолютного URL в файловой системе (я получил прямое расположение на моем компьютере для работы с

или путем в Tomcat, но опять же, по жестко заданной URL, или лучше случай, URL привязан к CATALINA_BASE с

<property name="url" value="jdbc:sqlite:/var/lib/tomcat7/webapps/APPNAME/WEB-INF/classes/app2db.db" /> 

Я видел, как это предложил, что я использую

<property name="url" value="jdbc:sqlite:${catalina.base}/webapps/APPNAME/WEB-INF/classes/app2db.db" /> 

, хотя это, похоже, не работает с моей установкой (и по-прежнему не является оптимальным решением, так как оно связано с окружающей средой развертывания).

JDBC: SQLite позволяет отображение относительных путей с использованием не предшествующее вперед слэш, но я не могу получить эту работу в рамках войны с чем-то вроде

<property name="url" value="jdbc:sqlite:WEB-INF/classes/app2db.db" /> 

Это то, что я ищу - относительное отображение пути, которое я могу отправить.db off с WAR и просто скажите кому-то развернуть на tomcat - или на любом сервере, в разумных пределах, поскольку у меня есть банки, необходимые для выполнения, в основном, упакованных с помощью приложения через Maven - (даже если их структура каталогов необычна или они не имеют отображаемых переменных пути), и он все равно сможет получить доступ к базе данных с доступом rw из вложенной WAR.

+0

(Я приветствую любое объяснение относительно того, почему это невозможно, если это невозможно, так как понимание будет полезно также.) – PrgrMerr

+0

Добро пожаловать в StackOverflow! (Можете ли вы [отредактировать свой ответ] (http://stackoverflow.com/posts/36527211/edit) в качестве нового пользователя, чтобы добавить туда дополнения?) –

+0

Возможный дубликат [Доступ к SQL-серверу из JDBC-драйвера] (http://stackoverflow.com/questions/24857193/accessing-sqlite-db-from-jdbc-driver) –

ответ

1

Когда я отправляюсь на развертывание, я могу вытащить db в файл WAR только в том случае, если поместить его в каталог WebContent/resources.

Если я помещаю my.db в Maven's default for resources<project>/src/main/resources/my.db он упакован в /my.war/WEB-INF/classes/my.db здесь.

+0

Спасибо за ответ, Герольд. Я также могу получить .db в подкаталог классов WAR через этот каталог (или через что-то в подкаталоге WebApps путем сопоставления ресурсов обхода в спецификации maven-war-plugin), но это не основная проблема. Пожалуйста, см. Мое редактирование для получения подробной информации (здесь я ограничена длиной контента). Кроме того, мои upvotes пока не регистрируются, так как моя репутация еще недостаточно выровнена. – PrgrMerr