多线程事务回滚
场景项目需要 导入一批数据,对数据进行切割,用多线程跑。
问题点方法上增加@Transactional,对多线程无效,发生异常,子线程不会回滚,即使在子线程中增加@Transactional。原因:线程不归spring容器管理,也就不指望通知回滚了。
代码将大数据进行切割 // apache自带切割api, num是对应想要切几段ListUtils.partition(list, num);
使用异常标志、发令枪控制各线程回滚@Transactional(rollbackFor = Exception.class)public Result<String> dealData(int sheetMergeCount) { // todo 业务逻辑... // 切割数据 List<List<Integer>> list = splitList(sheetMergeCount, 10); // 异常标志,AtomicBoolean保证线程安全 AtomicBoolean isError = new A ...
OAuth 2.0 第三方登录
OAuth简介OAuth2.0介绍介绍OAuth协议:https://www.rfc-editor.org/rfc/rfc6749
OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他 们数据的所有内容。OAuth在全世界得到广泛应用,目前的版本是2.0版。
协议特点:
简单: 不管是OAuth服务提供者还是应用开发者,都很易于理解与使用;
安全: 没有涉及到用户密钥等信息,更安全更灵活;
开放: 任何服务提供商都可以实现OAuth,任何软件开发商都可以使用OAuth;
应用场景
原生app授权: app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、 请求后台数据
前后端分离单页面应用: 前后端分离框架,前端请求后台数据,需要进行oauth2安全认证
第三方应用授权登录: 比如QQ,微博,微信的授权登录
基本概念OAuth的作用就是让”客户端”安全可控地获取”用户”的授权,与”服务 ...
SpringBoot设置动态定时任务
SpringBoot项目中简单使用定时任务,要借助cron表达式且都提前定义好放在配置文件里,不能在项目运行中动态修改任务执行时间,实在不太灵活。
经过网上搜索学习后,特此记录如何在SpringBoot项目中实现动态定时任务。
因为只是一个demo,所以只引入了需要的依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> &l ...
category-line的两种数据类型所绘制图形不同的问题
第一种配置项:xAxis和series的data分开option = { xAxis: { type: 'category', data: ['a','a'] }, yAxis: { type: 'value' }, series: [ { data: [150,150], type: 'line' } ]};
渲染出来的结果:一条横线
第二种配置项:xAxis不设置data,series的data设置为二维数组option = { xAxis: { type: 'category' }, yAxis: { type: 'value' }, series: [ { data: [ ['a& ...
SpringBoot统一登录鉴权、异常处理、数据格式
本篇将要学习 Spring Boot 统一功能处理模块,这也是 AOP 的实战环节
用户登录权限的校验实现接口 HandlerInterceptor + WebMvcConfigurer
异常处理使用注解 @RestControllerAdvice + @ExceptionHandler
数据格式返回使用注解 @ControllerAdvice 并且实现接口 @ResponseBodyAdvice
统一用户登录权限效验用户登录权限的发展完善过程最初用户登录效验:在每个方法中获取 Session 和 Session 中的用户信息,如果存在用户,那么就认为登录成功了,否则就登录失败了第二版用户登录效验:提供统一的方法,在每个需要验证的方法中调用统一的用户登录身份效验方法来判断第三版用户登录效验:使用 Spring AOP 来统一进行用户登录效验第四版用户登录效验:使用 Spring 拦截器来实现用户的统一登录验证
最初用户登录权限效验@RestController@RequestMapping("/user")public class UserController ...
RabbitMq博客整理
SpringBoot 整合 RabbitMQ(注解监听,临时队列)RabbitMQ 可靠性、重复消费、顺序性、消息积压解决方案RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得
RabbitMq和SpringBoot的整合
介绍该篇文章内容较多,包括有 rabbitMq 相关的一些简单理论介绍,provider 消息推送实例,consumer 消息消费实例,Direct、Topic、Fanout 的使用,消息回调、手动确认等。 (但是关于 rabbitMq 的安装,就不介绍了)
在安装完 rabbitMq 后,输入 http://ip:15672/ ,是可以看到一个简单后台管理界面的。
在这个界面里面我们可以做些什么?可以手动创建虚拟 host,创建用户,分配权限,创建交换机,创建队列等等,还有查看队列消息,消费效率,推送效率等等。
以上这些管理界面的操作在这篇暂时不做扩展描述,我想着重介绍后面实例里会使用到的。
首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图:
黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq 的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。
常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式 ...
利用jar命令修改jar包中文件的内容
查找需要修改jar包中的application.yml文件路径[root@test ~]# jar tf test.jar | grep application.ymlBOOT-INF/classes/application.yml
导出jar包中的application.yml文件[root@test ~]# jar xf test.jar BOOT-INF/classes/application.yml[root@test ~]# lldrwxr-xr-x 3 root root 21 6月 28 14:54 BOOT-INF[root@test ~]# tree BOOT-INFBOOT-INF└── classes └── application.yml1 directory, 1 file
修改编辑导出的配置文件[root@test ~]# vim BOOT-INF/classes/application.yml
将修改后的文件重新打入jar包[root@test ~]# jar uf test.jar BOOT-INF/classes/applic ...
8种从spring容器里获取bean的方式
在初始化时保存ApplicationContext对象适用于Spring框架的独立应用程序,须要程序通过配置文件初始化Spring。applicationContext.xml配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd&q ...
快速搭建v2ray
0783c7a821e71906579a5c8fae0b5765f7d19a65d5d7adf1d9fc89456874fb3455c40e47f61bd48d511d56671fc1da43a8ba6f78a37f172ff0fbf689e775e003301fccd8ddbafdf8af7a71f509e13925429030910bd305a2580c64a122d97e636f145bfee4e731f923409fcee2baadd7d61aebace455ba05a26a4b7092d7fd7bbd8b4f63c008d3ab7cf3ee8f5c9248aeda77314997c4f1e54bdb7bacf5bb06276fe85ff46e22508b04a7ccb79c4e1c311558d0df848e74014e8c4a35afe9539cadba0ac6b17e4223266981aec29c37b8d0314bfc9590b658065b2bdfd4be300597255ff73e773f012fd77d959be43fc1d280c2edc8e6e1a49 ...
学习路线
jlpt n5->n4->n3->n2
java:stream,lambda,IO 流,注解,反射,枚举,网络编程,websocket,nio
mysql,redis
jvm(初级),jvm(中级和高级),juc
spring->springmvc->springboot->springcloud
zookeeper,nginx,linux
kafka,rabbitmq
elasticsearch,minio
maven,docker,k8s
设计模式,计算机网络,数据结构与算法,计算机组成原理,操作系统,编译原理
项目:谷粒学院,谷粒商城,尚融宝
grid 布局
shiro,zookeeper,kafka计算机网络,操作系统,计算机组成原理maven,dockerjvm,juc,设计模式算法,刷题,面经
toDo
0783c7a821e71906579a5c8fae0b5765f7d19a65d5d7adf1d9fc89456874fb345fd45bf6a59111d263a347903155debee7cf4fc37800f9d5814590dea63ef1bb41e2b6a18a5bab40295246dd893a49fad09f72ba83632a8a1bfd512dfa78fa84c8c9813e2006ea100c4895893d762f78100f35dbc90a40eae3d9a708c39d682e9b95cde37cef7fad0df21c46f0205d4fe550bd8f64ff35d4190ed200052fb825df5897f41b858b222c05814e03fcc0aff1148a7e34c407342108f3d4b4f4081a7fdeb1ff1d848b52158c1db1ba305c42d4dcff7b63636e83fb300cbb9390245b45ea6aacaf02dc5e55a9db196c9f0410022dfbc4a461aa1e8 ...
远程请求http的三种方式
1.ajax 远程调用,远程服务器必须开放跨域访问权限
2.form 表单远程调用,不受跨域限制,缺点是需要组装表单
3.java 代码远程调用(常用的有 java.net.HttpURLConnection,springboot 的 restTemplate)
toSee
0783c7a821e71906579a5c8fae0b5765f7d19a65d5d7adf1d9fc89456874fb34f858a876b23a627e2727fe73d1bef0a9153a8fe8f680893be708c51b4e5c3cda6ad26904979e981dcd28750d599ea9765d2ef7ea6874f633d8d6d070435ad3abc7c93ad533f91f32ddd0908fe9f9e86e17400988b1a37f1eedf4d1f76e52b433f5e6ca2d48608c8446546ff4c7d19ef45cb419326e3cfb1a60f14825f2da50c557cc4e832097a2a96097223e78a6932011c025c7dd410571c90415ae15d199fd4a1dba44a75d9891f515852263b18e0a531131f5563b6716e394d6d7b84c471d70388a822b85a1e689e0405d57a5456ba8d56cfac28968e6b ...
将普通项目托付给maven管理
如需将一个 java 项目托付给 maven 管理。在项目的根目录下,建个 pom.xml 把以下内容复制进去。同时右键把该项目标记为 maven 项目(不同的 idea 版本该操作的名称可能不一样)
<?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://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--组id--> <g ...
待学习
计算机网络:ipv6 部分
echarts 网课:前边布局,后面地图
ztree 的使用
jstree 的 demo
java 底层:2 进制,10 进制,移位,源码,补码,反码
前端关于滚动条的各个属性:clientHeight offsetHeight scrollHeight offsetTop scrollTop
redis 实战
js 高级
mysql 游标的使用
idea 工具的系统使用
mybatis中$和#的使用场景
group by 字段 ,order by 字段,表名,字段名,如果是动态的用$
limit 用#
其他的用#
在maven库上添加手动添加第三方jar包
进入到放这个 jar 包的文件夹,运行 cmd
然后根据下面的例子手动自己可以尝试着添加
mvn install:install-file -Dfile=aspose-words-16.4.0-jdk16.jar -DgroupId=com.aspose.word -DartifactId=aspose.words -Dversion=16.4.0-jdk16 -Dpackaging=jar -DgeneratePom=true
<dependency> <groupId>com.aspose.word</groupId> <artifactId>aspose.words</artifactId> <version>16.4.0-jdk16</version></dependency>
项目打成jar包时,将项目下的文件,以及所有的依赖打成一个jar包
例子:在做一个单机的用 maven 管理的 swing 项目时,引入了 poi,但是打成的 jar 包里没有 poi 的依赖,导致用 exe4j 转换出的 exe 程序报错(Caused by: java.lang.NoClassDefFoundError)
这种错误就是没有将依赖打包进去导致的,所以最好打包成单个 jar 包。
解决办法:在 maven 里加入以下插件
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration></plugin>
在项目的根目录下执行(在执行以下任意操作前别忘了 clean。清除以前的 target 文件夹)mvn assembly:as ...
传入集合循环查询并用union组合
实例:接口
/** * selectOverrunData:查询一个单次计划某个行别某个速度级下各个超限类型的占比 * * @param testTaskId 测试任务id * @param xb 行别 * @param speedLevel 速度级 * @param type 超限还是大值 * @param labelList 通道名称集合 * @return * @author Zhangyuhan * @date 2021/7/8 15:03 */ List<Map<String, Object>> selectStatisticalInformation(@Param("testTaskId") String testTaskId, @Param("xb") String xb, ...