为多个 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 和不同的配置文件。

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

 BD MySQL

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



DB postgres

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

我预计我的退出是:

DB MySQL

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

重要提示:

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

的基础时

这也适用于 Postgres。

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

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

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

感谢您的关注。

与其使用带有 @Profile 注释的多个 spring 组件,不如将配置 类 与 @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();
        } 
    }

这应该意味着 Configuration 类 仅在设置相关的 DB 配置文件时读取,并且仅在设置相关的环境配置文件时创建后续 Bean。

您还需要从当前 类 - ConfigProdMySQL 等中删除 @Component 注释 - 并在配置 类.[=15= 中手动实例化它们]