spring boot使用多数据源体验
小白是一名.net程序员,之前小白介绍了过了自己的博客系统http://www.ttblog.site/,用.net写厌了,所以想学下java尝尝鲜,于是小白准备用spring boot来实现一个博客内容管理系统。
因为管理系统要有自己的数据源,但是又要从博客系统获取博客内容,所以第一反应是要弄一个多数据源,因为没有java开发实战基础,所以都是从网上百度的,这里只是把自己的过程分享出来。
配置数据源:
spring.datasource.data-blog.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.data-blog.username=
spring.datasource.data-blog.password=
spring.datasource.data-blog.jdbc-url=jdbc:mysql://127.0.0.1:3306/Blog?characterEncoding=utf8&useSSL=false&serverTimezone=UTC spring.datasource.data-cms.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.data-cms.username=
spring.datasource.data-cms.password=
spring.datasource.data-cms.jdbc-url=jdbc:mysql://127.0.0.1:3306/CMS?characterEncoding=utf8&useSSL=false&serverTimezon
注意:之前我写的是 spring.datasource.data-cms.url,但是出现“jdbcUrl is required with driverClassName”错误,于是百度得到结果为替换成jdbc-url:https://blog.csdn.net/qq_40437152/article/details/90905336
创建数据配置:
package com.blog.cms.properties; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import javax.sql.DataSource; @Configuration
@MapperScan(basePackages = "com.blog.cms.dao.b",sqlSessionFactoryRef = "blogSqlsessionFactory")
public class DataSourceBLOG {
/**
* 返回数据源
* @return
*/
@Bean(name = "blogDataSoruce")
@ConfigurationProperties(prefix="spring.datasource.data-blog")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
} /**
* 返回数据库会话工厂
* @return
*/
@Bean(name = "blogSqlsessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("blogDataSoruce")DataSource dataSource) throws Exception{
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/b/**/*Mapper.xml"));
return bean.getObject();
} /**
* 返回数据库会话模板
* @return
*/
@Bean(name = "blogSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("blogSqlsessionFactory")SqlSessionFactory factory){
return new SqlSessionTemplate(factory);
}
/**
* 返回数据库的事务
* @param dataSource
* @return
*/
@Bean(name = "blogTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("blogDataSoruce") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
} /**
* 返回jdbc
* @param dataSource
* @return
*/
@Bean
public JdbcTemplate jdbcTemplate(@Qualifier("blogDataSoruce") DataSource dataSource){
return new JdbcTemplate(dataSource);
package com.blog.cms.properties; import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
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 org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component; import javax.sql.DataSource; @Configuration
@MapperScan(basePackages = "com.blog.cms.dao.c",sqlSessionFactoryRef = "cmsSqlsessionFactory")
public class DataSourceCMS {
/**
* 返回数据源
* @return
*/
@Bean(name = "cmsDataSoruce")
@ConfigurationProperties(prefix="spring.datasource.data-cms")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
} /**
* 返回数据库会话工厂
* @return
*/
@Bean(name = "cmsSqlsessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("cmsDataSoruce")DataSource dataSource) throws Exception{
SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/c/**/*Mapper.xml"));
return bean.getObject();
} /**
* 返回数据库会话模板
* @return
*/
@Bean(name = "cmsSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("cmsSqlsessionFactory")SqlSessionFactory factory){
return new SqlSessionTemplate(factory);
}
/**
* 返回数据库的事务
* @param ds
* @return
*/
@Bean(name = "cmsTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("cmsDataSoruce") DataSource ds){
return new DataSourceTransactionManager(ds);
}
@Autowired
@Qualifier("jdbcTemplate")
private JdbcTemplate jdbcTemplate; @Override
public List<String> selectTables(String dataBaseName) {
String sql="select table_name from information_schema.tables where table_schema=?";
try {
List<String> list= jdbcTemplate.queryForList(sql,String.class,dataBaseName);
return list;
}
catch (Exception ex)
{
return null;
} }
注意:如果你不需要使用原生jdbc,则不需要最后一个方法,我这里是需要。并且要加上“bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/b/**/*Mapper.xml"));”,我网上查的是有的人没加,但是我不加的话一直提示找不到select节点的错误。
启动类:
@SpringBootApplication(scanBasePackages = {"com.blog.cms", "com.blog.cms.web"})
@EnableScheduling
@ServletComponentScan
@EnableTransactionManagement(proxyTargetClass = true)
public class AdminWebApplication {
public static void main(String[] args) {
SpringApplication.run(AdminWebApplication.class, args);
}
}
我的代码结构如图,每个数据源所对应的mapper和xml都要分开:

目前到现在,我已是能够正常的运行项目了,但是目前还不知道配置数据源的地方那几个注解的作用,准备去把它搞懂。总的感觉会.net再学java觉得很轻松,大部分都是类似的。
spring boot使用多数据源体验的更多相关文章
- spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法
Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...
- Spring Boot配置多数据源并实现Druid自动切换
原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...
- Spring Boot与多数据源那点事儿~
持续原创输出,点击上方蓝字关注我 目录 前言 写这篇文章的目的 什么是多数据源? 何时用到多数据源? 整合单一的数据源 整合Mybatis 多数据源如何整合? 什么是动态数据源? 数据源切换如何保证线 ...
- Spring Boot + Druid 多数据源绑定
date: 2019-12-19 14:40:00 updated: 2019-12-19 15:10:00 Spring Boot + Druid 多数据源绑定 版本环境:Spring Boot 2 ...
- 如何通过Spring Boot配置动态数据源访问多个数据库
之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...
- spring boot(四) 多数据源
前言 前一篇中我们使用spring boot+mybatis创建了单一数据源,其中单一数据源不需要我们自己手动创建,spring boot自动配置在程序启动时会替我们创建好数据源. 准备工作 appl ...
- 工具篇-Spring boot JPA多数据源
写这篇博文是因为这个东西坑太多,首先说明下边实现的多数据源不是动态切换的,应该算是静态的. 坑一.pom文件 pom中spring boot以及mysql connector的版本一定要注意. < ...
- spring boot 配置双数据源mysql、sqlServer
背景:原来一直都是使用mysql数据库,在application.properties 中配置数据库信息 spring.datasource.url=jdbc:mysql://xxxx/test sp ...
- Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用
前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...
- spring boot mybatis多多数据源解决方法
在我们的项目中不免会遇到需要在一个项目中使用多个数据源的问题,像我在得到一个任务将用户的聊天记录进行迁移的时候,就是用到了三个数据源,当时使用的AOP的编程方式根据访问的方法的不同进行动态的切换数据源 ...
随机推荐
- oeasy教您玩转vim - 62 - # 缓冲buffer
编辑过程 回忆上次 我们这次了解了编辑过程 默认有一个替换文件swap 修改的内容会保存到一个swap文件 如果swp已经存在 会有个swo文件 以此类推 替换文件可以进行对源文件的修复 没保存到 ...
- SQL分析“聚集索引、非聚集索引”区别
概述 聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序. 聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序,因此一 ...
- JavaScript 监听组合按键
JavaScript监听组合按键 by:授客 QQ:1033553122 1. 思路 如图,通过监听并打印键盘keydown事件,得到图示内容,观察发现, 当按下的组合键包含Ctrl键时,ct ...
- Java工具库——Hutool的常用方法
Hutool-All(或简称Hutool)是一个功能强大的Java编程工具库,旨在简化Java应用程序的开发. 它提供了大量的工具类和方法,涵盖了各种常见任务,包括字符串处理.日期时间操作.文件操作. ...
- jwt redis,微信登陆知识复习 uniapp 请求封装,统一异常处理 相关, HutoolDemo工具介绍)
第三节 后台布局搭建,代码可以人工智能来写,但是环境初步搭建需要我们先建起来,所以以下记录快带搭建的过程, 思路: 后台首页的搭建 第一 用到了element--UI 自带的页面布局组件,它就 ...
- 使用git(ee的一个小总结
我先把后端项目推进了gitee,后面为了方便又想把前端也放在同一个项目里,结果出问题了: 一开始是因为前端项目内包含了.git的文件(这个玩意还是隐藏文件,就是你在idea里其实是看不到他的),导致只 ...
- BeanUtils.copyProperties无法复制list对象,替换为lambda表达式
List<Setmeal> setmeals = setmealMapper.selectList(queryWrapper); List<SetmealVO>vo=new A ...
- linux中whereis、which、find、locate的区别
linux中whereis.which.find.locate的区别 1. find fan路名含 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用实例 ...
- docker 安装 centos8 mysql8 java tomcat
docker 安装 centos8 mysql8 java tomcat 一,首先在window10系统安装docker,这里就不再描述了. 二,启动docker下载安装centos8镜像 注意: ...
- 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文介绍Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书,如需要了解Halo 2的安装,参考如何在Linux云服务器上通过Docker Compose部署安装Halo, ...