Bagaimana membaca variabel lingkungan sistem dalam konteks aplikasi?
Saya ingin sesuatu seperti:
<util:properties id="dbProperties"
location="classpath:config_DEV/db.properties" />
atau
<util:properties id="dbProperties"
location="classpath:config_QA/db.properties" />
tergantung pada lingkungan.
Dapatkah saya memiliki sesuatu seperti ini dalam Konteks aplikasi saya?
<util:properties id="dbProperties"
location="classpath:config_${systemProperties.env}/db.properties" />
di mana nilai sebenarnya ditetapkan berdasarkan VARIABEL LINGKUNGAN SISTEM
Saya menggunakan Spring 3.0
assert System.getProperty("env") == "QA";
export
, dll), ini hanya memungkinkan membaca properti sistem Java.System.getProperty("prop")
. Jika Anda ingin membaca properti OS, gunakanSystem.getenv("os-env-variable")
. Lihat javadoc: docs.oracle.com/javase/6/docs/api/java/lang/System.html#{systemEnvironment['ENV_VARIABLE_NAME']}
.Saat ini Anda bisa menempatkan
di Anda
@Component
,,@Bean
dll., lalu akses properti melaluiEnvironment
kelas:Untuk satu properti di a
@Bean
Cara lain adalah
@ConfigurationProperties
kacang praktis :Catatan: Ingatlah untuk memulai ulang eclipse setelah menyetel variabel lingkungan baru
sumber
Environment
antarmuka?java.lang.System
misalnya untuk mendapatkan jenis OS yang Andaenv.getProperty("os.name")
anggap sebagaienv
instance Andaorg.springframework.core.env.Environment
.@Autowired private Environment environment;
tidak bekerja untukComponent
lingkungan saya selalu nullYa, Anda bisa melakukannya
<property name="defaultLocale" value="#{ systemProperties['user.region']}"/>
misalnya.Variabel systemProperties sudah ditentukan sebelumnya, lihat 6.4.1 konfigurasi berbasis XML .
sumber
Dalam definisi kacang Anda, pastikan untuk menyertakan "searchSystemEnvironment" dan setel ke "true". Dan jika Anda menggunakannya untuk membuat jalur ke file, tentukan sebagai file: /// url.
Jadi misalnya, jika Anda memiliki file konfigurasi yang terletak di
kemudian atur variabel lingkungan seperti ini:
dan aplikasi Anda dapat memuat file menggunakan definisi kacang seperti ini:
misalnya
sumber
Menggunakan Spring EL Anda dapat melihat contoh tulis sebagai berikut
sumber
Untuk kasus penggunaan saya, saya hanya perlu mengakses properti sistem, tetapi memberikan nilai default jika tidak ditentukan.
Beginilah cara Anda melakukannya:
sumber
Nyatakan pemilik tempat properti sebagai berikut
Kemudian katakanlah Anda ingin membaca
System.property("java.io.tmpdir")
untuk kacang Tomcat atau kacang apa pun lalu tambahkan berikut ini di file properti Anda:sumber
Beginilah cara Anda melakukannya:
Tapi ingat musim semi dimuat terlebih dahulu dan kemudian itu akan memuat kacang ini MethodInvokingFactoryBean. Jadi jika Anda mencoba menggunakan ini untuk kasus pengujian Anda, maka pastikan bahwa Anda menggunakan tergantung. Misalnya dalam kasus ini
Jika Anda menggunakannya untuk kelas utama Anda, sebaiknya setel properti ini menggunakan pom.xml Anda sebagai
sumber
Anda dapat menyebutkan atribut variabel Anda dalam file properti dan menentukan file properti khusus lingkungan seperti local.properties, production.propertied, dll.
Sekarang berdasarkan lingkungan, salah satu file properti ini dapat dibaca di salah satu pemroses yang dipanggil saat startup, seperti ServletContextListener.
File properti akan berisi nilai spesifik lingkungan untuk berbagai kunci.
Cicipi "local.propeties"
Contoh "production.properties"
Untuk menggunakan file properti ini, Anda dapat menggunakan REsource seperti yang disebutkan di bawah ini
SERVER_TYPE dapat didefinisikan sebagai variabel lingkungan dengan nilai yang sesuai untuk lingkungan lokal dan produksi.
Dengan perubahan ini, appplicationContext.xml akan memiliki perubahan berikut
Semoga ini membantu .
sumber
Terima kasih kepada @Yiling. Itu adalah petunjuk.
Setelah ini, Anda harus memiliki satu variabel lingkungan bernama 'FILE_PATH'. Pastikan Anda memulai ulang terminal / IDE Anda setelah membuat variabel lingkungan itu.
sumber