Rumah > Java > javaTutorial > Cara menggunakan EnvironmentPostProcessor SpringBoot

Cara menggunakan EnvironmentPostProcessor SpringBoot

PHPz
Lepaskan: 2023-05-22 09:25:05
ke hadapan
1577 orang telah melayarinya

    1. Latar belakang

    Pusat konfigurasi Apollo telah digunakan dalam projek sebelumnya Selepas dok dengan pusat konfigurasi Apollo, sifat konfigurasi pusat boleh dipaparkan dalam program Digunakan, jadi bagaimana ini dicapai? Bilakah sifat pusat konfigurasi dimuatkan ke dalam program? Jadi jika kita mengetahui bagaimana ini dilaksanakan, bolehkah kita 从任何地方加载配置属性, 配置属性的加解密功能呢?

    2. Keperluan

    Cara menggunakan EnvironmentPostProcessor SpringBoot

    从上图中得知,我们的需求很简单,即我们自己定义的属性需要比配置文件中的优先级更高。

    3 Analisis

    1 Sifat konfigurasi kita sendiri

    Apabila kita ingin menggunakan sifat konfigurasi dalam Kacang, maka sifat konfigurasi kita mesti dimasukkan ke dalam Spring ke dalam Persekitaran sebelum Kacang dijadikan instantiated. Iaitu, antara muka kami perlu dipanggil sebelum application context refreshed, dan EnvironmentPostProcessor boleh melaksanakan fungsi ini dengan tepat.

    2. Keutamaan untuk mendapatkan sifat konfigurasi

    Kami tahu bahawa terdapat keutamaan untuk mendapatkan sifat dalam Spring.
    Sebagai contoh, kami mempunyai atribut konfigurasi berikut username

    ├─application.properties
    │   >> username=huan
    ├─application-dev.properties
    │   >> username=huan.fu
    Salin selepas log masuk

    Jadi apakah nilai username pada masa ini? Di sini saya meminjam gambar daripada Apollo untuk menjelaskan masalah ini.

    Pautan rujukan: https://www.apolloconfig.com/#/zh/design/apollo-design

    Cara menggunakan EnvironmentPostProcessor SpringBoot

    Spring telah ditambah sejak versi 3.1 ConfigurableEnvironment dan PropertySource:

    ConfigurableEnvironment
    Salin selepas log masuk
    • Spring's ApplicationContext akan mengandungi Persekitaran (melaksanakan antara muka ConfigurableEnvironment)

    • ConfigurableEnvironment itu sendiri mengandungi many masing-masing PropertySource

    PropertySource

    • PropertySource

    • boleh difahami sebagai banyak Kunci - Atribut nilai konfigurasi

    Seperti yang dapat dilihat daripada rajah skema di atas, key mempunyai keutamaan yang lebih tinggi dalam PropertySource yang pertama Contoh di atas adalah dalam SpringBoot< Nilai 🎜 > ialah username. huan.fu

    3. Bila hendak menambah konfigurasi kita sendiri

    Dari langkah kedua

    kita dapat melihat bahawa 获取配置属性的优先级 dilaksanakan terlebih dahulu, jadi untuk konfigurasi kita berkuat kuasa, ia mestilah diletakkan Lebih jauh ke hadapan, lebih baik. PropertySource

    Cara menggunakan EnvironmentPostProcessor SpringBoot

    Seperti yang dapat dilihat daripada rajah di atas, SpringBoot memuatkan pelbagai konfigurasi melalui

    , dan pelaksanaan khusus dicapai oleh EnvironmentPostProcessor. Kemudian kita tulis kelas pelaksanaan ConfigDataEnvironmentPostProcessor diri kita sendiri, kemudian laksanakan selepas EnvironmentPostProcessor dan tambahkannya pada kedudukan pertama dalam ConfigDataEnvironmentPostProcessor. Environment

    Cara menggunakan EnvironmentPostProcessor SpringBoot

    4. Pelaksanaan

    1 Memperkenalkan kebergantungan SpringBoot

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.6</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.huan.springcloud</groupId>
        <artifactId>springboot-extension-point</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-extension-point</name>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    </project>
    Salin selepas log masuk

    2 >3. Tulis atribut tersuai dan tambahkannya pada Persekitaran Spring

    Nota: Cara menggunakan EnvironmentPostProcessor SpringBoot1 Jika anda mendapati tiada keluaran log dalam program, semak sama ada anda telah menggunakan

    Keluarkan log Pada masa ini, log tidak boleh dikeluarkan kerana sistem log belum dimulakan.


    vim application.properties
    Salin selepas log masuk
    slf4j4 Jadikan konfigurasi tersuai berkuat kuasa melalui SPI解决方法如下:

    1 Cipta fail

    baharu di bawah

    src/main/resourcesMETA-INF/spring.factories<🎜. >

    2. Konfigurasi

    username=huan
    Salin selepas log masuk
    Cara menggunakan EnvironmentPostProcessor SpringBoot5 Tulis kelas ujian dan keluarkan nilai atribut nama pengguna yang ditentukan

    SpringBoot版本
    		>= 2.4 可以参考上图中的使用 DeferredLogFactory 来输出日志
    		< 2.4
    			1、参考如下链接 https://stackoverflow.com/questions/42839798/how-to-log-errors-in-a-environmentpostprocessor-execution
    			2、核心代码:
    				@Component
    				public class MyEnvironmentPostProcessor implements
    				        EnvironmentPostProcessor, ApplicationListener<ApplicationEvent> {
    				    private static final DeferredLog log = new DeferredLog();
    				    @Override
    				    public void postProcessEnvironment(
    				            ConfigurableEnvironment env, SpringApplication app) {
    				        log.error("This should be printed");
    				    }
    				    @Override
    				    public void onApplicationEvent(ApplicationEvent event) {
    				        log.replayTo(MyEnvironmentPostProcessor.class);
    				    }
    				}
    Salin selepas log masuk

    6 🎜>

    5. Nota

    1 Log tidak boleh dikeluarkan

    Rujuk penyelesaian yang disediakan oleh

    di atas. Cara menggunakan EnvironmentPostProcessor SpringBoot

    2. Pastikan konfigurasi tidak berkuat kuasa

    Semak keutamaan EnvironmentPostProcessor untuk melihat sama ada nilai keutamaan yang dikembalikan oleh @Order atau Ordered adalah salah.

  • 看看别的地方是否实现了 EnvironmentPostProcessor或ApplicationContextInitializer或BeanFactoryPostProcessor或BeanDefinitionRegistryPostProcessor等这些接口,在这个里面修改了 PropertySource的顺序。

  • 理解 Spring 获取获取属性的顺序 参考 2、获取配置属性的优先级

  • 3、日志系统如何初始化

    如下代码初始化日志系统

    org.springframework.boot.context.logging.LoggingApplicationListener
    Salin selepas log masuk

    Atas ialah kandungan terperinci Cara menggunakan EnvironmentPostProcessor SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan