- 博客(44)
- 资源 (1)
- 收藏
- 关注
原创 一篇文章搞懂并上手异步方法注解@Async的正确使用
在Spring当中,被@Async注解标记的方法,称为异步方法,这些方法会在线程当中独立执行,开发人员无需等待它的完成,可以继续其他的业务操作;Spring容器在初始化Bean时,会先判断Bean中是否使用了@Async注解,创建切点,根据切点创建代理,在调用@Async注解标注的方法时,会调用代理,执行切点的Invoke方法,将方法的执行交给线程池进行异步执行。上面使用的异步方法,默认情况下,Spring使用SimpleAsyncTaskExecutor,不是真正的线程池。
2025-03-08 13:19:42
787
原创 Netty(一)
为什么没有abc呢?channel有点类似于stream,他就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,而之前的stream要么是输入,要么是输出,channel比stream更为底层。会发现最后一个数据还是65,并没有清零,但是注意看position的位置是在索引4,所以下一次往buffer里写数据之后就会继续写,就会把这个65给覆盖掉,所以不清零也没关系。主要就是重写的几个方法,一个是进入目录前,然后是文件,然后是退出目录后。
2025-01-04 09:06:24
776
原创 Java并发编程学习(四)
说白了,意思就是,一个线程t1调用lockInterruptibly()方法,就是尝试获得锁,获得的到,就正常执行,获取不到,就进入阻塞队列,只有等其他线程里,调用了t1的interrupt()方法,才会打断阻塞。也就是说,获得锁后的临界区,里面的方法再次调用了这把锁,那这个线程也是可以拿到这一把锁的。小细节,这个获取时间内,也是可以被打断的,打断之后也是一样,返回异常,执行catch逻辑。死锁情况如下:就是t1先获得a锁,t2先获得b锁,然后t1又需要b锁,t2又需要a锁,这样就出现了死锁。
2024-12-16 11:44:01
802
原创 Java并发编程学习(三)
obj.wait() 让进入 object 监视器(也就是Monitor,也就是拿到锁之后的执行区域)的线程到 waitSet 等待obj.wait(long timeout) 也就是有等待的时间,时间过了还没被notify,我也被唤醒继续向下执行obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。
2024-12-13 15:42:56
638
原创 Java并发编程学习(二)
说白了就是两个线程,一起去操作同一个对象里的成员变量,这不很明显,这个成员变量就相当于是共享变量了,一起对其进行读写操作,肯定会出现线程安全问题,这里是一个线程执行方法还没加完,另一个线程就来执行减的操作,就会出现IndexOutOfBoundsException,下标越界异常。如果在尝试加轻量级锁的过程中,CAS操作无法成功,这是一种情况就是有其他线程为此对象加上了轻量级锁(有竞争),这是需要进行锁膨胀,将轻量级锁变为重量级锁。也就是最简单意义上的锁。底层原理全是概念,好复杂,顶多用来应对面试,不想记。
2024-12-12 09:05:21
795
原创 Java并发编程学习(一)
park()是LockSupport,一个锁支持类里的方法,位于(import java.util.concurrent.locks.LockSupport;),这个方法顾名思义,就是停泊、停下来的意思,也有让当前线程停下来的作用。
2024-12-07 10:04:23
1036
原创 WebSocket
/监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。//判断当前浏览器是否支持WebSocket。//连接WebSocket节点。//连接发生错误的回调方法。//连接成功建立的回调方法。//接收到消息的回调方法。//连接关闭的回调方法。//将消息显示在网页上。
2024-12-06 08:44:16
1147
原创 Spring Task
cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
2024-12-05 16:05:03
307
原创 JAVA是世界上最好的语言------拒绝焦虑,赶紧背诵!
网制焦,实不严,普二本,一年经,在上海,开培训,开8家,7班满,说人数,高76,低49。说寒冬,年年有,培训班,月10w,现不训,没机会,趁红利,狠赚笔。参培训,余胜军,马士兵,面八家,十offer,20k,是外包,22k,有自研。年年寒,年年计,计算机,搞AI,互联网,快来学,没机会,趁红利,狠赚笔。网制焦,实不严,专毕业,零经验,面八家,十offer,32k,是外包,27k,有自研,明还有,面试多。说寒冬,年年有,计算机,月过万,现不学,没机会,趁红利,狠赚笔。别听网,人贩焦,技不够,是金子,都发光。
2024-10-28 17:11:29
373
原创 java给字符串去空格
在Java中,可以使用String类的trim()方法来去除字符串两端的空白字符。如果需要去除字符串中所有的空白字符(包括字符串内部的空格),可以使用正则表达式结合replaceAll方法。在这个例子中,\s+是一个正则表达式,匹配任何空白字符(包括空格、制表符、换页符等),+表示匹配一个或多个前面的表达式。// 输出: “Hello, World!// 输出: “Hello,World!java给字符串去空格。
2024-09-04 11:07:50
675
1
原创 前后端动态路由的实现
当用户登录后,从后端获取到的路由数据会被存储到状态管理库中,然后前端根据这些数据来动态生成和显示菜单栏。而是在用户登录后,从后端获取用户可访问的路由数据,然后根据这些数据动态生成路由。路由数据格式:后端生成的路由数据需要符合前端所需的格式。路由数据生成:后端在用户登录成功后,根据用户的角色或权限生成可访问的路由数据。这些数据通常包括路由的路径、名称、组件等。如果验证通过,则根据用户的角色或权限生成可访问的路由数据。路由数据返回:后端将生成的路由数据返回给前端。路由数据返回:后端将生成的路由数据返回给前端。
2024-05-20 12:59:33
305
原创 用两个注解实现json的接收与发送的格式修改
json反序列化失败,可能不是json配置的错误,而是你的类没有继承序列化接口。或者没有加序列化ID。
2023-12-21 15:35:05
136
原创 Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could
Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class
2023-06-09 11:51:18
841
原创 nodejs与npm版本对应关系以及使用nvm管理node版本以及降npm版本
可以根据自身情况自定义选择路径盘,路径不要出现空格或中文符号(路径最好是在路径盘的根目录下新建一个文件夹,如C盘、D盘下的根目录),我自己在D盘根目录下新建一个nodejs文件夹。选好后点击next(4) 最后一步,点击install即可安装完成。
2023-06-05 14:42:57
80724
3
原创 webpack的安装与使用(保姆级教程)
webpack的安装与使用保姆级教程目录下会生成一个package.json文件,里面包含一些项目的相关信息局部安装:(推荐)ps:查看版本号:假如没有出现版本号,而是出现了电脑配置信息的输入一下代码试试:问题可参考下面链接:webpack -v没有出现版本号,而是出现了电脑配置信息可以查看到版本号说明webpack已经按装好了,此时package.json文件也会出现一个依赖:(把安装想成maven引入依赖就很好理解了)全局安装:至此,webpack和webpack-cli安装完成。
2023-06-02 12:40:50
8802
原创 Log4j的使用(详细)
Log4j的使用(详细)其实也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。
2023-05-31 16:49:43
286
原创 SpringBoot设置日志输出级别及Logback日志工具输出到文件
2.在resource目录下创建logback-spring.xml文件。1.首先需要把你yaml文件里面关于日志的配置去掉,避免冲突报错。2.运行后指定路径就会生成.log文件。越高包含的就越多,输出的信息也就越多。
2023-05-31 16:39:46
8680
原创 苞米豆的mybatisplus下R<T>类
今天在编写同一返回格式自定义R类的时候,无意间发现了mp居然已经编写好了一个R类,而且点进去看了一下源码,相对还是挺符合我们的需求的,可以灵活的用一下,这样就不用自己再编写了,但是实际开发可能需要根据情况特殊而定,那就在说吧!
2023-05-31 02:12:06
426
原创 spring-boot项目中使用swagger自动生成Api文档 帮助接口测试(swagger-ui.html)
spring-boot项目中使用swagger自动生成Api文档 帮助接口测试(swagger-ui.html)
2023-05-30 23:58:34
391
原创 添加逻辑删除插件时Cannot resolve symbol ‘LogicSqlInjector‘,因为mp版本高了
添加逻辑删除插件时Cannot resolve symbol 'LogicSqlInjector',因为mp版本高了
2023-05-30 20:17:17
604
原创 mybatis-plus添加第三方p6spy的使用 执行 SQL 时打印分析
整合mybatis-plus时,需要加入执行的sql分析,发现mybatis-plus中的PerformanceInterceptor无效了,对应的依赖都找不到了,上网查了一下发现 3.2.0之后把这个功能给剔除了,以下整合第三方p6spy执行 SQL 时打印分析
2023-05-30 20:01:05
650
原创 mybatis-plus-generator代码生成器 CodeGenerator的使用
mybatis-plus-generator代码生成器 CodeGenerator的使用
2023-05-30 17:57:44
842
原创 mp报错‘AutoGenerator()‘ has private access in ‘com.baomidou.mybatisplus.generator.AutoGenerator‘
'AutoGenerator()' has private access in 'com.baomidou.mybatisplus.generator.AutoGenerator'包括其他的一些方法也报类似的错误'GlobalConfig()' has private access in 'com.baomidou.mybatisplus.generator.config.GlobalConfig'
2023-05-30 17:29:45
1128
2
原创 Eurekad的使用
这时你可以启动一下项目看有没有报错再继续往下写,否则一路写到底万一有错也很难改,其次,注意模块的启动顺序,*先启动服务中心server,再启动客户端client*,这里有个前后关系,先有了服务中心,你才能去注册嘛,否则会找不到地址而出问题。启动之后会访问localhost:7001你会发现下面已经显示有个服务注册在里面了,这样就表示成功了
2022-11-24 00:36:39
136
原创 Spring Cloud Consul中文文档(Consul和springCloud整合快速上手)
通过几个简单的注释,您可以快速启用和配置应用程序中的常见模式,并使用基于Consul的组件构建大型分布式系统。提供的模式包括服务发现,控制总线和配置。智能路由(Zuul)和客户端负载平衡(Ribbon),断路器(Hystrix)通过与Spring Cloud Netflix的集成提供。
2022-11-23 16:10:21
543
原创 RestTemplate介绍及使用(详)
做好了准备工作,先来看使用 RestTemplate 发送 GET 请求。在 RestTemplate 中,和 GET 请求相关的方法有如下几个:
2022-11-22 12:25:06
1043
原创 使用RestTemplate的微服务的简单入门项目
提取另外两个子模块的公共部分因为提供者模块和消费者模块的entities实体类部分都是一样的,为了提高复用我们将其entities提出来,单独建一个子module来存储管理这个entities,然后将这个module用maven打包成jar包,在其他子模块导入依赖引用,就可以实现复用了
2022-11-22 12:07:48
375
原创 Spring AOP(面向切面编程)及AspectJ框架实现AOP(注解)
Spring AOP(面向切面编程)及AspectJ框架实现AOP(注解)
2022-11-20 01:01:14
286
原创 Spring IOC(控制反转)与依赖注入(DI)
实际上,不一定要有private String name,没有这个属性依旧能完成属性的注入,前提是有public void setName(String name)方法,也就是说,在依赖属性注入里面,属性是指setter方法去掉set,然后开头变小写的那个名。优点:创建时必须要指定构造方法中的全部参数,bean才能被创建,保证了对象创建出来之后,成员变量一定都有值。上面两个看上去没有什么区别,但第一个实际上是通过构造器注入的,第二个是通过setter方法注入的。3.通过接口的方式实现(已经被废弃)
2022-11-19 15:42:40
152
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人