2016-03-28 34 views
8

Jestem zainteresowany tworzeniem jednego lub większej liczby niestandardowych programów ładujących źródła i korzystam z tych źródeł w aplikacji @ConfigurationProperties.Własny moduł ładujący źródła danych oparty na języku XML do użytku z @ConfigurationProperties

Na przykład, chciałbym rozwinąć ładowarkę źródeł właściwości, która może załadować plik XML i przekonwertować go na zestaw właściwości, które można wstrzyknąć do moich adnotowanych klas @Configuration.

@Configuration 
@ConfigurationProperties(locations="classpath:config.xml") 
public class MyConfig 
{ 
    ... 
} 

Czy taki program ładujący źródła danych oparty na języku XML jest publicznie dostępny? Jeśli nie, to w jaki sposób mam go udostępnić aplikacji po jej wdrożeniu?

Dziękuję.

+0

Teoretycznie powinno to działać po wyjęciu z pudełka, ponieważ plik właściwości może być wyrażony w formacie XML, a także jako format właściwości. Jeśli potrzebujesz jakiegoś niestandardowego formatu, będziesz musiał napisać własny 'PropertySourceLoader' lub' ApplicationContextInitializer', aby załadować swój plik. –

Odpowiedz

3

Możesz sprawdzić, w jaki sposób YamlPropertySourceLoader jest zaimplementowany. Po wdrożeniu metody

org.springframework.boot.env.YamlPropertySourceLoader#getFileExtensions 

zostanie wywołana po dodaniu coś jak ten

@ConfigurationProperties(locations="classpath:config.xml") 

Ale oglądając realizacja YamlPropertySourceLoader wygląda na to, że masz dużo do zrobienia, z parkowania itd.

należy sprawdzić, czy yaml będzie niewystarczający dla Ciebie, ponieważ daje możliwość, aby właściwości strukturalne:

na przykład t, on następujący dokument YAML:

environments: 
    dev: 
     url: http://dev.bar.com 
     name: Developer Setup 
    prod: 
     url: http://foo.bar.com 
     name: My Cool App 

nie zostaną przekształcone w tych właściwości:

environments.dev.url=http://dev.bar.com 
environments.dev.name=Developer Setup 
environments.prod.url=http://foo.bar.com 
environments.prod.name=My Cool App 

listy YAML są reprezentowane jako klucze działce z [Index] dereferencers, na przykład ten YAML:

my: 
    servers: 
     - dev.bar.com 
     - foo.bar.com 

Zostanie przekształcona w te właściwości:

my.servers[0]=dev.bar.com 
my.servers[1]=foo.bar.com 

Nawet jeśli masz gotowe dokumenty XML i powód, dla którego chcesz je załadować w konfiguracji, łatwiej jest przekonwertować XML na YAML (https://github.com/FasterXML/jackson-dataformat-xml) i niż używać istniejącego YamlPropertySourceLoader, niż napisać własny PropertySourceLoader.