Jak czytać zmienną środowiskową systemu w kontekście aplikacji?
Chcę coś takiego:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
lub
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
w zależności od środowiska.
Czy mogę mieć coś takiego w kontekście mojej aplikacji?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
gdzie rzeczywista wartość jest ustawiana na podstawie ZMIENNEJ ŚRODOWISKA SYSTEMOWEGO
Używam Spring 3.0
assert System.getProperty("env") == "QA";
export
itp.), Pozwala tylko na odczyt właściwości systemowych Java.System.getProperty("prop")
. Jeśli chcesz przeczytać właściwość systemu operacyjnego, użyjSystem.getenv("os-env-variable")
. Zobacz javadoc: docs.oracle.com/javase/6/docs/api/java/lang/System.html#{systemEnvironment['ENV_VARIABLE_NAME']}
.W dzisiejszych czasach możesz umieścić
w twoim
@Component
,@Bean
itp., a następnie uzyskaj dostęp do właściwości za pośrednictwemEnvironment
klasy:W przypadku jednej nieruchomości w a
@Bean
Innym sposobem są poręczne
@ConfigurationProperties
fasole:Uwaga: pamiętaj tylko o ponownym uruchomieniu zaćmienia po ustawieniu nowej zmiennej środowiskowej
źródło
Environment
interfejs?java.lang.System
np. W celu uzyskania typu systemu operacyjnego,env.getProperty("os.name")
zakładając , żeenv
jest to Twoja instancjaorg.springframework.core.env.Environment
.@Autowired private Environment environment;
nie działa dla mojegoComponent
środowiska jest zawsze nullTak, możesz to zrobić
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
na przykład.Zmienna systemProperties jest wstępnie zdefiniowana, patrz 6.4.1 Konfiguracja oparta na języku XML .
źródło
W definicji komponentu bean pamiętaj, aby uwzględnić „searchSystemEnvironment” i ustawić je na „true”. A jeśli używasz go do budowania ścieżki do pliku, określ go jako plik: /// url.
Na przykład, jeśli masz plik konfiguracyjny znajdujący się w
następnie ustaw zmienną środowiskową w ten sposób:
a Twoja aplikacja może załadować plik przy użyciu takiej definicji komponentu bean:
na przykład
źródło
Używając Spring EL, możesz na przykład napisać w następujący sposób
źródło
W moim przypadku potrzebowałem uzyskać dostęp tylko do właściwości systemu, ale podać wartości domyślne na wypadek, gdyby były niezdefiniowane.
Tak to się robi:
źródło
Zadeklaruj symbol zastępczy właściwości w następujący sposób
Następnie powiedzmy, że chcesz przeczytać informacje
System.property("java.io.tmpdir")
o ziarnie Tomcat lub innym ziarnie, a następnie dodaj następujące elementy w pliku właściwości:źródło
Tak to się robi:
Pamiętaj jednak, że najpierw ładuje się sprężynę, a następnie ładuje tę ziarno MethodInvokingFactoryBean. Więc jeśli próbujesz użyć tego w swoim przypadku testowym, upewnij się, że używasz zależy od. Na przykład w tym przypadku
Jeśli używasz go dla swojej głównej klasy, lepiej ustaw tę właściwość za pomocą pliku pom.xml jako
źródło
Możesz wspomnieć o atrybutach zmiennych w pliku właściwości i zdefiniować pliki właściwości specyficzne dla środowiska, takie jak local.properties, production.propertied itp.
Teraz, w oparciu o środowisko, jeden z tych plików właściwości może zostać odczytany w jednym z detektorów wywoływanych podczas uruchamiania, takim jak ServletContextListener.
Plik właściwości będzie zawierał wartości specyficzne dla środowiska dla różnych kluczy.
Przykład „local.propeties”
Przykładowy plik „production.properties”
Aby skorzystać z tych plików właściwości, możesz skorzystać z REsource, jak wspomniano poniżej
SERVER_TYPE można zdefiniować jako zmienną środowiskową z odpowiednimi wartościami dla środowiska lokalnego i produkcyjnego.
Po wprowadzeniu tych zmian plik appplicationContext.xml będzie miał następujące zmiany
Mam nadzieję że to pomoże .
źródło
Dzięki @Yiling. To była wskazówka.
Następnie powinieneś mieć jedną zmienną środowiskową o nazwie „FILE_PATH”. Upewnij się, że uruchomiłeś ponownie terminal / IDE po utworzeniu tej zmiennej środowiskowej.
źródło