首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为多个DBMS和多个配置文件配置Spring引导

问为多个DBMS和多个配置文件配置Spring引导
EN

Stack Overflow用户
提问于 2020-06-01 19:33:19
回答 1查看 462关注 0票数 1

我是Spring新手,我不知道我想做什么是否可能,但我有以下问题要解决。

1-我有一个带有Spring的API,我需要配置两个DBMS (MySQL和Postgres)。

2-对于每个DBMS,我需要配置不同的配置文件。(发展、推动)

遵循我的MySQL配置类:

代码语言:javascript
复制
@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配置类:

代码语言:javascript
复制
@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");
    }
}

我的个人资料文件如下所示:

注:我很确定他是错的,但我坚持这样做,例如。

代码语言:javascript
复制
spring.profiles.active=mysql
spring.profiles.active=dev 

总是记住它是一个API,有两个DBMS和不同的配置文件.

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

代码语言:javascript
复制
 BD MySQL

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



DB postgres

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

我以为我的出口是:

代码语言:javascript
复制
DB MySQL

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

重要:

当我将配置文件配置为连接到我的MySQL Dev数据库时,我只想连接到它。当它是MySQL的Prod__的基础时,我希望得到同样的结果。

这也适用于Postgres。

在配置配置文件以连接到Postgres Dev数据库时,我只想连接到它。当它是Postgres的Prod的基础时,我希望得到同样的结果。

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

有人知道怎么做这个设置吗?你能帮我吗?

我感谢你的关注。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 11:37:34

与其使用带有@Profile注释的多个spring组件,不如在@Profile(db_name)中使用配置类,然后在这些类中激活特定于环境的配置文件。例如,对于MySQL配置文件:

代码语言:javascript
复制
    @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配置文件时才读取配置类,而只有在设置了相关的环境配置文件时才会创建后续mean。

您还将从当前类中删除@Component注释-- ConfigProdMySQL等--并在配置类中手动实例化它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62139652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档