Java 尝试使用多个数据库启动Spring Boot,即使其中一个数据库没有';t连接
我有一个Spring Boot应用程序,它使用多个数据库,没有问题。如果我试图在其中一个数据库关闭的情况下启动应用程序,它将无法启动 如果其中一个数据库关闭,我需要启动应用程序 我正在使用Spring Boot“2.3.2.RELEASE” 如果无法建立连接,我需要忽略整个bean。有人有什么想法或线索吗 当db1关闭时,我得到的错误是Java 尝试使用多个数据库启动Spring Boot,即使其中一个数据库没有';t连接,java,spring-boot,jpa,multiple-databases,Java,Spring Boot,Jpa,Multiple Databases,我有一个Spring Boot应用程序,它使用多个数据库,没有问题。如果我试图在其中一个数据库关闭的情况下启动应用程序,它将无法启动 如果其中一个数据库关闭,我需要启动应用程序 我正在使用Spring Boot“2.3.2.RELEASE” 如果无法建立连接,我需要忽略整个bean。有人有什么想法或线索吗 当db1关闭时,我得到的错误是 org.springframework.beans.factory.BeanCreationException: Error creating bean wit
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'db1EntityManager'
defined in class path resource [com/example/persistence/config/DB1Config.class]:
Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException:
Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service
[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when
'hibernate.dialect' not set
DB1Config
@Configuration
@ConditionalOnProperty(
value = "datasource.db1.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db1",
entityManagerFactoryRef = "db1EntityManager",
transactionManagerRef = "db1TransactionManager"
)
public class DB1Config extends DBConfig {
private Environment env;
@Value("${datasource.db1.username}")
private String username;
@Value("${datasource.db1.password}")
private String password;
@Value("${datasource.db1.url}")
private String url;
public DB1Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db1EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db1DataSource());
em.setPackagesToScan("com.example.persistence.databases.db1.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db1DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db1TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db1EntityManager().getObject());
return transactionManager;
}
}
@Configuration
@ConditionalOnProperty(
value = "datasource.db2.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db2",
entityManagerFactoryRef = "db2EntityManager",
transactionManagerRef = "db2TransactionManager"
)
public class DB2Config extends DBConfig {
private Environment env;
@Value("${datasource.db2.username}")
private String username;
@Value("${datasource.db2.password}")
private String password;
@Value("${datasource.db2.url}")
private String url;
public DB2Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db2EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db2DataSource());
em.setPackagesToScan("com.example.persistence.databases.db2.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db2DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db2TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db2EntityManager().getObject());
return transactionManager;
}
}
DB2Config
@Configuration
@ConditionalOnProperty(
value = "datasource.db1.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db1",
entityManagerFactoryRef = "db1EntityManager",
transactionManagerRef = "db1TransactionManager"
)
public class DB1Config extends DBConfig {
private Environment env;
@Value("${datasource.db1.username}")
private String username;
@Value("${datasource.db1.password}")
private String password;
@Value("${datasource.db1.url}")
private String url;
public DB1Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db1EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db1DataSource());
em.setPackagesToScan("com.example.persistence.databases.db1.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db1DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db1TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db1EntityManager().getObject());
return transactionManager;
}
}
@Configuration
@ConditionalOnProperty(
value = "datasource.db2.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db2",
entityManagerFactoryRef = "db2EntityManager",
transactionManagerRef = "db2TransactionManager"
)
public class DB2Config extends DBConfig {
private Environment env;
@Value("${datasource.db2.username}")
private String username;
@Value("${datasource.db2.password}")
private String password;
@Value("${datasource.db2.url}")
private String url;
public DB2Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db2EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db2DataSource());
em.setPackagesToScan("com.example.persistence.databases.db2.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db2DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db2TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db2EntityManager().getObject());
return transactionManager;
}
}
DBConfig
@Configuration
@ConditionalOnProperty(
value = "datasource.db1.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db1",
entityManagerFactoryRef = "db1EntityManager",
transactionManagerRef = "db1TransactionManager"
)
public class DB1Config extends DBConfig {
private Environment env;
@Value("${datasource.db1.username}")
private String username;
@Value("${datasource.db1.password}")
private String password;
@Value("${datasource.db1.url}")
private String url;
public DB1Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db1EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db1DataSource());
em.setPackagesToScan("com.example.persistence.databases.db1.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db1DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db1TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db1EntityManager().getObject());
return transactionManager;
}
}
@Configuration
@ConditionalOnProperty(
value = "datasource.db2.enabled",
havingValue = "true"
)
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.persistence.databases.db2",
entityManagerFactoryRef = "db2EntityManager",
transactionManagerRef = "db2TransactionManager"
)
public class DB2Config extends DBConfig {
private Environment env;
@Value("${datasource.db2.username}")
private String username;
@Value("${datasource.db2.password}")
private String password;
@Value("${datasource.db2.url}")
private String url;
public DB2Config(Environment env) {
this.env = env;
}
@Bean
public LocalContainerEntityManagerFactoryBean db2EntityManager() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(db2DataSource());
em.setPackagesToScan("com.example.persistence.databases.db2.model");
populateEntityManager(em, env);
return em;
}
@Bean
public DataSource db2DataSource() {
return createDataSource(url, env.getProperty(JDBC_DRIVER_CLASS_NAME), username, password);
}
@Bean
public PlatformTransactionManager db2TransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(db2EntityManager().getObject());
return transactionManager;
}
}
嗯,错误消息有点暗示了什么,您是否尝试过显式地设置
hibernate.dialogue
?否则,Hibernate需要访问数据库来解析要使用的适当方言