Я видел несколько вопросов, связанных с этой проблемой, но я не нашел четкого ответа.Как указать расположение файла 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.
(Я приветствую любое объяснение относительно того, почему это невозможно, если это невозможно, так как понимание будет полезно также.) – PrgrMerr
Добро пожаловать в StackOverflow! (Можете ли вы [отредактировать свой ответ] (http://stackoverflow.com/posts/36527211/edit) в качестве нового пользователя, чтобы добавить туда дополнения?) –
Возможный дубликат [Доступ к SQL-серверу из JDBC-драйвера] (http://stackoverflow.com/questions/24857193/accessing-sqlite-db-from-jdbc-driver) –