当前位置: 首页 > 知识库问答 >
问题:

为多个DBMS和多个配置文件配置Spring boot

杨志强
2023-03-14

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

2-对于每个DBMS,我需要配置不同的配置文件。(Dev,Prod)

遵循我的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");
    }
}

@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 

 BD MySQL

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



DB postgres

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

我以为我的出口是:

DB MySQL

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

重要:

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

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

我真的不知道这是否可能,我甚至不知道如何做到这一点!

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

我感谢你的关注。

共有1个答案

韦智刚
2023-03-14

不需要多个带有@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();
        } 
    }

这应该意味着只有在设置了相关的DB概要文件时才读取配置类,而只有在设置了相关的环境概要文件时才创建后续的bean

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

 类似资料:
  • 我有两个配置文件(“autoContido”和“weblogic”),其中每个配置文件都有两个配置类,因为我使用的是两个数据源。 我已经将特定数据源中的bean注释为@Primary,而另一个数据源配置类中的bean不是@Primary,但我对它们的命名不同。 我以为使用@主注释就不会有像下面这样的错误,但我仍然得到它们。有人能帮我看看问题出在哪里吗? 我尝试使用@Primary annotati

  • 寻找在Springboot应用程序中配置多个配置文件特定属性文件的最佳方法。下面是一个例子: -资源  · --application.properties  · · · · · --德夫             --application-dev.properties             --ldap-dev.properties             --Quartz-Dev.Prope

  • 问题内容: 我有多个要从类路径加载的属性文件。有一个默认设置,它是的一部分。我springcontext希望文件位于类路径中。即 我还需要使用外部集覆盖这些属性的选项。我在中有一个外部配置文件夹cwd。按照文件夹应该在classpath上。但是从doc尚不清楚,它是否只会覆盖或配置中的所有属性。 当我对其进行测试时,只会拾取,其余属性仍会从拾取/src/main/resources。我尝试将它们作

  • 我有多个属性文件要从类路径加载。在下有一个默认设置,它是的一部分。我的希望文件位于类路径上。即。 我还需要用外部集重写这些属性的选项。我在中有一个外部配置文件夹。根据spring boot,文档配置文件夹应该在类路径上。但从doc中不清楚它是否只会重写或config中的所有属性。 当我测试它时,只有被提取,其余属性仍然从中提取。我尝试将它们作为逗号分隔的列表提供给,但默认设置仍未被覆盖。 如何使多

  • 我尝试使用maven命令行执行多个maven概要文件 但它只对Profile2执行,Profile1永远不会执行。通过命令行执行多个配置文件需要帮助。 另请注意,当我列出活动配置文件时,它会将两个配置文件显示为活动的。

  • 问题内容: 我目前正在构建一个库以对我的一些代码进行模块化,并且我遇到了Hibernate的问题。 在我的主应用程序中,我有一个hibernate配置来获取运行所需的信息,但是我的库中也需要hibernate,因为我想要的某些对象可以在其他应用程序中使用。 当我启动两个hibernate设置的tomcat服务器时,出现错误,指出无法解析bean,并且说我的查询中缺少位置参数的bean。但是,当我仅