1

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

1 - 我有一个带有 Spring Boot 的 API,我需要配置两个 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 和不同的配置文件。

当我运行我的应用程序时,我在控制台上有这个输出

 BD MySQL

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



DB postgres

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

我预计我的出口是:

DB MySQL

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

重要的:

当我将配置文件配置为连接到我的 MySQL Dev数据库时,我只想连接到它。当它是 MySQL 的Prod的基础时,我想要相同的结果。

这也适用于 Postgres。

当我将配置文件配置为连接到我的 Postgres Dev数据库时,我只想连接到它。当它是Postgres Prod的基础时,我想要同样的结果。

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

有谁知道如何进行此设置,您能帮我吗?

我感谢您的关注。

4

1 回答 1

1

@Profile您可以使用配置类而不是具有多个带有注释的弹簧组件,@Profile(db_name)然后在这些类中激活特定于环境的配置文件。例如对于 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等等 - 并在配置类中手动实例化它们。

于 2020-06-02T11:37:34.707 回答