为多个 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= 中手动实例化它们]
我是 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= 中手动实例化它们]