当前位置: 首页 > 知识库问答 >
问题:

spring boot配置和使用两个数据源

郭华美
2023-03-14

如何配置和使用两个数据源?

例如,下面是第一个数据源:

应用程序.属性

#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver

#second db ...

应用程序类

@SpringBootApplication
public class SampleApplication
{
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

如何修改application.properties以添加另一个数据源?我如何自动将其用于不同的存储库?

共有2个答案

丁阎宝
2023-03-14

使用spring boot 1.5.8更新2018-01-07。发行版

大多数答案没有提供如何使用它们(作为数据源本身和作为事务),只提供如何配置它们。

您可以在https://www.surasint.com/spring-boot-with-multiple-database-example/中看到可运行的示例和一些解释

我在这里复制了一些代码。

首先,您必须像这样设置application.properties

#Database
database1.datasource.url=jdbc:mysql://localhost/testdb
database1.datasource.username=root
database1.datasource.password=root
database1.datasource.driver-class-name=com.mysql.jdbc.Driver

database2.datasource.url=jdbc:mysql://localhost/testdb2
database2.datasource.username=root
database2.datasource.password=root
database2.datasource.driver-class-name=com.mysql.jdbc.Driver

然后将它们定义为提供者(@bean),如下所示:

@Bean(name = "datasource1")
@ConfigurationProperties("database1.datasource")
@Primary
public DataSource dataSource(){
    return DataSourceBuilder.create().build();
}

@Bean(name = "datasource2")
@ConfigurationProperties("database2.datasource")
public DataSource dataSource2(){
    return DataSourceBuilder.create().build();
}

注意,我有@bean(name=“datasource1”)和@bean(name=“datasource2”),那么当我们需要数据源时,您可以使用它作为@qualifier(“datasource1”)和@qualifier(“datasource2”),例如

@Qualifier("datasource1")
@Autowired
private DataSource dataSource;

如果您确实关心transaction,则必须为这两个对象定义DataSourceTransactionManager,如下所示:

@Bean(name="tm1")
@Autowired
@Primary
DataSourceTransactionManager tm1(@Qualifier ("datasource1") DataSource datasource) {
    DataSourceTransactionManager txm  = new DataSourceTransactionManager(datasource);
    return txm;
}

@Bean(name="tm2")
@Autowired
DataSourceTransactionManager tm2(@Qualifier ("datasource2") DataSource datasource) {
    DataSourceTransactionManager txm  = new DataSourceTransactionManager(datasource);
    return txm;
}

然后你就可以像这样使用它

@Transactional //this will use the first datasource because it is @primary

@Transactional("tm2")

这应该就够了。请参阅上面链接中的示例和详细信息。

饶高雅
2023-03-14

给你。

添加到您的application.properties文件中:

#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver

#second db ...
spring.secondDatasource.url = [url]
spring.secondDatasource.username = [username]
spring.secondDatasource.password = [password]
spring.secondDatasource.driverClassName = oracle.jdbc.OracleDriver

在任何带有@Configuration注释的类中添加以下方法:

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

@Bean
@ConfigurationProperties(prefix="spring.secondDatasource")
public DataSource secondaryDataSource() {
    return DataSourceBuilder.create().build();
}
 类似资料:
  • 问题内容: 我是Spring和Spring Boot的新手。如何配置和使用两个数据源? 例如,这是我对第一个数据源的需求: 应用类别 如何修改以添加另一个数据源?如何将其自动布线以供其他存储库使用? 问题答案:

  • 问题内容: 我是Spring和Spring Boot的新手。如何配置和使用两个数据源? 例如,这是我对第一个数据源的需求: 应用类别 如何修改以添加另一个数据源?如何将其自动布线以供其他存储库使用? 问题答案:

  • 如何配置和使用两个数据源? 例如,以下是我对第一个数据源的了解: 应用属性 应用类 如何修改应用程序。是否要添加其他数据源?如何自动关联它以供其他存储库使用?

  • 第一个实例是嵌入式MongoDb,第二个实例是live MongoDb。它如何配置使用spring数据和Spring Boot。如何通过属性文件轻松切换这些实例?? 使现代化 > 通过配置mongo,应该可以让应用程序知道将使用外部数据库。url属性。在这种情况下,不需要启动内部数据库。而不是使用外部连接 请粘贴一些配置。 最新情况: 如果我指定外部mongodb,那么我希望嵌入式mongodb不

  • 我有教育问题: 存在具有windows server 2003(AD)的虚拟机,其中包含用户及其密码。已建立与机器的连接(ip:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改他的密码。 问题:无法配置到windws server 2003的连接。 我从这个教程开始https://spring.io/guides/gs/authenticating-ldap/

  • 我有一个简单的SpringBoot应用程序,我想使用AutoConfiguration来配置Tomcat jdbc池数据源。 我正在使用这些Spring依赖项: 以下是我的 application.yml 文件中的数据源属性: 我确定正在加载属性,因为应用程序正在获取其他值。 我在配置文件中将 bean 定义为: 我将数据源注入到我的DAO中,如下所示: 如果我在getDataSource()方法