SpringBoot-整合SpringDataJPA+MyBatisPlus多数据源配置
参考文献
Springboot整合mybatis实现多数据源所遇到的问题
springboot + mybatis-plus 分包实现多数据源配置
required a bean of type ‘org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder’ that could not be found
JPA之EntityManager踩坑及解决:更改PersistenceContext
背景
公司项目最初数据库访问层使用的是Spring Data JPA后期由于内部原因改换使用MyBatis Plus,由于业务需要对接第三方数据需要直接访问第三方的数据库,故而要配置MyBatis Plus多数据源.
环境以及项目技术栈
12SpringBoot 2.5.6MyBatis Plus 3.5.1
公共代码
Entity
123456789101112131415161718192021222324252627package com.holelin.mysql.entity;import lombok.Data;i ...
工具-Maven
参考文献
maven仓库repositories和mirrors的配置及区别详解
深入理解maven及应用(一):生命周期和插件
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
Maven应用实战
简介
Maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法.可以方便的编译代码、进行依赖管理、管理二进制库等等.
Maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性
利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等.
核心概念
POM
POM是指Project Object Model.pom是一个xml,在maven2里为pom.xml.是maven工作的基础,在执行task或者goal时,maven会去项目根目录下读取pom.xml获得需要的配置信息
pom文件中包含了项目的信息和maven build项目所需的配置信息,通常有项目信息(如版本、成员)、项目的依赖、插件和goal、build选项等等
pom是可以继承的,通常对于一个大型的项目或是多个mo ...
算法-前置知识
参考文献
算法第四版
算法分析中常见函数
描述
记号
定义
调和级数
HNH_{N}HN
1+1/2+1/3+1/4+...+1/N1+1/2+1/3+1/4+...+1/N1+1/2+1/3+1/4+...+1/N
阶乘
N!N!N!
1∗2∗3∗4∗...∗N1*2*3*4*...*N1∗2∗3∗4∗...∗N
算法分析中常用的近似函数
描述
近似函数
调和级数求和
HN=1+1/2+1/3+1/4+...+1/N∼lnNH_{N}=1+1/2+1/3+1/4+...+1/N \sim lnNHN=1+1/2+1/3+1/4+...+1/N∼lnN
等差数列求和
1+2+3+4+...+N∼N2/21+2+3+4+...+N \sim N^{2}/21+2+3+4+...+N∼N2/2
等比数列求和
1+2+4+8+...+N=2N−1∼2N1+2+4+8+...+N=2N-1 \sim 2N1+2+4+8+...+N=2N−1∼2N,其中N=2nN=2^{n}N=2n
斯特灵公式
lgN!=lg1+lg2+lg3+ ...
解决方案-文件上传
参考文献
大文件上传:秒传、断点续传、分片上传
前端控件
WebUploader
秒传
即通过计算文件的MD5,若文件MD5相同则不需要上传,从而实现"秒传"操作.
秒传核心逻辑
利用Redis的set方法存放文件上传状态,其中key为文件上传的md5,value为是否上传完成的标志位,
当标志位true为上传已经完成,此时如果有相同文件上传,则进入秒传逻辑.如果标志位为false,则说明还没上传完成,此时需要在调用set的方法,保存块号文件记录的路径,其中key为上传文件md5加一个固定前缀,value为块号文件记录路径
12345678910111213141516171819202122232425262728293031@Slf4j@RestController@RequestMapping("/upload")public class UploadController { private static final Map<String, String> CACHE = new HashMap< ...
JVM(六)-类加载
参考文献
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
JVM 基础 - Java 类加载机制
虚拟机类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制.
在Java语言中,类型的加载,连接和初始化过程都是在程序运行期间完成的.
类的生命周期
一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将经历**加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸载(Unloading)**七个阶段.
其中验证,准备,解析三个阶段被统称为连接(Linking).
其中前五个部分(加载,验证,这边,解析,初始化)统称为类加载.
类加载的过程
Loading 加载
加载阶段是整个类加载(Class Loading)过程的一个阶段,在加载阶段,Java虚拟机需要完成以下三件事情:
通过类的 ...
LeetCode-Array题目笔记
参考文献
1.Two Sum
12345678910111213141516171819202122// Input: nums = [2,7,11,15], target = 9// Output: [0,1]// Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].class Solution { public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; // 采用nums[j]=target-nums[i]来判断两数之和 HashMap<Integer, Integer> map = new HashMap<>(nums.length); for (int i = 0; i < nums.length; i++) { final int surplusNumber = target ...
JVM-类文件结构
参考文献
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
类文件结构
类型
名称
中文名称
数量
u4
magic
魔数
1
u2
minor_version
主版本号
1
u2
major_version
副版本号
1
u2
constant_pool_count
常量池计数器
1
cp_info
constant_pool
常量池
constant_pool_count-1
u2
access_flags
某个类或者接口的访问权限和属性
1
u2
this_class
类索引
1
u2
super_class
父类索引
1
u2
interfaces_count
接口计数器
1
u2
interfaces
接口表
interfaces_count
u2
fields_count
字段计数器
1
fields_info
fields
字段表
fields_count
u2
methods_count
方法计数器
1
method_info
methods
方法表
methods_count
u2
a ...
JVM(四)-虚拟机性能监控和故障处理工具
参考文献
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
JDK Tools and Utilities
How to Analyze Java Thread Dumps
基础故障处理工具
工具
简介
java
Java 应用的启动程序
javac
JDK 内置的编译工具
javap
反编译 class 文件的工具
javadoc
根据 Java 代码和标准注释,自动生成相关的 API 说明文档
javah
JNI 开发时,根据 Java 代码生成需要的 .h 文件.
extcheck
检查某个 jar 文件和运行时扩展 jar 有没有版本冲突,很少使用
jdb
Java Debugger 可以调试本地和远端程序,属于 JPDA 中的一个 Demo 实现,供其他调试器参考.开发时很少使用
jdeps
探测 class 或 jar 包需要的依赖
jar
打包工具,可以将文件和目录打包成为 .jar 文件;.jar 文件本质上就是 zip 文件,只是后缀不同.使用时按顺序对应好选项和参数即可.
keytool
安全证书和密钥 ...
JVM(三)-垃圾收集器日志分析
参考文献
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
JEP 158: Unified JVM Logging
Tools Reference
Java HotSpot VM Options
垃圾收集器日志
HotSpot 所有功能的日志都收归到了-Xlog参数
1Xlog[:[selector][:[output][:[decorators][:output-options
命令行中最关键的参数是选择器(Selector),它由标签(Tag)和日志级别 (Level)共同组成.标签可理解为虚拟机中某个功能模块的名字,它告诉日志框架用户希望得到虚拟机哪些功能的日志输出。垃圾收集器的标签名称为“gc”,由此可见,垃圾收集器日志只是 HotSpot 众多功能日志的其中一项,全部支持的功能模块标签名如下所示
12add,age,alloc,annotation,aot,arguments,attach,barrier,biasedlocking,blocks,bot,break point,bytecode
日志级别从低到高,共有Trace,Debug,War ...
JVM-垃圾回收
参考文献
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)
The JVM Write Barrier - Card Marking
Java(JVM) Memory Model - Memory Management in Java
GC Roots
Garbage Collection Roots
Understanding metaspace line in JVM heap printout
[讨论] [HotSpot VM] JVM调优的"标准参数"的各种陷阱
Java中9种常见的CMS GC问题分析与解决
JVM之三色标记算法
概念
内存泄漏: 该释放的没释放,该回收的没回收.
内存溢出: 内存不够用
垃圾回收
哪些内存需要回收?
JVM 的内存区域中,程序计数器、虚拟机栈和本地方法栈这 3 个区域是线程私有的,随着线程的创建而创建,销毁而销毁;栈中的栈帧随着方法的进入和退出进行入栈和出栈操作,每个栈帧中分配多少内存基本是在类结构确定下来的时候就已知的.
垃圾回收的重点就是关注堆和方法区中的内存了,堆中的回收主要是对象的回收,方法区的 ...