簡體   English   中英

為多個 DBMS 和多個配置文件配置 Spring 引導

[英]Configure Spring boot for multiple DBMS and multiple profiles

我是 Spring Boot 的新手,我不知道我想做的事情是否可行,但我有以下問題要解決。

1 - 我有一個 API 和 Spring 引導,我需要配置兩個 DBMS(MySQL 和 Postgres)。

2 - 對於每個 DBMS,我需要配置不同的配置文件。 (開發,產品)

按照我的 MySQL 配置類:

@Component
@Profile("mysql")
public class ConfigMySQL {

    public ConfigMySQL() {
        System.out.println("BD MySQL");
    }
}


@Component
@Profile("dev")
public class ConfigDevMySQL extends ConfigMySQL {

    public ConfigDevMySQL() {
        System.out.println("\n\n");
        System.out.println(" ****** Configuration dev MySQL... ******");
        System.out.println("\n\n");
    }
}


@Component
@Profile("prod")
public class ConfigProdMySQL extends ConfigMySQL{

    public ConfigProdMySQL() {
        System.out.println("\n\n");
        System.out.println(" ****** Configuration prod MySQL... ******");
        System.out.println("\n\n");
    }
}

遵循我的 Postgres 配置類:

@Component
@Profile("postgres")
public class ConfigPostgres {

    public ConfigPostgres() {
        System.out.println("DB postgres");
    }
}


@Component
@Profile("dev")
public class ConfigDevPostgres extends ConfigPostgres{

    public ConfigDevPostgres() {
        System.out.println("\n\n");
        System.out.println(" ****** Configuration dev Postgres... ******");
        System.out.println("\n\n");
    }
}


@Component
@Profile("prod")
public class ConfigProdPostgres extends ConfigPostgres {

    public ConfigProdPostgres() {
        System.out.println("\n\n");
        System.out.println(" ****** Configuration prod Postgres... ******");
        System.out.println("\n\n");
    }
}

我的個人資料文件如下所示:

筆記:我很確定他錯了,但例如我一直這樣說。

spring.profiles.active=mysql
spring.profiles.active=dev 

請始終記住,它是一個 API,具有兩個 DBMS 和不同的配置文件。

當我運行我的應用程序時,控制台上有這個 output

 BD MySQL

 ****** Configuration dev MySQL... ******



DB postgres

 ****** Configuration dev Postgres... ******

我預計我的出口是:

DB MySQL

 ****** Configuration dev MySQL... ******

重要的:

當我將配置文件配置為連接到我的 MySQL開發數據庫時,我只想連接到它。 當它是 MySQL 的Prod的基礎時,我想要相同的結果。

這也適用於 Postgres。

當我將配置文件配置為連接到我的 Postgres Dev數據庫時,我只想連接到它。 當它是 Postgres Prod的基礎時,我想要同樣的結果。

我真的不知道這是否可能,我什至不知道該怎么做!

有誰知道如何進行此設置,您能幫我嗎?

我感謝您的關注。

您可以使用帶有@Profile(db_name)的配置類,然后在這些類中激活特定於環境的配置文件,而不是使用多個帶有@Profile注釋的 spring 組件。 例如對於 MySQL 配置文件:

    @Configuration
    @Profile("mysql")
    public class MySqlConfiguration{

        public MySqlConfiguration() {
            System.out.println("BD MySQL");
        }

        @Bean
        @Profile("dev") 
        public ConfigDevMySQL() {
            return new ConfigDevMySQL();
        } 

        @Bean
        @Profile("prod") 
        public ConfigProdMySQL () {
            return new ConfigProdMySQL();
        } 
    }

這應該意味着只有在設置了相關的 DB 配置文件時才會讀取配置類,並且只有在設置了相關的環境配置文件時才會創建后續的 Bean。

您還可以從當前類中刪除@Component注釋 - ConfigProdMySQL等 - 並在配置類中手動實例化它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM