Używamy poniższego kodu, aby wstrzyknąć fasolom Spring właściwości z pliku właściwości.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/my.properties"/>
</bean>
<bean id="blah" class="abc">
<property name="path" value="${the.path}"/>
</bean>
Czy istnieje sposób, w jaki możemy uzyskać programistyczny dostęp do właściwości? Próbuję zrobić jakiś kod bez iniekcji zależności. Więc chciałbym mieć taki kod:
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");
spring
properties
Marcus Leon
źródło
źródło
Odpowiedzi:
A co z PropertiesLoaderUtils ?
źródło
PropertyPlaceholderConfigurer
, choć to przesada jak na to zadanie.Jeśli wszystko, co chcesz zrobić, to uzyskać dostęp do wartości zastępczej z kodu, jest
@Value
adnotacja:Aby uzyskać dostęp do symboli zastępczych z SPEL, użyj następującej składni:
Aby udostępnić konfigurację widokom, które mają wyłączony SPEL, można użyć tej sztuczki:
A następnie użyj ekspozytora, aby wyświetlić właściwości w widoku:
Następnie użyj widocznych właściwości, takich jak:
To rozwiązanie ma tę zaletę, że można polegać na standardowej implementacji symbolu zastępczego wprowadzonej przez tag context: property-placeholder.
Na koniec, jeśli naprawdę potrzebujesz a do przechwytywania wszystkich właściwości zastępczych i ich wartości, musisz potokować je przez StringValueResolver, aby upewnić się, że symbole zastępcze działają w wartościach właściwości zgodnie z oczekiwaniami. Poniższy kod zrobi to.
źródło
KREDYT : Programowy dostęp do właściwości w Spring bez ponownego czytania pliku właściwości
Znalazłem fajną implementację programowego dostępu do właściwości wiosną bez ponownego ładowania tych samych właściwości, które zostały już załadowane przez sprężynę. [Ponadto nie jest wymagane zakodowanie na stałe lokalizacji pliku właściwości w źródle]
Dzięki tym zmianom kod wygląda na bardziej przejrzysty i łatwiejszy w utrzymaniu.
Koncepcja jest dość prosta. Po prostu rozszerz domyślny element zastępczy właściwości sprężyny (PropertyPlaceholderConfigurer) i przechwyć właściwości, które ładuje w zmiennej lokalnej
Przykład użycia
Sprężynowe zmiany konfiguracji
Mam nadzieję, że pomoże to rozwiązać problemy, które masz
źródło
Zrobiłem to i zadziałało.
To powinno działać.
źródło
Można również użyć narzędzi sprężynowych lub wczytać właściwości za pośrednictwem elementu PropertiesFactoryBean.
lub:
Następnie możesz je odebrać w swojej aplikacji za pomocą:
i dodatkowo użyj tych właściwości w swojej konfiguracji:
Jest to również w dokumentach: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties
źródło
Utwórz klasę jak poniżej
Następnie wszędzie tam, gdzie chcesz uzyskać dostęp do właściwości użytkowania
- napisz metody pobierające i ustawiające w klasie akcesora
źródło
Jak wiesz, nowsze wersje Springa nie używają PropertyPlaceholderConfigurer, a teraz używają innej koszmarnej konstrukcji o nazwie PropertySourcesPlaceholderConfigurer. Jeśli próbujesz uzyskać rozwiązane właściwości z kodu i chcesz, aby zespół Spring dał nam na to sposób dawno temu, zagłosuj na ten post! ... bo tak to się robi w nowy sposób:
Podklasa PropertySourcesPlaceholderConfigurer:
Aby go użyć, upewnij się, że używasz podklasy w swojej @Configuration i zapisz odniesienie do niej do późniejszego użytku.
Stosowanie:
źródło
Oto kolejna próbka.
źródło
To mi pomoże:
źródło
Spowoduje to rozwiązanie wszelkich zagnieżdżonych właściwości.
źródło
Możesz uzyskać swoje właściwości poprzez
Environment
zajęcia. Zgodnie z dokumentacją:Mając środowisko jako
env
zmienną, po prostu wywołaj:Możesz uzyskać swoje `` surowe '' właściwości poprzez:
Przeszuka wszystkie źródła nieruchomości, które zarejestrowała wiosna.
Możesz uzyskać Środowisko poprzez:
ApplicationContextAware
a następnie wywołującgetEnvironment()
kontekstEnvironmentAware
.Uzyskuje się to poprzez implementację klasy, ponieważ właściwości są rozwiązywane na wczesnym etapie uruchamiania aplikacji, ponieważ mogą być wymagane do budowy fasoli.
Przeczytaj więcej na temat dokumentacji: dokumentacja środowiska wiosennego
źródło
Ten post wyjaśnia również, jak uzyskać dostęp do właściwości: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html
Możesz uzyskać dostęp do właściwości wczytanych przez obiekt zastępczy właściwości sprężyny nad takim komponentem bean sprężyny:
źródło
w servlet-context.xml możesz potem bezpośrednio używać swojego pliku wszędzie
źródło
Użyj poniższego kodu w swoim pliku konfiguracyjnym sprężyny, aby załadować plik ze ścieżki klasy aplikacji
źródło
To najlepszy sposób, w jaki mam to do pracy:
źródło