Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >完整Demo:springboot实现多数据源配置

完整Demo:springboot实现多数据源配置

作者头像
架构师小跟班
发布于 2019-08-07 02:06:35
发布于 2019-08-07 02:06:35
1.8K0
举报
文章被收录于专栏:架构师小跟班架构师小跟班

背景

公司有一套人脸识别动态布控系统,该系统有两个子系统组成,识别算法采用C++编写,后台管理系统采用Java编写,C程序提供HTTP接口供Java程序调用,两个程序都是本地化部署。现在有个问题,C程序是南理工学生写的,需求响应不及时,接口不能立马提供,所以考虑由Java程序配置多数据源直接读C程序的数据库

整体代码结构

config:两个数据库的配置

entity:实体类

test1/test2:Dao层,操作数据库,要在config中分别配置dao层包路径:basePackages = "com.example.demo.test1"

web:测试用的,通过浏览器或postman调接口,分别往两个数据库中插数据

项目源码下载地址:点击跳转

第一步:创建项目

使用Spring官网提供的在线工具创建springboot项目,最简单的即可。

工具地址:https://start.spring.io/

第二步:引入依赖jar包

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-test</artifactId>

        <scope>test</scope>

    </dependency>

    <!--freemarker支持-->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-freemarker</artifactId>

    </dependency>

    <!-- mysql驱动 -->

    <dependency>

        <groupId>mysql</groupId>

        <artifactId>mysql-connector-java</artifactId>

    </dependency>

    <!--整合mybatis-->

    <dependency>

        <groupId>org.mybatis.spring.boot</groupId>

        <artifactId>mybatis-spring-boot-starter</artifactId>

        <version>1.1.1</version>

    </dependency>

</dependencies>

第三步:添加系统配置文件application.properties

server.port=8080

server.servlet.context-path=/demo

## test1 数据源配置

spring.datasource.test1.driverClassName=com.mysql.jdbc.Driver

spring.datasource.test1.jdbc-url=jdbc:mysql://192.168.1.12:3306/test?useUnicode=true&characterEncoding=utf8

spring.datasource.test1.username=root

spring.datasource.test1.password=123456

## test2 数据源配置

spring.datasource.test2.driverClassName=com.mysql.jdbc.Driver

spring.datasource.test2.jdbc-url=jdbc:mysql://192.168.1.12:3306/test2?useUnicode=true&characterEncoding=utf8

spring.datasource.test2.username=root

spring.datasource.test2.password=123456

第四步:添加数据源配置

数据库test配置DB1Config

/**

 * @author :xy.hero@qq.com

 * @date :Created in 2019-07-26 15:44

 * @description:www.jiagou1216.com

 */

@Configuration

@MapperScan(basePackages = "com.example.demo.test1", sqlSessionFactoryRef = "test1SqlSessionFactory")

public class DB1Config {

    @Bean(name = "test1DataSource")

    @ConfigurationProperties(prefix = "spring.datasource.test1")

    @Primary

    public DataSource testDataSource() {

        return DataSourceBuilder.create().build();

    }

    @Bean(name = "test1SqlSessionFactory")

    @Primary

    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {

        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

        bean.setDataSource(dataSource);

        return bean.getObject();

    }

    @Bean(name = "test1TransactionManager")

    @Primary

    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {

        return new DataSourceTransactionManager(dataSource);

    }

    @Bean(name = "test1SqlSessionTemplate")

    @Primary

    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {

        return new SqlSessionTemplate(sqlSessionFactory);

    }

}

数据库test2配置DB2Config

/**

 * @author :xy.hero@qq.com

 * @date :Created in 2019-07-26 15:50

 * @description:www.jiagou1216.com

 */

@Configuration

@MapperScan(basePackages = "com.example.demo.test2", sqlSessionFactoryRef = "test2SqlSessionFactory")

public class DB2Config {

    @Bean(name = "test2DataSource")

    @ConfigurationProperties(prefix = "spring.datasource.test2")

    public DataSource testDataSource() {

        return DataSourceBuilder.create().build();

    }

    @Bean(name = "test2SqlSessionFactory")

    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {

        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

        bean.setDataSource(dataSource);

        return bean.getObject();

    }

    @Bean(name = "test2TransactionManager")

    public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {

        return new DataSourceTransactionManager(dataSource);

    }

    @Bean(name = "test2SqlSessionTemplate")

    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {

        return new SqlSessionTemplate(sqlSessionFactory);

    }

}

第五步:其他类,数据库建表

