`
阅读更多

 

springboot多数据源死循环,springboot动态据源死循环

The dependencies of some of the beans in the application context form a cycle

 

================================

©Copyright 蕃薯耀 2020-04-24

https://www.iteye.com/blog/user/fanshuyao

 

一、问题描述

 

 

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

Description:

The dependencies of some of the beans in the application context form a cycle:

   org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration
┌─────┐
|  dynamicDataSource defined in class path resource [com/szpl/baOneMap/dataSource/DruidConfig.class]
↑     ↓
|  masterDataSource defined in class path resource [com/szpl/baOneMap/dataSource/DruidConfig.class]
↑     ↓
|  org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker

 

 

 多数据源(动态数据源)配置:

复制代码
@Configuration
@Profile({"dev"})
public class DynamicDataSourceConfig{
    
    @Bean
    @Primary
    @ConfigurationProperties("spring.datasource.master")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    
    @Bean
    @ConfigurationProperties("spring.datasource.slave")
    @ConditionalOnProperty(prefix = "spring.datasource.slave", name = "enabled", havingValue = "true")
    public DataSource slaveDataSource(){
        return DataSourceBuilder.create().build();
    }

    
    @Bean(name = "dynamicDataSource")
    public DynamicDataSource dynamicDataSource(){
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource());
        targetDataSources.put(DataSourceType.SLAVE.name(), slaveDataSource());
        
        return new DynamicDataSource(masterDataSource(), targetDataSources);
    }
    
    
    @Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dynamicDataSource());
        
        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*Mapper.xml"));

        return sqlSessionFactory.getObject();
    }
    
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplate() throws Exception {

        return new SqlSessionTemplate(sqlSessionFactory());
    }
    
    /**
     * 事务管理
     */
    @Bean(name="transactionManager")
    public PlatformTransactionManager transactionManager() throws Exception {

        return new DataSourceTransactionManager(dynamicDataSource());
    }
    
    
}
复制代码

 

 

 

问题出现的原因是:在masterDataSource加了@Primary注解导致的。

 

 

 

二、解决方案:

 

方法一:

将注解@Primary放到dynamicDataSource上。

 

 方法二:

启动类加上:(exclude = {DataSourceAutoConfiguration.class})

复制代码
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Demo1Application {

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

}
复制代码

 

 

 

================================

©Copyright 蕃薯耀 2020-04-24

https://www.iteye.com/blog/user/fanshuyao

 

 

1
0
分享到:
评论

相关推荐

    SpringBoot配置多数据源实现动态切换数据源

    本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据源的动态切换,帮助你理解和掌握这一核心技能。 首先,我们理解"多数据源"的概念。在SpringBoot应用中,多数据源意味着系统能够连接并操作多个不同的...

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务

    基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库...

    SpringBoot多数据源案例

    在SpringBoot应用中,多数据源的配置是一个常见的需求,特别是在大型系统中,可能需要连接多个不同的数据库,例如,一个用于存储用户数据,另一个用于存储日志或交易数据。本案例提供了一个简单的SpringBoot项目,...

    springboot多数据源即分布式事务解决方案

    SpringBoot作为一款轻量级的框架,提供了便捷的多数据源配置和分布式事务管理方案,使得开发者能够高效地管理和操作不同的数据库。本文将详细探讨SpringBoot如何实现多数据源以及分布式事务。 首先,我们要理解什么...

    SpringBoot多数据源切换.zip

    SpringBoot多数据源切换.zip

    springboot+mybatis多数据源+动态数据源配置(连接池)

    springboot+mybatis多数据源+动态数据源配置(连接池),mysql数据库,代码实现了简单的读写分离,但是不建议这种操作,建议使用数据库中间件进行读写分离,例如使用mycat进行读写分离主从热备,使用该代码对于多个...

    springboot多数据源代码

    本项目涉及的主题是“springboot多数据源代码”,这意味着我们将探讨如何在SpringBoot应用中配置和管理多个数据源,包括Hive和MySQL数据库。 Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为...

    springboot多数据源,DruidDataSource多数据源切换,不重启项目,修改数据库名解决方案

    项目背景: 1. Springboot项目 ... 一个主数据源,数据名称库不变。 3. 一个副数据源,数据库名称每天都在变,比如今天1号,是db_01; 明天2号,是db_02。 4.不重启项目切换数据源。 5.项目介绍: ...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    SpringBoot多数据源框架【整合配置及应用】.docx

    SpringBoot 多数据源框架整合配置及应用 SpringBoot 微服务框架整合配置及应用中,多数据源依赖是指在同一个应用程序中使用多个数据源,以满足不同的业务需求。在本文中,我们将介绍如何在 SpringBoot 中使用多数据...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    在Spring Boot项目中实现多数据源动态切换是一项高级特性,能够使应用根据不同业务需求访问不同的数据库,从而实现服务的解耦和数据库操作的优化。该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及...

    springboot双数据源(oracle,mysql).rar

    本项目“springboot双数据源(oracle,mysql).rar”显然是一个使用SpringBoot实现多数据源的例子,允许应用程序同时连接并操作Oracle和MySQL两个数据库。以下将详细介绍实现这一功能的关键知识点。 1. **SpringBoot...

    基于springboot整理的分布式事务及动态数据源切换

    整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: &lt;groupId&gt;com.maple&lt;/groupId&gt; &lt;artifactId&gt;DCSDataSourcesServer &lt;version&gt;0.0.1-SNAPSHOT 事务及数据源标签...

    springboot多数据源整合sqlserver

    在Spring Boot应用中,多数据源的整合是一个常见的需求,特别是在大型系统中,可能需要连接到不同的数据库以实现数据隔离或者充分利用不同数据库的优势。本项目是关于如何在Spring Boot环境中整合三个数据源,其中两...

    SpringBoot+gradle+mybatis多数据源动态配置

    本项目结合了SpringBoot、Gradle和MyBatis,旨在实现多数据源的动态配置,这对于处理多个数据库或者分库分表的场景尤其有用。以下是对这个项目的详细解析: **SpringBoot** SpringBoot是由Pivotal团队提供的全新...

    SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo

    最后,压缩包中的"SpringBoot+Atomikos分布式事务及动态数据源"文件可能包含了具体的代码示例和配置文件,这些资源可以帮助开发者更好地理解和实践上述概念。通过分析和学习这些示例,可以快速上手Spring Boot与...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...

    springboot多数据源案列,Java多数据源

    springboot多数据源案列,Java多数据源,springboot配置多数据源案列

    SpringBoot操作多数据源(JPA+JdbcTemplate)

    在Spring Boot中配置多数据源,我们需要创建两个或更多的数据源配置,每个数据源对应一个数据库。以下是一个基本的配置示例: ```yaml spring: datasource: primary: url: jdbc:mysql://localhost:3306/db1 ...

    SpringBoot+druid+多数据源示例

    SpringBoot提供了`AbstractRoutingDataSource`,它可以动态选择要使用的数据源。创建一个自定义的`DynamicDataSource`类,继承`AbstractRoutingDataSource`: ```java @Configuration public class ...

Global site tag (gtag.js) - Google Analytics