基于mybatisPlus的多库支持实践
基于mybatisPlus的多库支持实践开发中, 存在一种这样的业务场景,就是我们的应用要支持多库,同一个应用,我a项目用mysql,b项目用oracle
收获充分利用sql的特性,和代码的特性,以及框架本身的特性,用最小的代价,来完成应用对多库的支持
多库支持原则
最小代价原则,充分利用sql的特性,充分利用代码的特性,利用框架的特性
分析
在使用mybatis plus过程中,有两种dao风格,一种是dsl风格,使用wrapper类,一种是需要join的sql,一般使用xml里面配置
从sql的角度入手,无论是oracle还是mysql,虽然差异也是有的,但是sql本身也是有规范的,所以,大部分简单sql本身就是支持oracle和mysql的,使用了函数的sql,或者groupby的sql一般是不能支持多db的,只需要关注差异化的sql即可
分页,分页每个数据库都不一样,mysql和postgresql完全一样,但是oracle比较古老,分页的sql也相对复杂,所以,分页各不一样
方案差异语句,使用wrapper一般wrapper使用了last,apply等函数的,一定是需要差 ...
shardingsphere简要介绍
shardingsphere简要介绍可以做什么
分布式数据库
数据安全
数据库网关
全链路压测
数据分片
数据加密
异构数据库支持
影子库
读写分离
行级权限(TODO)
SQL 方言转换(TODO)
可观测性
分布式事务
SQL 审计(TODO)
弹性伸缩
SQL 防火墙(TODO)
高可用
ShardingSphere-JDBC本文基于当时最新版本5.1.0
定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle, ...
springBoot传参解析
springBoot传参解析springBoot分为好几个环境,开发和测试,生产肯定不一样,一般来说都是通过命令行传参确定使用那个profile
先复制粘贴一下文档,看看springBoot传参的优先级吧
Default properties (specified by setting SpringApplication.setDefaultProperties).
@PropertySource annotations on your @Configuration classes. Please note that such property sources are not added to the Environment until the application context is being refreshed. This is too late to configure certain properties such as logging.* and spring.main.* which are read before refresh begins.
Config d ...
公司网络配置
公司网络的额外配置公司使用了安全管理,然后只能支持win和mac,那我想使用linux,就必须使用额外的方法
思路使用windows的共享网络,具体就是windows的虚拟机两块网卡,然后第一块网卡设置成网络可以共享,第二块网卡充当路由的角色,就可以实现网络共享
第一种实现原来的想法很简单,就是虚拟机两块桥接的网卡,然后第二块网卡自动时出137的网段,然后我的电脑配置成137的ip,就可以了
不过这样的配置,有个非常明显的缺点,那就是局域网有了dhcp的服务,所有的电脑设置成自动ip都可以默认上网,显然,这样做是不行的
升级后的实现不能用两块桥接的网卡,第二块网卡使用主机网络,同时不配置dhcp服务器
然后同一个网段的虚拟机就可以上网了,但是主机却无法上网,还需要每次开机额外的配置,不过我经常不关电脑,只是睡眠,所以说问题也不大
配置脚本123sudo ip link set vboxnet0 upsudo ip route add 192.168.137.1 dev vboxnet0sudo ip route add default via 192.168.137.1
NoSuchMethodError的bug修复
记一次NoSuchMethodErrorNoSuchMethodError的就有类找到了,但是方法没有,所以,思路主要有两个
找错了类,也就是有同名类,一般不会有同名类,出现同名类的场景比较少,这里列举一个.比如guava,和google-collections,两个jar,但是命名空间一样,里面有些类重复了,没错,google-collections废弃了,然后guava一直在维护,类加载顺序本身存在不确定性,所以guava用到了google-collections的类,这样就不行了,这种比较奇怪,定位也很麻烦.那个方法出错了,可以自己写一下,然后debug要进去的时候,ide就会提示你重复,才能定位
类没找错,但是版本不对,这种比较常见,就是多个lib协同的问题,比如hive用了新的guava,但是你是老版的guava,有这个类,但是没这个方法,所以需要妥善处理好类之间的协同关系,这里,springBoot就出现了dependencyManagement,来缓解这个情况
总结下来,就是类有,但是要么重名,要么版本不对,主要分这两个情况需要注意
flyway简介
简介本文基于springboot2集成使用
flyway是什么flyway是一款开源的资料库版本管理工具,它更倾向于规约优于配置的方式。flyway可以独立于应用实现管理并跟踪资料库变更,支援资料库版本自动升级,并且有一套预设的规约,不需要复杂的配置。Migrations可以写成SQL指令码,也可以写在Java程式码中,不仅支援Command Line和Java API,还支援Build构建工具和Spring Boot等。同时在分散式环境下能够安全可靠地升级资料库,同时也支援失败恢复等。
为什么要使用Flyway
自己写的SQL忘了在所有环境执行;
别人写的SQL我们不能确定是否都在所有环境执行过了;
有人修改了已经执行过的SQL,期望再次执行;
需要新增环境做数据迁移;
每次发版需要手动控制先发DB版本,再发布应用版本;
…
flyway工作原理一言以蔽之:flyway通过历史记录表(flyway_schema_history)来记录版本历史。每次随专案启动时将会自动扫描在resources/db/migration下的档案并查询flyway_schema_hi ...
jprofiler简述
背景基于jprofiler12.0.4
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益.Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注.可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络I/O、垃圾收集等.想要定位这些问题,一款优秀的性能诊断工具必不可少.本文将介绍 Java 性能诊断过程中的常用工具,并重点介绍其中的优秀代表 JProfiler 的基本原理和最佳实践
其它工具命令行工具JDK 内置了许多命令行工具,它们可用来获取目标 JVM 不同方面、不同层次的信息.
jinfo - 用于实时查看和调整目标 JVM 的各项参数.
jstack - 用于获取目标 Java 进程内的线程堆栈信息,可用来检测死锁、定位死循环等.
jmap - 用于获取目标 Java 进程的内存相关信息,包括 Java 堆各区域的使用情况、堆中对象的统计信息、类加载信息等.
jstat - 一款轻量级多功能监控工具,可用于获取目标 Java 进程的类加载、JIT ...
ansible简介
ansible简介
ansible,[ˈæn.sɪ.bəl]发音,Ansible 是一个开源的基于 OpenSSH 的自动化配置管理工具。可以用它来配置系统、部署软件和编排更高级的IT任务,比如持续部署或零停机更新。ansible的主要目标是简单和易用,并且它还高度关注安全性和可靠性。基于这样的目标,Ansible 适用于开发人员、系统管理员、发布工程师、IT 经理,以及介于两者之间的所有人。Ansible 适合管理几乎所有的环境,从拥有少数实例的小型环境到有数千个实例的企业环境。使用ansible无须在被管理的机器上安装代理,所以不存在如何升级远程守护进程的问题,也不存在由于卸载了守护进程而无法管理系统的问题。
ansible工作方式使用ansible无须在被管理的客户端电脑上安装代理之类的组件。它通过普通的 SSH 进行通信,以便从远程计算机检索信息、发出命令和复制文件。这是 Ansible 简化服务器管理的一种方式。任何公开 SSH 端口的服务器都可以通过 Ansible 进行配置和管理。
ansible采用模块化的设计,所以非常容易扩展到各种特定的使用场景。模块可以用任何语言编 ...
jdk源码阅读推荐
jdk源码阅读推荐java语言有两个规范,一个是java语言的规范,一个时jdk的规范,同时还有一大堆工具构成了我们使用的java.jdk的源码非常多,而且获取也是非常的方便,具体有那些源码值得阅读呢
java.lang常用的integer,string,System,Thread这些下面的都需要看一下
java.utilList,Array,Map,等一些其它常用的集合都需要看一下,同时java.util.concurrent这些和并发相关的也需要看一下,异步相关的也在这里面
java.nionio也是高并发的必选,所以也需要看一下
java.net网络相关的和nio也有关系,也需要看一下
detaease源码修改直接部署
dataease 部署dataease部署简介官方给的在线部署方式,看似非常简单,其实是写的bash脚本,通过安装
docker,docker-compose等一系列工具,执行脚本来操作的,屏蔽了很多细节,而且linux本身又分了很多发行版,所以,很容易有一些隐形的坑,而且在线安装非常耗时,所以,这里采用了直接下载源码,修改部分配置,改成使用可执行jar的方式启动,回归传统的方式,简单有效
本文档基于当时的最新版v1.2.2,不是该版本的时候,仅供参考
开始部署1. 下载源码
下载源码
checkout tag
12git clone git@github.com:dataease/dataease.gitgit checkout v1.2.2
2. 准备编译环境因为dataease使用的pentaho-kettle相关系列的jar,不在maven中央仓库,所以需要设置额外的profile,来下载相关的jar
123456789101112131415<profile> <id>omni</id> <repositories> ...