Настройка Spring Boot Два источника данных выдает ошибку автоконфигурации - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь настроить два источника данных в моем приложении весенней загрузки, но при этом я не уверен, должен ли параметр пружины Autoconfiguration быть отключен или я пропустил какой-то код.

pom. xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pe.com.test</groupId>
    <artifactId>Dashboard</artifactId>
    <version>1.0.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle.ojdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>19.3.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

# Oracle settings

#DB1
db1.datasource.url=jdbc:oracle:thin:@192.168.1.2:1521:DB1
db1.datasource.username=test
db1.datasource.password=abc123
db1.datasource.driver.class=oracle.jdbc.driver.OracleDriver

#DB2
db2.datasource.url=jdbc:oracle:thin:@192.168.1.3:1521:DB2
db2.datasource.username=test
db2.datasource.password=abc123
db2.datasource.driver.class=oracle.jdbc.driver.OracleDriver

Мой класс конфигурации.

@Configuration
public class DataSourceConfiguration {

    @Bean
    @Primary
    @ConfigurationProperties("db1.datasource")
    public DataSource db1Ds() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("db2.datasource")
    public DataSource db2Ds() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Autowired
    @Primary
    DataSourceTransactionManager db1Tm(@Qualifier("db1Ds") DataSource dataSource) {
        DataSourceTransactionManager dstm = new DataSourceTransactionManager(dataSource);
        return dstm;
    }

    @Bean
    @Autowired
    DataSourceTransactionManager db2Tm(@Qualifier("db2Ds") DataSource dataSource) {
        DataSourceTransactionManager dstm = new DataSourceTransactionManager(dataSource);
        return dstm;
    }
}

Я знаю, что так как я изменяю свойства по умолчанию для автоконфигурирования базы данных spring.datasource при запуске приложения. Это должно выдавать ошибку.

2020-04-04 16:02:25.654  WARN 15076 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
2020-04-04 16:02:25.665  INFO 15076 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-04-04 16:02:25.667 ERROR 15076 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).


Process finished with exit code 1

Я могу обойти эту ошибку, просто отключив автоконфигурирование пружины.

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

Что я хочу знать, если я нахожусь на правильном пути, выключив DataSourceAutoConfiguration или пропустил какую-то другую конфигурацию, чтобы заставить работать автоконфигурацию.

1 Ответ

1 голос
/ 05 апреля 2020

Лучше попробовать с этими свойствами базы данных и конфигурациями

#DB1
spring.db1-datasource.url=jdbc:oracle:thin:@192.168.1.2:1521:DB1
spring.db1-datasource.username=test
spring.db1-datasource.password=abc123
spring.db1-datasource.driver.class=oracle.jdbc.driver.OracleDriver

#DB2
spring.db2-datasource.url=jdbc:oracle:thin:@192.168.1.3:1521:DB2
spring.db2-datasource.username=test
spring.db2-datasource.password=abc123
spring.db2-datasource.driver.class=oracle.jdbc.driver.OracleDriver

@Configuration
public class DataSourceConfiguration {

@Bean
@Primary
@ConfigurationProperties(prefix="spring.db1-datasource")
public DataSource db1Ds() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix="spring.db2-datasource")
public DataSource db2Ds() {
    return DataSourceBuilder.create().build();
}

@Bean
@Autowired
@Primary
DataSourceTransactionManager db1Tm(@Qualifier("db1Ds") DataSource dataSource) {
    DataSourceTransactionManager dstm = new DataSourceTransactionManager(dataSource);
    return dstm;
}

@Bean
@Autowired
DataSourceTransactionManager db2Tm(@Qualifier("db2Ds") DataSource dataSource) {
    DataSourceTransactionManager dstm = new DataSourceTransactionManager(dataSource);
    return dstm;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...