Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用多个数据库启动Spring Boot,即使其中一个数据库没有';t连接_Java_Spring Boot_Jpa_Multiple Databases - Fatal编程技术网

Java 尝试使用多个数据库启动Spring Boot,即使其中一个数据库没有';t连接

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

我有一个Spring Boot应用程序,它使用多个数据库,没有问题。如果我试图在其中一个数据库关闭的情况下启动应用程序,它将无法启动

如果其中一个数据库关闭,我需要启动应用程序

我正在使用Spring Boot“2.3.2.RELEASE”

如果无法建立连接,我需要忽略整个bean。有人有什么想法或线索吗

当db1关闭时,我得到的错误是

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需要访问数据库来解析要使用的适当方言