springboot连接多个数据库

springboot连接多个数据库今天接到一个新的需求,需要把自己数据库某个表的数据迁移到别的数据库中,于是百度,中间出现了一些细节的问题,解决花了点时间,在此记录一下,下次避免出现过的错误这里把连接一个数据库的情况也记录一下,好做对比一、连接一个数据库1.启动类@SpringBootApplication//扫描mapper映射类所在路径@MapperScan(basePackages="com.xh….

大家好,又见面了,我是你们的朋友全栈君。

今天借到一个新的需求,需要把自己数据库某个表的数据迁移到别的数据库中,于是百度,中间出现了一些细节的问题,解决花了点时间,在此记录一下,下次避免出现过的错误

这里把连接一个数据库的情况也记录一下,好做对比

一、连接一个数据库

1.启动类

@SpringBootApplication
//扫描mapper映射类所在路径
@MapperScan(basePackages = "com.xh.iot.repositories.mapper")
public class EmDataProcApplication {

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

2.配置文件application.properties

# MySql Database
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/iothub_base?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=Xtjc0551Mysql!


# MyBaits,xml映射文件所在目录,resources下
mybatis.mapper-locations=classpath:mapping/*.xml

3.添加mapper对应的service和serviceImpl,最后在controller中添加service实例操作数据库

二、连接多个数据库

1.启动类

//EnableAutoConfiguration注解,关闭springBoot关于mybatis的一些自动注入
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})
//加入定时器
@EnableScheduling
@SpringBootApplication
public class DataTransGsiotApplication {

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

2.配置文件application.properties,配置了2个库的连接

#  MySql Database
#org_base库
spring.datasource.org.jdbcUrl=jdbc:mysql://127.0.0.1:3306/org_base?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
spring.datasource.org.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.org.username=root
spring.datasource.org.password=Xtjc0551Mysql!
#gs_iot_v1库
spring.datasource.gsiot.jdbcUrl=jdbc:mysql://127.0.0.1:3306/gs_iot_v1?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
spring.datasource.gsiot.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.gsiot.username=root
spring.datasource.gsiot.password=root

3.创建2个数据库连接的配置类

GsIotDataSourceConfig类

package com.xh.iot.repositories.datasource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.xh.iot.repositories.mapper.gsiot",sqlSessionFactoryRef = "gsiotSqlSessionFactory")
public class GsIotDataSourceConfig {
    @Primary
    @Bean(name = "gsiotDataSource")
    @ConfigurationProperties("spring.datasource.gsiot")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "gsiotSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("gsiotDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapping/gsiot/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

 OrgDataSourceConfig类

package com.xh.iot.repositories.datasource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.xh.iot.repositories.mapper.org",sqlSessionFactoryRef = "orgSqlSessionFactory")
public class OrgDataSourceConfig {
    @Primary
    @Bean(name = "orgDataSource")
    @ConfigurationProperties("spring.datasource.org")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "orgSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("orgDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapping/org/*.xml"));
        return sessionFactoryBean.getObject();
    }
}

注意:

1、注意多个数据库的application.properties文件,数据库连接用jdbcUrl或者jdbc-url

2、如果有更多的数据库连接,可以按照这种方式添加;不同的数据库,需要不同的配置类,可以把这些配置类放在同一个目录中
3、 每个配资类中,需要指明当前数据库表的xml文件和mapper映射文件所在的包名,并且把xml和mapper放置到对应的目录中
4、其他的比如:xml里面sql语句的写法和正常一个连接是一模一样,添加mapper对应的service和serviceImpl,最后在controller中添加不同的service实例就可以操作对应数据库了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152884.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 初学css list-style属性「建议收藏」

    初学css list-style属性「建议收藏」网上很多css布局中会看到这样的一句:list-style:none;那么list-style到底什么意思?中文即:列表样式:无;其实它是一个简写属性,包含了所有列表属性,具体包含list-sty

    2022年8月5日
    11
  • hibernate5二级缓存配置

    hibernate5二级缓存配置hibernate默认有一个一级缓存,就是默认的Session缓存,当我们做了一次查询,hibernate会把这个结果缓存起来,叫做一级缓存,当我们接着在这个Session会话里面再做一次同样条件的查询,hibernate不会再次查询数据库,而是直接在一级缓存中获取结果并返回。一级缓存是内置的,他也不能被卸载。一级缓存是指在同一个Session会话内的查询做的缓存,如果跨了Session,或者当前…

    2022年5月23日
    28
  • JavaCV开发详解之1:调用本机摄像头并预览摄像头图像画面视频(建议使用javaCV最新版本)「建议收藏」

    JavaCV开发详解之1:调用本机摄像头并预览摄像头图像画面视频(建议使用javaCV最新版本)「建议收藏」快速传送至:javacv入门指南:序章javaCV系列文章:javacv开发详解之1:调用本机摄像头视频javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)j…

    2022年6月12日
    30
  • jdbctype=null_could not get jdbc connection

    jdbctype=null_could not get jdbc connectionresultMap中映射没注意jdbcType类型直接报错:Cause:org.apache.ibatis.builder.BuilderException:ErrorresolvingJdbcType.Cause:java.lang.IllegalArgumentException:Noenumconstantorg.apache.ibatis.type.JdbcType.int随后检查XML文件映射问题,发现应该是INTEGER,jdbcType中没有int。附上MyBat.

    2022年10月20日
    0
  • java session id 生成_Java通过sessionId获取Session「建议收藏」

    java session id 生成_Java通过sessionId获取Session「建议收藏」Servlet2.1之后不支持SessionContext里面getSession(Stringid)方法。但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext。MySessionContext.java:publicclassMySessionContext{privatestaticHashMapmymap=n…

    2022年7月16日
    52
  • 协方差矩阵和类内离散度矩阵_类间散度矩阵

    协方差矩阵和类内离散度矩阵_类间散度矩阵协方差矩阵和散布矩阵的意义在机器学习模式识别中,经常需要应用到协方差矩阵C和散布矩阵S。如在PCA主成分分析中,需要计算样本的散度矩阵,有的论文是计算协方差矩阵。实质上二者意义差不多,散布矩阵(散度矩阵)前乘以系数1/(n-1)就可以得到协方差矩阵了。在模式识别的教程中,散布矩阵也称为散度矩阵,有的也称为类内离散度矩阵或者类内离差阵,用一个等式关系可表示为:关系:散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)样本的协方差矩阵乘以n-1倍即为散布矩阵,n表示样本

    2025年8月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号