java
爱撸铁的程序猿
这个作者很懒,什么都没留下…
展开
-
Sharding-JDBC实现读写分离实战
场景:1.我本地有localhost:3306,localhost:7306两个mysql服务2.在两个服务中分别创建test数据库3.在两个数据库上创建相同的user表4.我们规定ds1为写库,ds2为读库一、创建一个springboot项目,结构如下二、pom.xml直接粘贴过去(了解一下jar包作用!)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/原创 2022-03-05 10:24:47 · 773 阅读 · 0 评论 -
Sharding-JDBC实现水平分库实战
场景:1.我本地有localhost:3306,localhost:7306两个mysql服务2.在端口3306中创建test数据库3.在端口7306中创建test2数据库4.在两个数据库上创建相同的表orders_1,orders_2一、创建一个springboot项目,结构如下二、pom.xml直接粘贴过去(了解一下jar包作用!)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.a原创 2022-03-05 10:01:53 · 912 阅读 · 0 评论 -
Sharding-JDBC实现公共表实战
场景:不同数据库存在相同的表,保持数据同步一、创建一个springboot项目,结构如下二、pom.xml直接粘贴过去(了解一下jar包作用!)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt原创 2022-03-05 09:09:53 · 559 阅读 · 0 评论 -
Sharding-JDBC实现垂直分库实战
场景:订单表和用户表存在不同数据库中一、创建一个springboot项目,结构如下二、pom.xml直接粘贴过去(了解一下jar包作用!)<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:/原创 2022-03-02 21:42:48 · 996 阅读 · 0 评论 -
Sharding-JDBC实现水平分表实战
Sharding-JDBC实现水平分表原创 2022-02-28 21:14:03 · 1010 阅读 · 1 评论 -
限流的目标和模式
什么是限流?我们简化一个电商项目,主要分以下4个服务,全部成功走完才算成功,该业务总超时时间是5秒,每个服务平均处理时间是0.5秒,我们通过集群的方式给每个服务部署5个节点 1.客户下单 2.进行扣款 3.物流发货 4.通知客户下单成功以下有几个问题(理想状态下)1.单个用户成功下单需要多长时间?答案:4 × 0.5 = 2 秒 4个服务都成功 乘以 每个服务0.5秒 这里就是我们常说的CPU处理时间2.集群中每个服务每秒最多处理多少个请求?答案:(1 ÷ 0.5)× 5 = 1原创 2022-01-29 10:20:20 · 870 阅读 · 1 评论 -
Linux学习笔记(Java开发使用)
日志查看:1.实时刷新日志tail -f xxx.log2.实时刷新日志的最后20行tail -20f xxx.log3.从日志中检索关键字(例如我们在代码中输出了【任务开始】四个字)tail -100f xxx.log grep [任务开始]文件查看编辑:1.安装nano插件 CentOS系统执行 yum -y install nano Debian/Ubuntu系统执行 apt-get install -y nano2.使用 nano+文件名 即可3.编辑完保存 ctrl原创 2022-01-13 16:52:48 · 646 阅读 · 0 评论 -
多个docker-compose.yml配置在同一网段
注意点:容器间调用通过container_name,因为每次容器重启IP会变1、创建网络docker network create -d bridge mynetwork2、创建一个mysql的yml文件version: "3"services: mysql: image: mysql:5.7 container_name: mysql networks: - default - mynetworknetworks: mynetwork:原创 2021-12-03 09:55:03 · 2881 阅读 · 0 评论 -
Springboot使用ThreadPoolTaskExecutor线程池,多线程调用实例
项目场景:15万条数据需要做逻辑处理,然后存入数据库硬件:windows 4核 i7 16G内存问题描述:响应太慢,服务容易出现卡死原因分析:原先是JPA保存,每次与数据库交互都会创建连接,执行完关闭连接,这样是很耗时的解决方案:1.修改存库方式,通过mybatis批量insert,一般每批3000条,语句过长会报错,并不是每批量越大越好,需要根据实际情况分析,笔者这边不做过多解释,有兴趣的可以看下相关知识2.通过多线程执行多线程配置新建一个class,把以下配置文件直接原封不动原创 2021-07-19 11:19:58 · 6303 阅读 · 18 评论 -
通过HSDB讨论Java虚拟机运行时对象存放位置
本地环境:Windows10 jdk1.8本文参考书本《深入礼节Java虚拟机》第四章1 这边直接把书中的代码拿过来了(请看下注释)// 注意这里的包名路径,后面会用到package vip.mate.module.accounting.controller;public class JHSDB_TestCase { static class Test{ static ObjectHolder staticObj = new ObjectHolder();原创 2021-07-08 16:17:24 · 564 阅读 · 8 评论 -
BigDecimal.setScale()方法总结
1. ROUND_UP代码如下(示例):BigDecimal bigDecimal = new BigDecimal("1.221").setScale(2, BigDecimal.ROUND_UP);System.out.println(bigDecimal); // 1.23 不管舍弃位是几 直接进一位2. ROUND_DOWN代码如下(示例):BigDecimal bigDecimal = new BigDecimal("1.2266").setScale(2, BigDecimal.原创 2021-06-10 17:12:37 · 2671 阅读 · 6 评论 -
EasyPOI导出数字格式(type=10)无效
问题:@Excel()中设置了参数type = 10,导出的Excel中还是文本格式代码如下:@Excel(name = "运费",type = 10,isImportField = "true_st")private BigDecimal freight;解决办法:1.新增以下类(原封不动copy到你们项目中,代码中的注释一定要看一下)代码如下:import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;impor原创 2021-05-25 16:54:07 · 4211 阅读 · 3 评论 -
Java统计List中每个元素出现的次数
Collections.frequency(list, key)import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add原创 2021-05-18 16:52:09 · 3564 阅读 · 1 评论 -
Java对象转Map,Map转对象
1 map 转 对象map中value的值类型 一定要和 对象中的属性一致public class Test { /** * @param map * @param bean 泛型类 * @param <T> * @return */ public static <T> T mapToBean(Map<String, Object> map, T bean) { BeanMap bean原创 2021-04-30 17:37:38 · 1878 阅读 · 2 评论 -
java8 LocalDate
获取年,月,日,周几 public static void main(String[] args) { // 获取当前时间 LocalDate localDateTime = LocalDate.now(); System.out.println("当前时间为:" + localDateTime); // 获取当前月份 System.out.println("当前月份为:" + localDateTi原创 2021-04-30 17:13:06 · 482 阅读 · 4 评论 -
Mysql批量插入数据
需求:向Mysql插入10000条数据环境:Mysql和Java代码都运行在我本地Windows电脑(i7处理器,4核心,16G运行内存,64位操作系统)1 单线程执行代码省略,大概需要39S左右2 多线程执行大概需要37S左右,并没有想象中的快很多原因: 多线程只是大大提高了程序处理数据的时间,并不会提高插入数据库的时间,相反在我这边JPA的框架下,多线程也就意味着多连接,反而更加消耗数据库性能package com.example.demo.controller;import c原创 2021-04-29 13:57:47 · 871 阅读 · 8 评论 -
Java字符串处理
1 字符串截取1.1substring(int beginIndex)提取从索引位置开始至结尾处的字符串部分1.2 substring(int beginIndex,int endIndex)截取的字符串中包括起始索引对应的字符;endIndex 表示结束索引,截取的字符串中不包括结束索引对应的字符 public static void main(String[] args) { // 下标从0开始 String str = "Java"; Syst原创 2021-04-28 13:53:45 · 841 阅读 · 9 评论 -
Spring Security OAuth2--密码模式 实战
1.OAuth2协议简介:OAuth是一种用来规范令牌(Token)发放的授权机制,目前最新版本为2.0,不兼容1.0,主要有四种授权模式:授权码模式、简化模式、密码模式和客户端模式。我这边的前端系统是通过用户名和密码来登录系统的,所以这里只介绍密码模式2.密码模式简介:在密码模式中,用户向客户端提供用户名和密码,客户端通过用户名和密码到认证服务器获取令牌。流程如下:如上图所示,密码模式包含了三个步骤:(A)用户访问客户端,提供URI连接包含用户名和密码信息给授权服务器(B)授权服务器对客户原创 2021-04-25 14:01:37 · 3363 阅读 · 19 评论 -
Mybatis Plus—代码生成器
需求:mybatis项目手动创建Controller,Service,ServiceImpl,Mapper,Mapper.xml太麻烦解决办法:借用MyBatis-Plus代码生成器注意点:代码中加注释的地方都需要改为你们自己的配置官网地址:Mybatis Plus—代码生成器1.导入依赖,两个jar包都需要 <dependency> <groupId>com.baomidou</groupId>原创 2021-04-13 11:03:29 · 595 阅读 · 3 评论 -
MultipartFile转File
需求:前台传入的文件类型是MultipartFile,后台要用到的是File类型解决办法:通过流转化代码如下:import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.we原创 2021-04-07 15:30:16 · 789 阅读 · 8 评论 -
SpringBoot使用RestTemplate调用第三方接口
系统对接主要就是根据别人提供的接口文档对接口每个系统都有自己的认证方式,如果每个人都能直接调用,服务器很容易就会瘫痪我这边有一个需求是:1.登录对方系统拿到jwtToken2.发送其他请求时,头部中必须携带jwtToken才能发送成功3.我们这边先用postman试一下(不传指定参数),请求成功返回未授权,说明人家系统可以调用并且认证也开启了这边是我代码调用成功的截图代码先引用pom.xml依赖 <dependency> <原创 2021-03-23 12:39:43 · 1012 阅读 · 8 评论 -
Array转List,List转Array
##:1、List转Arrayimport java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.原创 2021-03-18 18:06:43 · 541 阅读 · 2 评论 -
String与JSONObject ,JSONArray 之间的转化及遍历
第一种数据结构(JSONObject )String jsonStr = “{“lng”:120.413354,“lat”:31.298914}”import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;public class JSONDataProcessing { public static void main(String[] args) { String jsonStr =原创 2021-03-16 14:46:17 · 2434 阅读 · 19 评论 -
Map遍历
1、最常用的Map<String, Integer> map = new HashMap<String, Integer>();map.put("java", 100);map.put("c", 100);for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue();原创 2021-01-20 17:58:02 · 636 阅读 · 1 评论 -
Java日期工具类
1、当天开始时间 /** * 当天开始时间 * @param timestamp 传入 1609230917904 返回 1609171200000 * @return * calendar.getTime().getTime()就可以获取到当前时间戳 */public static Calendar getCalendarStartOfDay(long timestamp) { Calendar calendar = Calendar.getInstance(Tim原创 2020-12-29 16:42:39 · 516 阅读 · 0 评论 -
JMS(java消息服务) 与ActiveMQ(消息队列)实战
1、基础知识:1、JMS全称Java Message Service(java消息服务),其实就是两个java服务之间发消息2、本文只介绍p2p消息模型(Point-to-Point),百度借个模式图3、每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时4、每个消息只有一个消费者5、发送者和接收者之间没有依赖关系,无论接收者是什么状态,发送者都可以向队列发送消息(JMS的客户端之间可以通过JMS服务进行异步的消息传输)6、接收者成功接收后,会向队列报原创 2020-12-15 20:40:46 · 706 阅读 · 0 评论 -
Spring Data JPA 命名规则
表结构:import lombok.Data;@Datapublic class User { /** * 主键 */ @Id @GeneratedValue private Long id; /** * 姓 */ private String firstName; /** * 名 */ private String lastName; /** * 年龄 */原创 2020-12-07 20:51:51 · 856 阅读 · 0 评论 -
Java 关于锁的灵魂8问,彻底理解锁
1、直接看代码,线程A和线程B谁先执行?public class Lock { public static void main(String[] args) { Phone phone = new Phone(); new Thread(() -> { phone.message(); }, "线程A").start(); new Thread(() -> {原创 2020-12-02 20:49:43 · 471 阅读 · 2 评论 -
Java 入门理解一下栈
总结一下栈:1、 先进后出,后进先出(类似把东西放进一个木桶里,再从里面拿出来)2、栈内存主要负责程序的运行,生命周期和线程同步3、线程结束,栈内存也就释放,所以栈是不存在垃圾回收的问题的4、主要存放8大基本类型 + 对象引用 + 实例的方法我们经常会看到一个错误:StackOverflowError(栈溢出),递归就会产生这个错误,我们现在用代码演示一下...原创 2020-12-02 12:07:58 · 1139 阅读 · 21 评论 -
十分钟搞定SpringBoot集成Swagger
Swagger主要作用:接口可以实时更新给接口增加注解,让前端同事轻松看懂主要步骤1.新建一个SpringBoot Web项目,项目结构如下2.导入相关依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactI原创 2020-12-01 18:56:44 · 483 阅读 · 0 评论 -
快速搭建一个SpringBoot项目,自动生成相关代码并能实现基础增删改查,一个人撸完一个项目
大佬请直接把代码拿过去用,刚出来的小伙伴请看下面的详细步骤,源码地址也会放在下面package com.example.demo.until;import java.io.File;import java.io.FileWriter;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class CodeGenerator { public static fi原创 2020-11-27 15:37:19 · 1058 阅读 · 0 评论 -
Java 初识Lock锁和Synchronized
我们模拟一个卖票系统,演示并发1.三个线程同时卖票,我们可以看到控制台圈红的输出信息,剩余的票是杂乱无序的2.以前我们解决这个问题只需要加一个关键字 synchronized即可初识Lock锁,我们同样用代码演示,主要看圈红的步骤Lock锁和Synchronized区别1.Synchronized 是我们java中的关键字,Lock 是一个java类2.Synchronized 无法获取锁的状态,Lock 可以判断是否获取到锁3.Synchronized 可以自动释放锁,Lock 需原创 2020-11-25 10:41:21 · 1927 阅读 · 10 评论 -
Java8常用Lambda表达式
1、表结构package com.example.demo;import lombok.Data;import java.math.BigDecimal;@Datapublic class User { private Long id; private int age; private String name; private BigDecimal money; private String department; }2、方法Li原创 2020-11-24 15:22:04 · 6948 阅读 · 41 评论 -
Java 导出大数据量Excel 使用 POI 和 EasyExcel 实战
个人理解:1、03版写入快,但是有数量限制,最多65536条数据(1秒完成)2、07版写入慢,没有数量限制(65536条需要6秒)3、07升级版写入快,没有数量限制,会生成临时文件,需要代码删除(65536条1秒完成)4、03,07版本读Excel,只要注意cell的值类型即可,代码已贴在下面,每个项目都能复用5、EasyExcel,在尽可能节约内存的情况下支持读写百M的Excel,且只需要一行代码(数据量大的时候推荐使用)一:Excel大量数据写入(03,07版)1、导入依赖,03(xls)原创 2020-11-24 11:32:38 · 2899 阅读 · 0 评论 -
Spring Cloud Gateway 入门实战
本文主要通过代码对Cloud Gateway的熔断降级和限流进行演示1.熔断降级:我们在微服务系统中,所有请求先经网关,由网关再去找指定的服务,这个时候肯定是会出现服务异常和超时的情况,我们就针对这种情况进行熔断降级操作。2.限流:限制每秒的最大访问次数和允许在一秒钟内完成的最大请求数想完全把整个流程跑起来的小伙伴请看一下我上一篇文章https://blog.csdn.net/weixin_45452416/article/details/109679818,还要准备一个可用的redis环境下面直接原创 2020-11-14 19:10:48 · 883 阅读 · 0 评论 -
Nacos+SpringBoot 微服务入门
关于Nacos:nacos的安装和介绍自己通过官网查看,nacos是阿里推出的产品,文档也是中文的。地址:nacos官网Nacos使用:1.如果是安装在本地,启动成功后访问: localhost:8848/nacos即可进入nacos首页,默认只有一个public的命名空间2.新建一个命名空间,最好根据项目名来建,我这边就以自己的名字命名了3.保存过后回到菜单 “配置管理”-“配置列表”,这时候多了一个上面新加的命名空间4.切换到自己刚才新建的命名空间,点击右侧的 “+”,编写配置文件,保原创 2020-11-13 17:56:27 · 1964 阅读 · 0 评论 -
Spring Security + JWT 入门实战
Spring Security + JWT 入门实战##主要步骤搭建基础的springboot工程,导入相关依赖配置mysql,引用jpa开启JPA支持创建User实体,及controller,service,repository相关类创建Jwt工具类,用于管理token相关的操作创建JwtUser类,主要用于封装登录用户相关信息,例如用户名,密码,权限集合等,必须实现UserDetails 接口创建JwtUserService 必须实现UserDetailsService,重写loadU原创 2020-11-06 14:50:06 · 4793 阅读 · 8 评论