- 博客(24)
- 收藏
- 关注
原创 springboot配置多数据源 实现自动切换
在application.properties文件中配置多个数据源的连接信息,例如:这里以properties配置文件为例,yaml配置文件同理配置即可二、创建多个数据源配置类为数据源创建一个配置类,分别配置数据源的连接信息和相关的Bean。例如:注意:该配置类必须在启动类同级目录下,或同级子目录下,否则项目启动时,无法将bean添加到Spring容器中!四、创建一个数据源切换类,用于在运行时动态切换数据源五、创建数据源切换切面使用AOP切面,在每个需要切换数据源的方法上进行切面处理Dat
2024-05-17 17:00:40 615
原创 多种实现异步编程的方法
2️⃣ Future件彼此孤立:有时某一个耗时很长的异步任务执行结束之后,你想利用它返回的结果再做进一步的运算,该运算也会是一个异步任务,两者之间的关系需要程序开发人员手动进行绑定赋予,Future并不能将其形成一个任务流(pipeline),每一个Future都是彼此之间都是孤立的,所以才有了后面的CompletableFuture,CompletableFuture就可以将多个Future串联起来形成任务流。我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果。
2024-04-13 16:47:51 994
原创 使用map优化双层for循环
比如我们现在拿到两个list 数据 ,一个是 User List 集合;另一个是 UserMemo List集合;@Data代码 UserMemo.java :@Datai <= 50000;i--) {我们需要遍历 User List ,然后根据 userId 从 UserMemo List 里面取出 对应这个userId 的 content 值,做数据处理。
2024-03-20 13:38:19 551
原创 使用ThreadPoolExecutor手动创建线程池+线程池工具类+使用线程池
1.之前简单的说过使用ThreadPoolExecutor创建线程池是优于使用Executors创建线程池ThreadPoolExecutor手动创建线程池优于Executors类2.下面内容中会涉及到线程池的拒绝策略,这里可以阅读其他作者的文章,链接拒绝策略。
2024-03-18 16:48:16 815
原创 使用Spring事件机制,合理的进行业务解耦
事件发布流程中,有三个核心概念,他们之间的关系如下图:事件源(ApplicationEvent):这个就是你要发布的事件对象。事件发布器(ApplicationEventPublisher):这是事件的发布工具。事件监听器(ApplicationListener):这个相当于是事件的消费者。
2024-03-13 15:21:56 470 1
原创 LomBok中的常用注解 提升开发效率
官方文档:https://projectlombok.org/features/一、val 和 var使用var或val,Lombok会从局部变量的初始化表达式推断出具体类型,var和val的差别在于,val修饰的局部变量没有被标记为final二、@NonNull在方法上使用@NonNull注解可以做非空判断,如果传入空值的话会直接抛出NullPointerException。三、@Cleanup当我们在Java中使用资源时,不可避免地需要在使用后关闭资源。使用@Cleanup注解可以自动关闭
2024-03-08 14:02:33 1142 1
原创 使用策略模式、Map+函数式接口完美替代if else
策略模式通过接口、实现类、逻辑分派来完成,把 if语句块的逻辑抽出来写成一个类,更好维护。Map+函数式接口通过Map.get(key)来代替 if-else的业务分派,能够避免策略模式带来的类增多、难以俯视整个业务逻辑的问题。
2024-02-04 11:17:37 1236 1
原创 Java中常见的锁的使用
为对于Java中的锁而言,一把锁也可能占有多种标准,符合多种分类,比如ReentrantLock既可以是悲观锁,也可以是可重入锁。使用ReentrantLock来创建公平锁或非公平锁的差别只是在于ReentrantLock的入参是true,还是false。ReentrantReadWriteLock类中有两把锁,ReadLock代表共享锁,WriteLock表示独享锁。在 Java中,”无锁/偏向锁/轻量级锁/重量级锁“ 这些状态通常是用来描述synchronized关键字锁的状态。
2024-01-17 09:16:26 1279
原创 @Transactional事务失效的10个场景
1、同一个类中,方法内部调用事务失效2、事务方法被final、static修饰3、当前类没有被Spring管理4、非public修饰的方法(存在版本差异)5、事务多线程调用6、数据库本身不支持事务7、异常被方法内部try catch捕获,没有重新抛出8、嵌套事务回滚多了9、rollbackFor属性设置错误10、设置不支持事务的传播机制。
2024-01-16 08:44:24 1868 1
原创 使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch
添加依赖修改yml配置文件一、实体类二、继承ElasticsearchRepository类【自定义方法命名约定】:代码如下(示例):2.实现方法3.接口测试总结如果注入失败ElasticsearchRepository:
2024-01-11 16:58:54 3733 1
原创 四种防止SQL注入的解决方案
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。这个id从请求参数中获取,若参数被拼接为:此时,数据库的数据都会被清空掉,后果非常严重PreparedStatement防止SQL注入mybatis中#{}防止SQL注入对请求参数的敏感词汇进行过滤。
2024-01-11 08:48:39 7315
原创 Java 开发常用的 Linux 命令
2.打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)20.强制关闭进程名包含xxx的所有进程。13.nslookup,查看域名路由表。9.日志输出的字节数,可以用作性能测试。12.tee, 重定向的同时输出到屏幕。11.查看进程所有打开最大fd数。3.查看磁盘, 文件目录基本信息。16.查看进程内加载的环境变量。17.查看进程树找到服务器进程。6.变更文件所属用户, 用户组。1.查看什么进程使用了该端口。2.dmesg,查看系统日志。3.sar,查看网络吞吐状态。10.查看, 去除特殊字符。
2024-01-10 11:26:55 1187
原创 SpringBoot实现异步调用的三种实现方式
1.基于注解的方式优点:-简单易用,只需要在方法上添加@Async注解即可。-依赖Spring框架,集成度高,可以与其他Spring组件无缝协作。缺点:方法必须是public,否则异步执行无效。-不能直接获取异步执行结果,需要使用Future或CompletableFuture等类型。2.实现AsyncConfigurer接口的方式优点:-更加灵活,可以配置线程池等异步执行的相关参数。
2024-01-09 08:47:03 1604
原创 如何解决Maven依赖冲突?
知道了有哪些依赖导致冲突,那么在pom.xml中,我们就可以使用标签来排除不需要的依赖。依赖冲突不仅仅可能出现在项目的库依赖中,还可能出现在插件依赖中。注意:解决依赖冲突可能会引入运行时错误,因此在修改依赖后务必进行全面的测试。在极端情况下,可以通过中的和同时使用,来强制Maven使用特定版本的依赖。在多模块项目中,你可以在父POM中使用来统一管理所有子模块的依赖版本。还可以使用Maven的properties元素来更简单地管理依赖版本。子模块只需要声明需要用到的依赖,不需要指定版本。
2024-01-09 08:30:06 557
原创 数据库优化方案及需要注意的细节
数据库性能优化主要包含有以下几个方面,数据库服务端(包括数据库选择,内存设置,缓冲池调整,并发连接数等等), 连接网络,数据库客户端(数据库表的设计,SQL语句优化,索引优化,),等。作为开发人员,我们直接使用到比较多的地方就是数据库客户端的的优化项面试的时候总有人会问数据库优化,有没有想过为什么面试官会这么注重数据库,我为大家总结了几点原因。1.性能需求:随着数据量的增长和应用程序的复杂度增加,数据库的性能可能会成为瓶颈。优化数据库可以提高查询速度、数据插入和更新的效率,从而提升整个应用程序的性能。
2024-01-08 08:32:53 1238
原创 三种简单高效的遍历删除ArrayList中元素的方法,避免错误使用forEach遍历删除元素
根据以上可以分析出,当我们试图在遍历一个集合的同时修改它时,就会遇到ConcurrentModificationException。这是因为ArrayList的迭代器设计为快速失败(fail-fast),即在检测到。实际运行时,它会抛出ConcurrentModificationException异常。这种方法可以保证在删除元素的同时不会破坏迭代器的状态。错误的使用forEach遍历删除元素。其中 i.next() 方法代码如下。
2024-01-05 15:27:16 1816 2
原创 ThreadPoolExecutor手动创建线程池优于Executors类
阿里巴巴Java开发手册》阿里作为国内Java使用最多的大厂,他出版了一部《阿里巴巴Java开发手册》,不知道大家看过没,没有看过的话,建议大家看看。对于我们编程养成良好的习惯还是很有帮助的,最近我在看到并发这一规约的时候,他们就明确了一点:线程池不允许使用 Executors来创建。在多线程编程中,线程池是一种重要的资源管理工具,用于提高程序效率和降低资源消耗。Java通过java.util.concurrent包提供了丰富的线程池管理工具,其中Executors类是创建线程池的常用工具。
2024-01-03 08:55:27 922 1
原创 使用控制器增强 统一异常处理替代 try catch
在实际开发工作中,我们期望的两种情况是,一种是当正常操作时按接口要求返回数据,而另一种则是当非正常流程时要获取异常信息进行记录并提示给用户然而业务代码不显式地对异常进行捕获、处理,但是异常肯定还是要处理的否则系统会出现很多BUG,下面讲介绍如何通过SpringMVC提供的控制器增强类统一由一个类去完成异常的捕获,从而更优雅的去掉try {…} catch {…} finally {…} 代码块,增加代码可读性提示:以下是本篇文章正文内容,下面案例可供参考继承实现自己的自定义异常/*** 统一异常处理。
2023-12-29 16:14:49 376 1
原创 Session 和 Token
在构建用户身份管理系统时,选择会话(Session)还是令牌(Token)是一个关键决策,取决于系统的需求和特定的使用场景。本文将深入探讨何时适合使用会话,何时适合使用令牌,以帮助开发人员在实际应用中做出明智的选择提示:以下是本篇文章正文内容,下面案例可供参考众所周知,HTTP协议它是无状态的协议,浏览器多次请求服务器,服务器它无法感知是不是同一用户的请求,于是就有了Session机制。Session机制是一种在Web开发中用于跟踪用户状态的机制。
2023-12-27 09:09:37 1237 1
转载 springboot集成Kafka详细入门 基本概念及消费优先级处理
SpringBoot集成kafka全面实战我们知道,kafka中每个topic被划分为多个分区,那么生产者将消息发送到topic时,具体追加到哪个分区呢?这就是所谓的分区策略,Kafka 为我们提供了默认的分区策略,同时它也支持自定义分区策略。其路由机制为:①若发送消息时指定了分区(即自定义分区策略),则直接将消息append到指定分区;
2023-12-26 15:12:36 455 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人