Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议
一、项目需求
在开发过程中,由于技术的不断迭代,为了提高开发效率,需要对原有项目的架构做出相应的调整。
二、存在的问题
为了不影响项目进度,架构调整初期只是把项目做了简单的maven管理,引入springboot并未做spring cloud微服务处理。但随着项目的进一步开发,急需拆分现有业务,做微服务处理。因此架构上的短板日益突出。spring cloud config 无法完全应用,每次项目部署需要修改大量配置文件。严重影响开发效率,因此便萌生了对项目架构再次调整的决心。
三、调整建议
为了兼容以前的代码版本,尽量不修改现有的代码结构,以免增加额外的工作量并且为了更好的应用cloud config。
首先,创建JdbcConfigBean类,用以读取配置文件,实例代码入如下(仅供参考):
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@RefreshScope
@Component("jdbcConfigBean")
public class JdbcConfigBean {
@Value("${jdbc.driver}")
private String driver;
@Value("${db1.jdbc.url}")
private String url;
@Value("${db1.jdbc.username}")
private String username;
@Value("${db1.jdbc.password}")
private String password;
@Value("${db2.jdbc.url}")
private String db2_url;
@Value("${db2.jdbc.username}")
private String db2_username;
@Value("${db2.jdbc.password}")
private String db2_password;
// 其他数据源
// 其他配置
// 相应的getter setter 方法
}
其次,创建数据源,代码示例如下(仅供参考):
/**
* xml Mabatis XML配置文件
* @param xml
* @return
*/
public static SqlSessionFactory create(String xml){
JdbcConfigBean jdbcConfigBean = (JdbcConfigBean) SpringContextUtil.getBean("jdbcConfigBean");
Properties properties = new Properties();
properties.setProperty("jdbc.driver", jdbcConfigBean.getDriver());
properties.setProperty("db1.jdbc.url", jdbcConfigBean.getUrl());
properties.setProperty("db1.jdbc.username", jdbcConfigBean.getUsername());
properties.setProperty("db1.jdbc.password", jdbcConfigBean.getPassword());
properties.setProperty("db2.virtual.jdbc.url", jdbcConfigBean.getDb2_url());
properties.setProperty("db2.virtual.jdbc.username", jdbcConfigBean.getDb2_username());
properties.setProperty("db2.virtual.jdbc.password", jdbcConfigBean.getDb2_password());
// 其他属性
try {
Reader reader = Resources.getResourceAsReader(xml);
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
return sqlSessionFactoryBuilder.build(reader, properties);
} catch (IOException e) {
log.error("创建数据源失败:" + e.getMessage());
}
return null;
}
以上,便可以做多数据元的配置,并且在不改动现有代码结构的条件下很好的集成spring cloud config和Mybatis。
四、总结
写作目的不是为了解决具体的问题,因为每个人遇到的项目都不相同,问题也不会一样,应用场景也不尽相同。对于具体问题可能有失参考意义。但是我们也应该看到通用的部分,比如多数据源的配置,cloud config的应用等等。
最后需要说明的一点是不要拘泥于具体的实现,而是要体会其中的逻辑,理解技术应用的方式。具体实现并不重要,重要的是解决问题的过程以及其中的思想,为什么要这样做,为什么可以这样做,这样做的好处在哪里?真正理解技术,这些问题便不难回答。
总结难免有不当之处,欢迎诸位指正!希望可以通过不断的讨论总结精进技术。让我们同技术死磕到底!
来源:https://blog.csdn.net/weixin_35971547/article/details/85632346
Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议的更多相关文章
- Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结
在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...
- Spring Cloud微服务限流之Sentinel+Apollo生产实践
Sentinel概述 在基于Spring Cloud构建的微服务体系中,服务之间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素.在并发流量比较高的情况下,由于网络调用之间存 ...
- 【spring colud】spring cloud微服务项目搭建【spring boot2.0】
spring cloud微服务项目搭建 =================================== 示例版本: 1.spring boot 2.0版本 2.开发工具 IntellJ IDE ...
- Spring Cloud微服务中网关服务是如何实现的?(Zuul篇)
导读 我们知道在基于Spring Cloud的微服务体系中,各个微服务除了在内部提供服务外,有些服务接口还需要直接提供给客户端,如Andirod.IOS.H5等等. 而一个很尴尬的境地是,如果直接将提 ...
- Dubbo和Spring Cloud微服务架构比较
Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...
- Dubbo 和 Spring Cloud微服务架构 比较及相关差异
你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
- Spring Cloud 微服务二:API网关spring cloud zuul
前言:本章将继续上一章Spring Cloud微服务,本章主要内容是API 网关,相关代码将延续上一章,如需了解请参考:Spring Cloud 微服务一:Consul注册中心 Spring clou ...
- Spring Cloud微服务学习笔记
Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...
随机推荐
- 探讨instanceof实现原理,并用两种方法模拟实现 instanceof
在开始之前先了解下js数据类型 js基本数据类型: null undefined number boolean string js引用数据类型: function object array 一说ins ...
- html input size maxlength
最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此! <p>Name: <inp ...
- 【SR】正则化超分辨率复原
正则化超分辨率图像重建算法研究--中国科学技术大学 硕士学位论文--路庆春 最大后验概率(MAP)的含义就是在低分辨率图像序列已知的前提下,使高分辨率图像出现的概率达到最大.
- thrift框架总结,可伸缩的跨语言服务开发框架
thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...
- 爬虫实战【10】利用Selenium自动登陆京东签到领金币
今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币. 如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前 ...
- eslint Rules
Rules 为了让你对规则有个更好的理解,ESLint 对其进行了分门别类. 所有的规则默认都是禁用的.在配置文件中,使用 "extends": "eslint:reco ...
- Dart基础学习01--走近Dart
什么是Dart 在Dart的官网上是这样介绍Dart的: Dart is an open-source, scalable programming language, with robust libr ...
- Log4j 2
Log4j – Apache Log4j 2 - Apache Log4j 2 http://logging.apache.org/log4j/2.x/ Apache Log4j 2 Apache L ...
- [荐][转]为何应该使用 MacOS X(论GUI环境下开发人员对软件的配置与重用)
一周前我和 Tinyfool 闲聊苹果操作系统,都认为对于开发人员来说,苹果操作系统(MacOS)是上佳的选择.Tinyfool 笔头很快,当即就写了一篇长文章,我则笔头很慢,今天才全部码好.他的文章 ...
- TCP原理
1.http://coolshell.cn/articles/11564.html 2.http://coolshell.cn/articles/11609.html 3.一站式学习wireshark ...