|
|
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Всем привет! Сделал под Tomcat два приложения (папки в WEBAPPS), которое может работать и с MSSQL и PostGreeSql, на основе SPRING. Все основано на xml-конфигах spring и javascript-ах и теперь приложения полностью одинаковы, а различаются только конфигом подключения к базе. Замучился синхронизировать и копировать две папки приложения. Что можно придумать, чтобы был одна папка и два URL с различным подключением? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:48 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
am_sasaСделал под Tomcat два приложения (папки в WEBAPPS), которое может работать и с MSSQL и PostGreeSql, на основе SPRING. Блин. Хватит издеваться над названиями! SQL Server PostgreSQL Spring Framework am_sasaВсе основано на xml-конфигах spring и javascript-ах и теперь приложения полностью одинаковы, а различаются только конфигом подключения к базе. Замучился синхронизировать и копировать две папки приложения. Что можно придумать, чтобы был одна папка и два URL с различным подключением? Для начала перепишите работу с базой, чтобы выкинуть строку соединения из проекта. Вместо неё используйте JNDI DataSource https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html Второй шаг сложнее. И я не уверен что он сработает. Но стоит попробовать. Вам нужно в server.xml прописать два контекста на один и тот же docBase, но разные path Как здесь http://stackoverflow.com/a/12092861 А затем каждому контексту прописать локальный JNDI ресурс. И вот тут-то нужно провернуть финт ушами и дать одинаковое имя этому ресурсу. В доке написано что ресурс будет иметь scope контекста. Так что, в теории, должно получиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 11:57 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
am_sasa, другой вариант работы с несколькими базами - строка коннекта как параметр из выпадающего списка. Неужели не видел ни разу примеров такого входа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:03 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Petro123, Спасибо, но это много переделывать... мне нужно только для отладки и тестов, а в продакшене база одна, естественно. все равно, спасибо, если ничего другого не получится, придется сделать примерно это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:08 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
am_sasaмне нужно только для отладки и тестов, а в продакшене база одна, естественно. а сразу написать нельзя? )). Если отладка, то в самом IDE переключаются базы тоже легко. Тут надо про работее место программиста говорить. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:15 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Petro123Если отладка, то в самом IDE переключаются базы тоже легко. К сожалению или к счастью, IDE нет, программистов тоже (утрирую). Есть Notepad++ в нем правят xml конфиги spring и javascript, потом F5 в браузере и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:19 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо. Есть место, где по имени контекста, например, можно попробовать это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 12:22 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
am_sasaЧто можно придумать, чтобы был одна папка и два URL с различным подключением? Контексты и развёртывание - читаете, как вынести описатели развёртывания (вместе с приложением) за пределы webapps. Прописываете параметры подключения в описателе развёртывания и вычитываете их в init-методе сервлета. P.S. Не надо ничего прописывать в server.xml без веской причины - это глобальный контекст, единый на все приложения контейнера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:35 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Не надо ничего прописывать в server.xml без веской причины - это глобальный контекст, единый на все приложения контейнера. А два Context.xml ты в один war модуль как запихивать предлагаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 16:55 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА два Context.xml ты в один war модуль как запихивать предлагаешь?Никак: админу - админово. В war-е располагается context.xml с (какими-то) умалчиваемыми настройками. Админ создаёт описатели развёртывания, используя поставляемый context.xml в качестве образца и из одного war (каталога) развёртывается два (и более) контекста со своими настройками в каждом. пример реального описателя Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. настройки контейнера Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. Всё, что "снабжено рублями" задаётся через -Dсвойство="значение", что (в свою очередь) позволяет использовать единый файл конфигурации для запуска целого кластера. P.S. Мне безразлично, как это вписывается в CI и прочие автоматизации, но если вам не требуется рулить кластерами из десятков узлов для каждого из сотни клиентов - мой вариант много удобнее для админа. P.P.S. Это всё - не теория, а проверенная промышленной эксплуатацией практика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:17 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНикак: админу - админово. Ну, так мы сейчас договоримся о том что автор вообще ерундой страдает. Проблема-то у него не с администрированием, а с локальной разработкой. Но только почему он из IDE не запускает? Зачем деплоить каждый раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:24 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, так мы сейчас договоримся о том что автор вообще ерундой страдает.Нет. Да и хоть ерундой - копировать-то её зачем?Проблема-то у него не с администрированием, а с локальной разработкой.Рано или поздно разработка закончится ..Но только почему он из IDE не запускает?... и запускать придётся без IDE. Тем более, что автор и сейчас не использует среду разработки. Вопрос "как развернуть" два приложения не копируя две почти идентичные сборки - останется. Зачем деплоить каждый раз?Развёртывание необходимо, если изменились классы или/и настройки приложения. Если собственного кода немного, код несложный и нет жёстких ограничений по времени (инициативный "проект выходного дня") - установка, настройка и освоение интегрированной среды - трата времени, а: Код: plaintext Если всё, что не меняется (все сторонние библиотеки) вынесены в ${catalina.base}/lib, то время перезапуска контекста будет определятся только собственным кодом. В моём случае это было пара-тройка секунд. P.S. Да, всё это сильно отличается от общепринятого, но если нет задачи создавать код в промышленных масштабах - всё это работает ничуть не хуже. Это как завод-гигант и кустарная мастерская - разные масштабы и разные приёмы, хотя могут делать одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:43 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Да и хоть ерундой - копировать-то её зачем? Так это у меня к тебе вопрос, куда ты два context.xml поместишь при одном war модуле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:49 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак это у меня к тебе вопрос, куда ты два context.xml поместишь при одном war модуле?Есть разные варианты развёртывания: 0. Умалчиваемое развёртывание при отсутствии других описателей; 1. Описатель, встроенный в WAR (contex.xml внутри META-INF); 2. Отдельный (внешний) описатель развёртывания. Вариант один (почему-то) используется всегда, хотя его удел - начальная поставка. Далее админ заказчка или конечный пользователь создаёт два отдельных описателя, под управлением которых сервлет-контейнер развернёт одно и то же приложение в двух контекстах. Если программист считает, что использование текстового редактора и общекомпьютерная грамотность не являются свойствами его целевой аудитории - программист пишет установщик, который создаст два описателя при минимальном участии пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 17:58 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov0. Умалчиваемое развёртывание при отсутствии других описателей; Не подходит. Basil A. Sidorov1. Описатель, встроенный в WAR (contex.xml внутри META-INF); Тогда нужно 2 war Basil A. Sidorov2. Отдельный (внешний) описатель развёртывания. Верно. Вот только располагается он по пути относительно имени контекста. А что можно там отдельный путь к одному и тому же war указать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 19:09 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
а чем отличаются машины/оси/или ещё что? у меня аналогиное есть в пути для картинок, для окон и линукса они отличаются. поэтому эти пути берутся в зависимости от системы. просто идет определение системы - и подставляется тот или иной путь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2016, 21:03 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczBasil A. Sidorov2. Отдельный (внешний) описатель развёртывания.Верно. Вот только располагается он по пути относительно имени контекста.Относительно ${catalina.base}: Defining a context . А что можно там отдельный путь к одному и тому же war указать? DocBase в моём примере. Относительные пути "отсчитываются" от appBase Host -а. Чтобы "выйти за пределы" appBase требуется "много двоеточий", поэтому я использовал абсолютный путь, "привязанный" к ${catalina.base}. Внутри appBase приложение с внешним описателем развёртывания лучше не помещать, чтобы не попасть на двойное развёртывание контекста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 02:42 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
вадяпути берутся в зависимости от системы. просто идет определение системы - и подставляется тот или иной путь.Tomcat team сделал всё, чтобы программистов это не парило, но велосипеды продолжают изобретаться ... В xml-файлов настроек "рублёвая запись" используется для подстановки значений java-свойств (${имя.свойства}). Есть стандартные - catalina.home и catalina.base, например. Первое определяет каталог, в котором установлен сам tomcat, второе - каталог, в котором работает конкретный сервер (jvm сервлет-контейнера). Да, эти каталоги могут, а по хорошему - должны отличаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 02:49 |
|
||
|
Одно приложение - две БД
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь! Это просто этап отладки проекта. IDE не используется, потому что правятся xml конфиги spring и javascript файлы, Notepad++ достаточно. Чтобы более предметно, xml конфиг spring: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. отличия: Код: java 1. 2. 3. 4. Код: java 1. 2. 3. 4. только один файл с подключением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2016, 09:39 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=85&tid=2123604]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 340ms |

| 0 / 0 |
