[英]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.