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的编程方式根据访问的方法的不同进行动态的切换数据源 ...
随机推荐
- k8s livenessprobe和readinessprobe详解
一.为什么需要容器探针 如何保持Pod健康 只要将pod调度到某个节点,Kubelet就会运行pod的容器,如果该pod的容器有一个或者所有的都终止运行(容器的主进程崩溃),Kubelet将重启容器, ...
- 开发板测试手册——USB 4G 模块、GPS 定位功能操作步骤详解(3)
目录 4 USB 4G 模块测试 41 4.1 网络功能测试 42 4.2 短信功能测试 43 4.3 GPS 定位功能测试 44 4.4 通话功能测试 45 4.5 测试程序编译 46 5 USB ...
- Spark3学习【基于Java】2. Spark-Sql核心概念
SparkSession 从Spark2开始,Spark-SQL引入了SparkSession这个核心类,它是处理DataSet等结构数据的入口.在2.0之前,使用的是spark-core里的Spar ...
- 【Playwright+Python】系列教程(四)Pytest 插件在Playwright中的使用
一.命令行使用详解 使用Pytest插件在Playwright 中来编写端到端的测试. 1.命令行执行测试 pytest --browser webkit --headed 2.使用 pytest.i ...
- Linux Shell 常用命令 - 01篇
系列文章: Linux Shell 常用命令 - 02篇 0. 在线使用 Linux Shell 参考 https://www.sohu.com/a/343421845_298038 JS/UIX - ...
- 自学Java第二周
本周学习 一.Java能干些什么? 1.共三个版本:Java SE.Java EE.Java ME Java SE:Java语言的(标准版),用于桌面应用开发,是其他两个版本的基础. Java ME: ...
- MongDB 的下载和安装
1.官网: https://www.mongodb.com/ 2.进入下载链接,选择windows平台版本 https://www.mongodb.com/try/download/community ...
- [oeasy]python0122_日韩字符_日文假名_JIS_Shift_韩国谚文
日文假名和韩国谚文 回忆上次内容 上次回顾了非ascii的拉丁字符编码的进化过程 0-127 是 ascii 的领域 世界各地编码分布 拉丁字符扩展 ascii 共 16 种 由iso组织制定 从 ...
- EF Core性能优化技巧
代码层面的优化 1. 使用实例池 EFCore2.0 为DbContext引入新的注册方式:透明地注册了 DbContext实例池,使用这种方式可以避免始终创建新的实例,EF Core 将重置其状态并 ...
- 11、Git之自建项目托管平台(GitLab极狐)
11.1.简介 Github 是国外的项目托管平台,由于网络问题,在国内访问和使用不是很方便. Gitee 是国内的项目托管平台,虽然在访问和使用上挺方便的,但依然让人担忧项目代码可能会被泄露. 因此 ...