spring boot多个数据源

时间:2017-10-26 15:49:07

标签: spring-boot datasource

我试图按照this链接在我的应用程序中配置两个数据库。

在最近的春天,我们没有org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration课。

使用它的替代方法是什么。

我正在使用gradle进行春季启动应用

1 个答案:

答案 0 :(得分:0)

我更喜欢使用“ org.apache.tomcat.jdbc.pool.DataSource ”,然后手动配置我的数据源。

org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();

我设置了完全限定名,因为你应该从你制作的任何工厂方法返回“javax.sql.DataSource”。

使用spring-boot自动配置获取多个数据源是一个平底锅,因为自以为是的观点是您应该为每个数据源创建不同的服务。

这并不总是可行的,所以这就是我在单个应用程序中需要多个DataSource时所做的一切。

禁用自动配置,如下所示:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class YourApp{}

为数据源创建配置属性:

属性文件:

the-first.datasource.url=<insert value>
the-first.datasource.username=<insert value>
the-first.datasource.pw=<insert value>
the-first.datasource.min-idle=<insert value>
the-first.datasource.max-idle=<insert value>
the-first.datasource.max-active=<insert value>
the-first.datasource.validation-query=SELECT 1
# etc ...
the-second.datasource.url=<insert value>
the-second.datasource.username=<insert value>
the-second.datasource.pw=<insert value>
the-second.datasource.min-idle=<insert value>
the-second.datasource.max-idle=<insert value>
the-second.datasource.max-active=<insert value>
the-second.datasource.validation-query=SELECT 1

配置类:

import lombok.*;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Component("theFirstDataSourceProperties")
@ConfigurationProperties("the-first.datasource")
public class TheFirstDataSourceProperties{

    @NonNull
    private String password;

    @NonNull
    private String url;

    @NonNull
    private String username;

    private int minIdle;

    private int maxIdle;

    private int maxActive;

    @NonNull
    private String driverClassName;

    @NonNull
    private String validationQuery;
}

添加数据源配置类:

确保将其中一个标记为“@Primary”以帮助注射。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * Copyright ${year}
 *
 * @author J. Keith Hoopes
 */
@Configuration
public class ExampleOfMultipleDataSourceConfiguration{

    @Bean(name = "theFirstDataSource")
    @Primary
    @Autowired
    public DataSource theFirstDataSource(
        TheFirstDataSourceProperties theFirstDataSourceProperties){

        //Fully qualified to not conflict with generic DataSource
        org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
        // General
        dataSource.setName("theFirstDataSourceName");
        dataSource.setDriverClassName(theFirstDataSourceProperties.getDriverClassName());
        // etc ....

        return dataSource;
    }

    @Bean(name = "bDataSource")
    @Autowired
    public DataSource theSecondDataSource(
        TheSecondDataSourceProperties theSecondDataSourceProperties){

        //Fully qualified to not conflict with generic DataSource
        org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
        // General
        dataSource.setName("theSecondDataSourceName");
        dataSource.setDriverClassName(theSecondDataSourceProperties.getDriverClassName());
        // etc ....

        return dataSource;
    }
}

使用@Qualifier在需要的地方注入自定义DataSource,以便获得正确的数据源:)

@Qualifier("theFirstDataSource")

利润?是。

哦,这是我使用的基本依赖项。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-metadata</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>net.sourceforge.jtds</groupId>
  <artifactId>jtds</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
</dependency>