2010-10-12 24 views
5

Mamy aplikację, która jest wdrażana 120 razy z nieco odmiennymi konfiguracjami dla każdego. Chcielibyśmy, aby konfiguracja była przechowywana w bazie danych do celów audytu i zarządzania.Konfiguracja sprężyn z bazy danych

Jak można utworzyć instancję fasoli Spring bezpośrednio z bazy danych bez użycia XML?

Dzięki

+0

Czy chcesz zachować konfigurację fasoli do łączenia się z bazą danych w bazie danych ...? –

Odpowiedz

10

Nie można mieć zerową XML config (chyba, że ​​używasz JavaConfig, który nie robi rzeczy inaczej w danym przypadku). Możesz przekazać niektóre z nich do bazy danych i użyć niestandardowego PropertyPlaceholderConfigurer. Zobacz this article, jak to osiągnąć.

+0

Cóż, możesz * mieć * zerową konfigurację XML, jeśli używasz nowego stylu '@ Configuration' /' @ Bean'. – skaffman

+0

@skaffman tak, prawda. – Bozho

2

@ Sugestia Bozho jest prawie na pewno najbardziej praktycznym rozwiązaniem, szczególnie jeśli różnice między wdrożeniami są minimalne i mogą być wyrażone za pomocą prostych właściwości skalarnych.

Alternatywą jest napisanie własnej implementacji BeanFactory. To nie jest trywialne ćwiczenie i chcesz mieć pewność, że tego właśnie potrzebujesz. Dobrym punktem wyjścia byłoby przyjrzenie się źródłu dla XmlBeanFactory, a następnie napisanie własnego (DatabaseBeanFactory, być może), który robi coś podobnego, ale pobiera definicje fasoli z bazy danych, a nie z lokalnych plików XML.

Będzie to jednak dużo dodatkowej pracy.

1

Istnieje kilka opcji, które są prostsze niż skaffman za sugestia:

  • Jeśli konfiguracja jest przechowywana w bazie danych w postaci XML, można zaimplementować własny zasób ściągam strategię nadrzędnymi AbstractApplicationContext.getResource(), dzięki czemu można załaduj konfiguracje XML z bazy danych. Zobacz kod przykładowy here. Dzięki takiemu podejściu można również w locie wygenerować konfigurację XML.

  • Jeśli konfiguracja jest przechowywana w „zdemontowanego” formie, można zbudować BeanDefinition S i dodać je do BeanDefinitionRegistry podczas inicjalizacji kontekstu przy użyciu jednej z następujących metod:

Powiązane problemy