Pengenalan Netflix Archaius dengan Spring Cloud

1. Gambaran keseluruhan

Netflix Archaius adalah perpustakaan pengurusan konfigurasi yang kuat.

Ringkasnya, ini adalah kerangka yang dapat digunakan untuk mengumpulkan sifat konfigurasi dari banyak sumber yang berbeza, yang menawarkan akses cepat dan selamat untuk benang ke dalamnya.

Di samping itu, perpustakaan membolehkan sifat berubah secara dinamik pada waktu runtime, memungkinkan sistem mendapatkan variasi ini tanpa perlu memulakan semula aplikasi.

Dalam tutorial pengenalan ini, kami akan menyediakan konfigurasi Spring Cloud Archaius yang ringkas, kami akan menerangkan apa yang berlaku di bawahnya, dan akhirnya, kami akan melihat bagaimana Spring membenarkan memperluas persediaan asas.

2. Ciri-ciri Netflix Archaius

Seperti yang kita ketahui, Spring Boot sudah menyediakan instrumen untuk menguruskan konfigurasi luaran, jadi mengapa perlu menyiapkan mekanisme yang berbeza?

Nah, Archaius menawarkan beberapa ciri berguna dan menarik yang tidak dipertimbangkan oleh kerangka konfigurasi lain . Beberapa perkara penting adalah:

  • Sifat dinamik dan Jenis
  • Mekanisme Panggilan Balik yang dipanggil pada mutasi harta tanah
  • Sedia untuk digunakan pelaksanaan sumber konfigurasi dinamik seperti URL, JDBC dan Amazon DynamoDB
  • MBM JMX yang dapat diakses oleh Spring Boot Actuator atau JConsole untuk memeriksa dan memanipulasi sifat
  • Pengesahan sifat dinamik

Faedah ini boleh bermanfaat dalam banyak senario.

Oleh itu, Spring Cloud telah mengusahakan perpustakaan yang memungkinkan untuk mengkonfigurasi 'Spring Environment Bridge' dengan mudah supaya Archaius dapat membaca hartanah dari Spring Environment.

3. Kebergantungan

Mari tambahkan spring-cloud-starter-netflix-archaius ke aplikasi kami, ia akan menambahkan semua kebergantungan yang diperlukan untuk projek kami .

Sebagai pilihan, kami juga dapat menambahkan spring-cloud-netflix ke bahagian dependencyManagement kami dan bergantung pada spesifikasi versi artifaknya:

  org.springframework.cloud spring-cloud-starter-netflix-archaius      org.springframework.cloud spring-cloud-netflix 2.0.1.RELEASE pom import   

Nota: kami boleh memeriksa Maven Central untuk mengesahkan bahawa kami menggunakan versi terbaru perpustakaan pemula.

4. Penggunaan

Setelah kami menambahkan kebergantungan yang diperlukan, kami akan dapat mengakses harta tanah yang dikendalikan oleh kerangka kerja :

DynamicStringProperty dynamicProperty = DynamicPropertyFactory.getInstance() .getStringProperty("baeldung.archaius.property", "default value"); String propertyCurrentValue = dynamicProperty.get();

Mari kita buat contoh ringkas untuk melihat bagaimana cara ini tersedia di luar kotak.

4.1. Contoh Pantas

Secara lalai, ia menguruskan secara dinamik semua sifat yang ditentukan dalam fail bernama config.properties di classpath aplikasi .

Oleh itu, mari kita tambahkan ke folder sumber kami dengan beberapa sifat sewenang-wenangnya:

#config.properties baeldung.archaius.properties.one=one FROM:config.properties

Sekarang kita memerlukan kaedah untuk memeriksa nilai-nilai hartanah pada waktu tertentu. Dalam kes ini, kami akan membuat RestController yang mengambil nilai sebagai tindak balas JSON:

@RestController public class ConfigPropertiesController { private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory.getInstance() .getStringProperty("baeldung.archaius.properties.one", "not found!"); @GetMapping("/property-from-dynamic-management") public String getPropertyValue() { return propertyOneWithDynamic.getName() + ": " + propertyOneWithDynamic.get(); } }

Mari mencubanya. Kami dapat mengirim permintaan ke titik akhir ini, dan perkhidmatan akan mengambil nilai yang disimpan di config.properties seperti yang diharapkan.

Tidak ada masalah besar setakat ini, bukan? Ok, mari kita teruskan dan ubah nilai harta tanah dalam fail classpath, tanpa memulakan semula perkhidmatan. Akibatnya, setelah satu menit atau lebih, panggilan ke titik akhir akan mengambil nilai baru. Cukup sejuk, bukan?

Seterusnya, kami akan cuba memahami apa yang berlaku di bawah tudung.

5. Bagaimana Ia Berfungsi?

Pertama sekali, mari kita cuba memahami gambaran besarnya.