CREATE TABLE `book` (

  `bookid` int(11) NOT NULL AUTO_INCREMENT,

  `bookname` varchar(255) DEFAULT NULL,

  `bookprice` decimal(10,2) DEFAULT NULL,

  PRIMARY KEY (`bookid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Book

/**

 * @author :xy.hero@qq.com

 * @date :Created in 2019-07-26 15:50

 * @description:www.jiagou1216.com

 */

public class Book {

    private Integer bookid;

    private String bookname;

    private Integer bookprice;

    get/set略...

}

Book1Dao

@Service

public interface Book1Dao {

    @Select("select * from book where bookname=#{bookname}")

    public Book findByName(@Param("bookname") String bookname);

    @Insert("insert into book(bookname,bookprice) values (#{bookname},#{bookprice})")

    public int insertBook(@Param("bookname") String bookname, @Param("bookprice") Double bookprice);

    @Select("select * from book")

    public Book findBook(@Param("Book") Book book);

}

Book2Dao

@Service

public interface Book2Dao {

    @Select("select * from book where bookname=#{bookname}")

    public Book findByName(@Param("bookname") String bookname);

    @Insert("insert into book(bookname,bookprice) values (#{bookname},#{bookprice})")

    public int insertBook(@Param("bookname") String bookname, @Param("bookprice") Double bookprice);

}

BookController

/**

 * @author :xy.hero@qq.com

 * @date :Created in 2019-07-26 15:53

 * @description:www.jiagou1216.com

 */

@RestController

public class BookController {

    @Autowired

    private Book1Dao book1Dao;

    @Autowired

    private Book2Dao book2Dao;

@RequestMapping("insert1")

    public void insert1() {

        book1Dao.insertBook("金瓶梅", 99.9);

        System.out.println("success");

    }

    @RequestMapping("insert2")

    public void insert2() {

        book2Dao.insertBook("帝国时代", 22.2);

        System.out.println("success");

    }

}

第六步:启动项目测试

浏览器访问,查看库中是否已添加数据:

http://localhost:8080/demo/insert1

http://localhost:8080/demo/insert2

如果项目启动报如下错误,请在application.properties配置文件中给每个数据源url后加:&serverTimezone=GMT

即:spring.datasource.test1.jdbc-url=jdbc:mysql://192.168.1.12:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT

异常信息:

java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.

You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

http://cdn.jiagou1216.com/20190727003228.png?imageView2/0/q/100|watermark/2/text/aHR0cHM6Ly93d3cuamlhZ291MTIxNi5jb20=/font/5a6L5L2T/fontsize/400/fill/IzAwMDAwMA==/dissolve/100/gravity/SouthEast/dx/10/dy/10

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springboot-mybatis多数据源的两种整合方法[通俗易懂]
随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力。一个项目使用多个数据库(无论是主从复制- – 读写分离还是分布式数据库结构)的重要性变得越来越明显。传统项目中(个人对传统项目的理解就是所有的业务模块都在一个tomcat中完成,多个相同的tomcat集群也可认为是传统项目)整合多数据源有两种方法:分包和AOP。
全栈程序员站长
2022/09/12
4.5K0
springboot-mybatis多数据源的两种整合方法[通俗易懂]
mybatis+springboot+druid多数据源配置
加上这段annotation@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
gfu
2019/10/22
2.7K1
springboot之mybatis多数据源最简解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。
Vincent-yuan
2020/10/27
7570
Spring配置多数据源实战
这里我们只演示同一个mysql下面的不同的两个库,主要采取分包的形式来区分不同的数据源:
Dream城堡
2022/01/07
5450
SpringBoot之SpringBoot整合多数据源
本来按照视屏来说,到上一章的打包运行就没有了,但是我百度翻了好一大波,找到了他的上一期中的其他剩余视屏
彼岸舞
2021/02/02
7730
Spring Boot 2.X(五):MyBatis 多数据源配置
MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度。本文直接以简单的代码示例,如何对 MyBatis 多数据源配置。
朝雾轻寒
2019/10/18
8090
Spring Boot 2.X(五):MyBatis 多数据源配置
SpringBoot整合多数据源
最近有一个需求,需要把安某服务器中MySQL中的数据导入到另一个MySQL中,当时感觉导出到xxx.sql,然后导入进新的数据库,发现MySQL导出到xxx.sql已经实现不了了,每次导出都会卡住,时间继续,但是导出条数一直不变,后来就想了个比较 笨的方法,就是查数据库1,然后插入数据库2,所以需要SpringBoot整合多数据源,从而记录搭建环境的过程。
CBeann
2023/12/25
2370
SpringBoot整合多数据源
【详解】JavaSpringMVC+MyBitis+多数据源切换
在企业级应用开发中,经常需要处理来自不同数据库的数据。为了满足这一需求,我们可以通过配置多个数据源来实现对不同数据库的访问。本文将介绍如何在Spring MVC框架下结合MyBatis实现多数据源的动态切换。
大盘鸡拌面
2025/01/19
1930
Spring Boot(七):Mybatis 多数据源最简解决方案
一个 test1 库和一个 test2 库,其中 test1 位主库,在使用的过程中必须指定主库,不然会报错。
纯洁的微笑
2019/05/17
3850
Springboot 之 Mybatis 多数据源实现
上篇讲解了 JPA 多数据源实现;这篇讲解一下 Mybatis 多数据源实现 。主要采用将不同数据库的 Mapper 接口分别存放到不同的 package,Spring 去扫描不同的包,注入不同的数据源来实现多数据源。原理跟 JPA 多数据源实现基本一致。
BUG弄潮儿
2022/12/05
1.6K0
Springboot 之 Mybatis 多数据源实现
Spring Boot 如何整合多个数据源?
SpringBoot现在是很多很多公司应用的后端框架,因为它搭建快,能更好、更快速的整合其他第三方。那么随着业务的不断扩展,业务量的增加,这时候就会牵扯到分库分表,虽然这个词听起来很熟悉,作为程序员也很容易理解,但是我想应该也有不少读者没接触过分库分表,今天我们不聊如何分库分表,而是聊SpringBoot如何整合多个数据源的事情。也就是如何接入不同的(多个)数据库。
Java_老男孩
2019/12/02
6430
springboot多数据源配置和使用
这个直接把多个数据库连接信息写上即可,用spring.datasource属性进行配置,如下:
用户7634691
2020/08/10
3.1K0
springboot+mybatis+mapper 多数据源映射不到实体
如果mapper.xml文件放在和dao一个包中一定要加入bean.setTypeAliasesPackage("cn.***.pojo"),不然映射不到实体
用户5899361
2020/12/07
1.2K0
springboot+mybatis+mapper 多数据源映射不到实体
【SpringBoot DB系列】Mybatis多数据源配置与使用
上一篇博文介绍 JdbcTemplate 配置多数据源的使用姿势,在我们实际的项目开发中,使用 mybatis 来操作数据库的可能还是非常多的,本文简单的介绍一下 mybatis 中,多数据源的使用姿势
一灰灰blog
2021/01/20
4040
【SpringBoot DB系列】Mybatis多数据源配置与使用
SpringBoot 整合多数据源 (MyBats + Druid)
大家在写项目的时候有没有遇到过这样的情况,当你需要你的好基友电脑上,服务器上的数据的时候,是不是就得依赖他给你的接口。这样做是不是局限性太大。假如有一种方式可以直接通过你的小伙伴的服务器上的账号密码,就可以自己定制化的操作你的小伙伴的服务器上的数据了,这样是不是很酷呢?
Gorit
2021/12/08
3610
SpringBoot 整合多数据源 (MyBats + Druid)
springboot mybatis优雅的添加多数据源
springboot的原则是简化配置,本文试图不通过xml配置,使用configuration配置数据源,并进行简单的数据访问。 并且配置了多数据源,在开发过程中这种场景很容易遇到。 1、依赖 springboot的starter mybatis的springboot集成包 jdbc <dependencies> 2、在application中打开configuration @Configuration public class Application { public static void ma
用户1225216
2018/03/05
1.3K0
SpringBoot整合MyBatis多数据源
在平常的项目中,我们有连接数据库的需求。一般都是一个项目一个数据库,但也有例外需要连接多个数据库的。
半月无霜
2023/03/03
1.1K0
SpringBoot整合MyBatis多数据源
MyBaits多数据源配置
MyBaits多数据源配置 环境及依赖 首先准备一个SpringBoot项目,主要依赖如下: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup pare
晓果冻
2022/09/08
7560
MyBaits多数据源配置
springboot2.0 多数据源整合问题 At least one JPA metamodel must be present!   at 数据源代码:启动报错信息:原因没有指定主数据源
数据源代码: 第一个读取配置文件代码: package com.datasource; import org.apache.ibatis.session.SqlSession
用户5899361
2020/12/07
9100
springboot(七):springboot+mybatis多数据源最简解决方案
说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解决方案,还有的是利用aop动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而已,折腾了两个小时整理出来,供大家参考。 废话不多说直接上代码吧 配置文件 pom包就不贴了比较简单该依赖的就依赖,主要是数据库这边的配置: mybatis.config-locations=classpath:mybati
纯洁的微笑
2018/04/19
1.4K0
推荐阅读
相关推荐
springboot-mybatis多数据源的两种整合方法[通俗易懂]
更多 >
LV.1
南京瑞易智能科技有限公司研发部门经理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档