热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot使用多数据源体验

 小白是一名.net程序员,之前小白介绍了过了自己的博客系统http:www.ttblog.site,用.net写厌了,所以想学下java尝尝鲜,于是小白准备用springboot

 小白是一名.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 selectTables(String dataBaseName) {
String sql="select table_name from information_schema.tables where table_schema=?";
try {
List 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觉得很轻松,大部分都是类似的。

转自:http://www.ttblog.site



推荐阅读
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
author-avatar
书友74972801
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有