我是Spring新手,我不知道我想做什么是否可能,但我有以下问题要解决。
1-我有一个带有Spring的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的基础时,我希望得到同样的结果。
我真的不知道这是否可能,我甚至不知道怎么做!
有人知道怎么做这个设置吗?你能帮我吗?
我感谢你的关注。
发布于 2020-06-02 11:37:34
与其使用带有@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配置文件时才读取配置类,而只有在设置了相关的环境配置文件时才会创建后续mean。
您还将从当前类中删除@Component注释-- ConfigProdMySQL等--并在配置类中手动实例化它们。
https://stackoverflow.com/questions/62139652
复制相似问题