2016-07-13 5 views
1

Я пытаюсь понять в реальных приложениях предприятия (например, веб-приложение, используя Spring Framework), которым следует управлять источником данных? Я могу думать о двух путях:Должен ли источник данных управляться Spring или web-контейнером?

(i) Источник данных, определенный в конфигурации Spring и при необходимости, может получить источник данных из контейнера Spring.

(ii) Источник данных, определенный в веб-контейнере (например), а затем приложение может получить источник данных из контейнера.

Теперь я следующие вопросы:

Q1) В сценарии (я) Я считаю, что мы можем использовать Spring, DI, чтобы ввести источник данных, как она управляется с помощью Spring. Правильно ли это?

Q2) В сценарии (II), единственный способ, чтобы получить источник данных будет использование поиска JNDI, так как источник данных конфигурируется в контейнере, и, следовательно, не Спринг сможет сделать DI. Правильно ли?

Q3) Когда источник данных управляется Spring Container, он будет иметь возможность обрабатывать connection pooling, global transaction и т.д., если да, то как? Использует ли он внутренние библиотеки сторонних разработчиков для достижения всего этого?

Любая подробная информация об этом действительно оценена.

+1

1. Да, 2. Нет (что вы делаете '' is for), 3.Да, зависит от того, какой источник данных вы настраиваете (например, HikariCP). –

ответ

2

В основном:

  • Spring определенный источник данных делает вас независимым от контейнера, и это проще развернуть приложение
  • Контейнер определенный источник данных дает силу и ответственность за конфигурации источника данных в руках администратора сервера вместо программиста
    • Это следует, возможно, лучшее разделению ответственности/роли
    • Это позволяет администратору сервера MAI ntain и обновления источника данных, не зная детали вашего приложения
    • Он решает общее «нет БД паролей в незашифрованном» требование, что делает контейнер, отвечающий за обеспечение пароль вместо вас

It is possible to refer to a JNDI resource in Spring configuration, поэтому Spring будет искать вас, и он будет доступен для DI.

Вы можете использовать сторонние библиотеки (например, Apache commons-dbcp) для объединения пулов для источников данных, управляемых Spring (я сделал это на корпоративных проектах).

Spring поддерживает управление транзакциями DB с использованием встроенного TransactionManager. Согласно documentation, кажется, что JPA доступен только в том случае, если источник данных определен в контейнере.

+2

Я согласен с вами, но вы можете удалить пароли cleartext из конфигурации Spring (например, используя jasypt) –

+1

Конечно, есть и другие способы этого сделать, я не пишу, что это единственный способ сделать это. Это довольно удобно, хотя, хороший бонус к другим причинам, и лично это была * причина использовать JNDI для меня пару раз. –

+0

@JiriTousek: Спасибо за подробный ответ. Итак, в ситуациях, когда источник данных настроен весной, насколько надежным является управление транзакциями, объединение пулов? Сама ли Spring обеспечивает поддержку таких служб или внутренне использует сторонние библиотеки для этого? Я не понимаю в этом вопросе, можете ли вы, пожалуйста, расширить этот пункт (№ 3 в моем вопросе), пожалуйста? – CuriousMind

Смежные вопросы