精华内容
下载资源
问答
  • /** * EnableJpaRepositories 注解关联repository与entityManage,entityManage决定数据源 */ @EnableJpaRepositories( basePackages = "transfer.db1", entityManagerFactoryRef = "entityManage1", ...

    //DbConfig.java

    package transfer;

    import com.mysql.cj.jdbc.Driver;

    import oracle.jdbc.OracleDriver;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.beans.factory.annotation.Qualifier;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.context.annotation.Primary;

    import org.springframework.core.env.Environment;

    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

    import org.springframework.jdbc.datasource.SimpleDriverDataSource;

    import org.springframework.orm.jpa.JpaTransactionManager;

    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;

    import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;

    import org.springframework.transaction.PlatformTransactionManager;

    import javax.sql.DataSource;

    import java.sql.SQLException;

    import java.util.HashMap;

    /**

    * 数据库配置

    * @author zhanghui

    * @date 2019/5/7

    */

    @Configuration

    public class DbConfig {

    @Autowired

    private Environment env;

    /**

    * EnableJpaRepositories 注解关联repository与entityManage,entityManage决定数据源

    */

    @EnableJpaRepositories(

    basePackages = "transfer.db1",

    entityManagerFactoryRef = "entityManage1",

    transactionManagerRef = "transactionManager1"

    )

    @Configuration

    class db1{

    @Bean("datasource1")

    @Primary

    public DataSource getDataSource1() {

    return new SimpleDriverDataSource(

    new OracleDriver(),

    "jdbc:oracle:thin:@192.168.1.142:1521:aaa",

    "aaa",

    "123456");

    }

    /**

    * entityManage 在用jpa原生sql 查询时,(非JpaRepository),注意注入的EntityManage的qualifier值

    * @param dataSource

    * @return

    */

    @Bean("entityManage1")

    @Primary

    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean1(@Qualifier("datasource1")DataSource dataSource) {

    return getFactory(dataSource,"transfer.db1.entity","unit1","org.hibernate.dialect.MySQL5InnoDBDialect");

    }

    @Bean("transactionManager1")

    @Primary

    public PlatformTransactionManager transactionManager1(@Qualifier("entityManage1") LocalContainerEntityManagerFactoryBean entityManageFactory) {

    JpaTransactionManager transactionManager = new JpaTransactionManager();

    transactionManager.setEntityManagerFactory(entityManageFactory.getObject());

    return transactionManager;

    }

    }

    @EnableJpaRepositories(

    basePackages = "transfer.db2",

    entityManagerFactoryRef = "entityManage2",

    transactionManagerRef = "transactionManager2"

    )

    @Configuration

    class db2{

    @Bean("datasource2")

    public DataSource getDataSource2() {

    DataSource dataSource = null;

    try {

    dataSource = new SimpleDriverDataSource(

    new Driver(),

    "jdbc:mysql://192.168.1.196:3306/ddd?useOldAliasMetadataBehavior=true&useSSL=false&zeroDateTimeBehavior=convertToNull",

    "ddd",

    "123456");

    } catch (SQLException e) {

    e.printStackTrace();

    }

    return dataSource;

    }

    @Bean("entityManage2")

    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean2(@Qualifier("datasource2")DataSource dataSource) {

    return getFactory(dataSource,"transfer.db2.entity2","unit2","org.hibernate.dialect.OracleDialect");

    }

    @Bean("transactionManager2")

    public PlatformTransactionManager transactionManager2(@Qualifier("entityManage2") LocalContainerEntityManagerFactoryBean entityManageFactory) {

    JpaTransactionManager transactionManager = new JpaTransactionManager();

    transactionManager.setEntityManagerFactory(entityManageFactory.getObject());

    return transactionManager;

    }

    }

    private LocalContainerEntityManagerFactoryBean getFactory(DataSource dataSource, String baseEntityPackage, String unitName, String dialect){

    LocalContainerEntityManagerFactoryBean em

    = new LocalContainerEntityManagerFactoryBean();

    em.setDataSource(dataSource);

    em.setPackagesToScan(baseEntityPackage);

    em.setPersistenceUnitName(unitName);

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();

    em.setJpaVendorAdapter(vendorAdapter);

    HashMap properties = new HashMap<>();

    properties.put("hibernate.show_sql", "true");

    properties.put("hibernate.ddl-auto", "none");

    properties.put("hibernate.format_sql", "false");

    properties.put("hibernate.dialect", dialect);

    // properties.put("hibernate.default_schema", "BIRD_CCB");

    em.setJpaPropertyMap(properties);

    return em;

    }

    }

    展开全文
  • SpringBoot配置双数据源,mapper调用时数据源匹配错误问题 错误现象 Caused by: java.sql.SQLSyntaxErrorException: Table 'test.users' doesn't exist at ...

    SpringBoot配置双数据源,mapper调用时数据源匹配错误问题

    错误现象

    Caused by: java.sql.SQLSyntaxErrorException: Table 'test.users' doesn't exist
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:955)
    	at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:372)
    	at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
    	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
    	at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
    	at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
    	at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:69)
    	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
    	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:165)
    	at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:92)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
    	... 59 more
    

           服务中配置了两个数据源,将数据源一加上了@Primary注解设置为了主数据源,但是调用在数据源二使用@MapperScan注解配置的mapper路径包下却读取到了数据源一,导致表不存在

    问题原因

           最后排查发现数据源二配置的mapper包下的mapper接口文件加上了@Mapper注解,导致数据源二配置的mapper路径被覆盖,去使用了加上@Primary注解的数据源一.

    解决方法

           去掉mapper接口上加上的@Mapper注解,使用数据源二上的@MapperScan注解配置的路径即可

    展开全文
  • 由于本人使用的是eladmin框架,在进行集成springboot+jpa多数据源时报错导致项目无法启动,现改用以下方式进行多数据源的应用集成到eladmin框架里 1.首先在yml文件配置第一个数据源 2,配置第二个数据源 3.创建两...

    **

    一、前言

    由于本人使用的是eladmin框架,在进行集成springboot+jpa多数据源时报错导致项目无法启动,现改用以下方式进行多数据源的应用集成到eladmin框架里

    1.首先在yml文件配置第一个数据源
    在这里插入图片描述
    2,配置第二个数据源
    在这里插入图片描述
    3.创建两个配置文件
    在这里插入图片描述

    DataSourceConfig 配置类

    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;

    import javax.sql.DataSource;

    @Configuration
    public class DataSourceConfig {

    /***
     * 配置主数据源
     * @return
     */
    @Bean(name = "fistDS")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.fist")     ##与配置的第一个数据源名称对应
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    /****
     * 配置数据源
     * @return
     */
    @Bean(name = "sqlserverDS")
    @ConfigurationProperties(prefix = "spring.datasource.sqlserver")  ##与配置的第二个数据源名称对应
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    

    }

    JdbcTemplateConfig 配置类

    package me.zhengjie.modules.head.util;

    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.core.JdbcTemplate;

    import javax.sql.DataSource;

    @Configuration
    public class JdbcTemplateConfig {

    @Bean
    public JdbcTemplate jdbcTemplatefalse(@Qualifier("fistDS") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
    
    @Bean
    public JdbcTemplate jdbcTemplatesqlserver(@Qualifier("sqlserverDS") DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
    

    }

    3,第三步在你需要用到的类进行引用(注意,引用的类名与JdbcTemplateConfig 配置类里的方法名相对应,即可引用到对应的数据源)
    在这里插入图片描述

    4,引用后就可以进行增删改查操作
    在这里插入图片描述

    展开全文
  • # master为默认的数据源 spring.datasource.dynamic.datasource.master.username = root spring.datasource.dynamic.datasource.master.password = ssitg@admin1233 spring.datasource.dynamic.dataso

    今天遇到了一个工作场景,在同一个工程中需要操作两个不同的数据库,之前并没有处理过类似场景,所以第一时间有点蒙,后来简单查阅了一些资料后,摸索完成,如下:

    # master为默认的数据源
    spring.datasource.dynamic.datasource.master.username = xxxx
    spring.datasource.dynamic.datasource.master.password = xxxx
    spring.datasource.dynamic.datasource.master.url = jdbc:mysql://10.0.0.127:3306/ishenjian?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=CST
    spring.datasource.dynamic.datasource.master.driver-class-name = com.mysql.jdbc.Driver
    spring.datasource.dynamic.datasource.master.druid.initial-size = 20
    
    
    spring.datasource.dynamic.datasource.second.username = xxxx
    spring.datasource.dynamic.datasource.second.password = xxxx
    spring.datasource.dynamic.datasource.second.url = jdbc:mysql://10.0.0.127:3306/zjcp_isj_user?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    spring.datasource.dynamic.datasource.second.driver-class-name = com.mysql.cj.jdbc.Driver
    spring.datasource.dynamic.datasource.second.druid.initial-size = 20
    

    其中一个数据源名称为master,为默认数据库,另外一个数据源名称为“second”。

    在代码中如果不做其他配置则默认使用master数据源,当需要使用名称为“second”的数据源时,只需要使用@DS注解。例如:

    @DS("second")
    public class AttendanceServiceImpl implements AttendanceService {
    }
    

    该注解可使用在service上,也可以使用在实现类上,也可以使用在方法上,自由选择。但是需要注意的是,事务会使得这个注解失效,使用默认数据源。

    展开全文
  • Spring 配置Oracle和mysql双数据源Spring DataSource配置: ${database.driver} ${database.url} ${database.username} ${database.password} 10 ...
  • resin文件配置(我用的resin,其他的可自行配置)jdbc/OracleDBjdbc:oracle:thin:@192.168.1.9:1521:orclycgycg82030sjdbc/mysqlDBjdbc:mysql://39.98.47.52:3306/dev-... 然后写一个数据源持有类:package org.thcic...
  • 然后在pom.xml中引入相关依赖mysqlmysql-connector-javacom.microsoft.sqlservermssql-jdbc6.5.4.jre8-previewtestcom.microsoft.sqlserversqljdbc44.0org.aspectjaspectjweaver1.9.2二、数据源配置本文用到的两个...
  • # 数据源相关配置 datasource: dynamic: # 主数据源 primary: master datasource: # 数据源1 master: url: jdbc:oracle:thin:@localhost:1521:ORCL type: com.alibaba.druid.pool.DruidDataSource
  • 新写了一个项目 需要兼容mysql和Oracle数据库 因此需要在springboot中配置多数据源 1.配置pom.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=...
  • 业务需要切换数据源,后台配置双数据源用于处理kafka生产者发送过来的实时数据,kafka消费者后台配置主从库双数据源。 难受的是主从库,库名表名列个数均不同,一开始就报找不到某列,Unknown Column ‘xxx’,找了...
  • 由于最近做的项目中遇到多数据源的业务场景,就在思考一个问题,如果一个操作里面包含了多个数据库操作,并且这些数据库操作的数据源不止一个。需要使用事务来,保持数据一致性。 问题描述: 为了能够使得多个...
  • Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法发布于 2020-8-2|复制链接摘记: 前言本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考...
  • 采用的是SpringBoot2 + SpringDataJPA + MySQL + 双数据源!一、双数据源的适用场景:1、主从库分离(数据库读写分离)2、数据迁移3、系统版本升级,数据库升级到另外一款二、application.yml中配置spring:jpa:...
  • 配置双数据源

    2021-03-24 11:48:52
    .首先在yml文件配置 数据源调用:1.使用@ConfigurationProperties注入容器 2.做切面处理根据需求实现ordered接口 我的是需要双数据源切换的
  • SpringBoot + mybatis-plus + druid 实现mySql与Orcl双数据源 项目结构图 效果图 注意细节 1.testRun中的applicationTestRun.java 为测试文件 2.config中的为双数据源的配置代码 3.运行是需要自行修改实体中的字段...
  • 项目配置双数据源问题问题解决思路结束 问题 新项目需要配置多数据源,之前配置过,我就直接接手。SpringBoot的版本为1.5.4,项目底层使用hibernate JPA。由于之前配置过,所以比较快速的配置完了,结果启动时发现...
  • 在小型项目中,一般配置一个数据库,也就是一个mybatis数据源,但是有时候需要同时支持两种数据库,比如mysql和oracle. 最笨的方法就是配置两个spring配置文件,然后根据不同的部署,采用不同的配置文件,其实这两个...
  • SpringBoot+mybatis配置双数据源配置案例 任务要求 公司某项目需要通过直接调用外系统的 sql server 数据库存过,处理存过返回数据并将结果返回到前台页面。 案例实现 因为要调用的是 sql server ,因此我们需要...
  • 配置多数据源,由于不常用就进行了百度,百度了很久(有很多都不能用),加上自己修修改改,终于能用了。那么就废话不多说,直接上代码。 SpringBoot应用启动类注解: @MapperScan("com.xxx.mapper") @SpringBoot...
  • 配置多数据源时导致分页失效 查询的集合不是Page的实例导致分页失效 public static PagedResult toPagedResult(List datas) { PagedResult result = new PagedResult(); if (datas instanceof Page) { }else { ...
  • Redis 多数据源配置

    2021-03-09 17:21:44
    由于项目需求或者性能需求,一个项目可能需要使用多个 redis 数据源,具体使用如下。 配置文件 spring: redis: #默认数据源 expireSeconds: 120 commandTimeout: 10000 #redis操作的超时时间 pool: maxActive: ...
  • 应用一主数据源和应用数据源(代码中手动切换数据源)1.jdbc.properties(连接两个库)jdbc.user=root jdbc.password=123456 jdbc.driver=...
  • 文章目录一、前言二、整合sharding-jdbc和多数据源1、`pom.xml`中引入依赖2、`application.yml`中新增多数据源配置3、sharding-jdbc集成动态数据源配置类4、使用`@DS`切换数据源三、本文案例demo源码 一、前言 ...
  • AOP 实现多数据源切换 1、数据源配置 # 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: url: jdbc:...
  • 这个系统会用到两个数据库,所有我今天就把配置多数据源的方法贴出来 1.首先要准备两个数据源,哈哈哈..... 2.要准备一个springboot mybatis搭建的框架 3.现在application.yml 里配置数据源 spring: ...
  • java配置两个数据源

    2021-04-17 09:53:19
    目标数据源, 中 key 的值必须要和 JdbcContextHolder 类中设置的参数值相同,如果有多个值,可以配置 多个< ......JNDI(Java Naming and Directory Interface)是用于向Java程序 提供目录和命名功能的API。 配置数据...
  • 首先Springboot+Mybatis+druid动态多数据源的配置是这样的 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @MapperScan(basePackages = "com.xxx.xxx.mapper") @Import({...
  • 数据源在配置文件中的配置xmlns:xsi=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 323,483
精华内容 129,393
关键字:

双数据源

友情链接: Untitled8.rar