Archaius adalah lanjutan dari perpustakaan Konfigurasi Commons Apache, menambahkan beberapa ciri bagus seperti kerangka pengundian untuk sumber dinamik, dengan hasil yang tinggi dan pelaksanaan yang selamat.

The bunga-awan Netflix-archaius perpustakaan datang kemudian ke dalam bermain, menggabungkan semua sumber harta yang berlainan, dan auto-mengkonfigurasi alat Archaius dengan sumber-sumber ini.

5.1. Perpustakaan Netflix Archaius

Ia berfungsi menentukan Konfigurasi Komposit, kumpulan pelbagai konfigurasi yang diperoleh dari sumber yang berbeza.

Lebih-lebih lagi, beberapa Sumber Konfigurasi tersebut mungkin menyokong untuk disurvei pada waktu berjalan untuk perubahan. Archaius menyediakan antara muka dan beberapa pelaksanaan yang telah ditentukan untuk mengkonfigurasi jenis sumber ini.

Pengumpulan sumber dikategorikan secara hierarki sehingga jika harta tanah terdapat dalam pelbagai konfigurasi, nilai akhir akan menjadi yang berada di slot paling atas.

Akhirnya, ConfigurationManager mengendalikan konteks Konfigurasi dan penyebaran seluruh sistem. Ia boleh memasang Konfigurasi Komposit terakhir, atau mengambil yang dipasang untuk pengubahsuaian.

5.2. Sokongan Spring Cloud

The main task of the Spring Cloud Archaius library is to merge all the different configuration sources as a ConcurrentCompositeConfiguration and install it using the ConfigurationManager.

The order of precedence in which the library defines the sources is:

  1. Any Apache Common Configuration AbstractConfiguration bean defined in the context
  2. All the sources defined in the Autowired Spring ConfigurableEnvironment
  3. The default Archaius sources, which we saw in the example above
  4. Apache's SystemConfiguration and EnvironmentConfiguration sources

Another useful feature this Spring Cloud library provides is the definition of an Actuator Endpoint to monitor and interact with the properties. Its usage is out of the scope of this tutorial.

6. Adapting and Extending the Archaius Configuration

Now that we have a better understanding of how Archaius works, we are in good shape to analyze how to adapt the configuration to our application, or how to extend the functionality using our configuration sources.

6.1. Archaius Supported Configuration Properties

If we want Archaius to take into account other configuration files similar to the config.properties one, we can define the archaius.configurationSource.additionalUrls system property.

The value is parsed to a list of URLs separated by a comma, so, for example, we can add this system property when we launch the application:

-Darchaius.configurationSource.additionalUrls= "classpath:other-dir/extra.properties, file:///home/user/other-extra.properties"

Archaius will read the config.properties file first, and then the other ones, in the specified order. Because of this, the properties defined in the latter files will have priority over the prior ones.

There are a couple of other system properties we can use to configure various aspects of the Archaius default configuration:

  • archaius.configurationSource.defaultFileName: the default configuration file name in the classpath
  • archaius.fixedDelayPollingScheduler.initialDelayMills: initial delay before reading the configuration source
  • archaius.fixedDelayPollingScheduler.delayMills: delay between two reads of the source; the default value is 1 minute

6.2. Adding Additional Configuration Sources with Spring

How could we add a different Configuration Source to be managed by the described framework? And how could we manage dynamic properties with higher precedence than the ones defined in the Spring Environment?

Reviewing what we mentioned in section 4.2, we can realize that the highest configurations in the Composite Configuration defined by Spring are the AbstractConfiguration beans defined in the context.

Thus, all we need to do is add an implementation of this Apache's abstract class to our Spring Context using some of the functionality provided by Archaius, and the Spring's autoconfiguration will spontaneously add it to the managed configuration properties.

To keep things simple, we'll see an example where we configure a properties file similar to the default config.properties but with the difference of having a higher precedence than the rest of Spring environment and application properties:

@Bean public AbstractConfiguration addApplicationPropertiesSource() { URL configPropertyURL = (new ClassPathResource("other-config.properties")).getURL(); PolledConfigurationSource source = new URLConfigurationSource(configPropertyURL); return new DynamicConfiguration(source, new FixedDelayPollingScheduler()); }

Lucky for us, it contemplates several configuration sources that we can set up with almost no effort. Their configuration is out of the scope of this introductory tutorial.

7. Conclusion

Kesimpulannya, kami telah mengetahui tentang Archaius dan beberapa ciri menarik yang ditawarkannya untuk memanfaatkan pengurusan konfigurasi.

Juga, kami melihat bagaimana perpustakaan autokonfigurasi Spring Cloud dimainkan yang membolehkan kami menggunakan API perpustakaan ini dengan mudah.

Sekali lagi, kita dapat menemui semua contoh yang ditunjukkan dalam tutorial ini dan yang lain di repo Github kami.