【发布时间】:2017-10-26 15:49:07
【问题描述】:
我试图按照this 链接在我的应用程序中配置两个数据库。
在最近的春天,我们没有org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration 类。
有什么替代方法可以使用。
我正在为我的 Spring Boot 应用程序使用 gradle
【问题讨论】:
我试图按照this 链接在我的应用程序中配置两个数据库。
在最近的春天,我们没有org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration 类。
有什么替代方法可以使用。
我正在为我的 Spring Boot 应用程序使用 gradle
【问题讨论】:
我更喜欢使用“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 在需要的地方注入您的自定义数据源,以便获得正确的数据源:)
@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>
【讨论】: