自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 收藏
  • 关注

原创 第二十三章 Git

此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。如你所见,我们创建了一个分支,在该分支上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切换回我们的主分支,删除的 test.txt 文件又回来了,且新增加的 runoob.php 不存在主分支中。- 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的 ID 被记录在暂存区的文件索引中。

2024-04-04 23:06:24 892

原创 第二十二章 Maven

在项目构建时,利用 Maven 的 "约定大于配置" 的思想,实现自动化的构建, 如果读者熟悉 Ant,可以清醒的感知 Maven 比 Ant 脚本构建项目省去不少配置文件的内容。快照依赖指的是那些还在开发中的内部依赖包。在 New Project 窗口,选择 Maven Archetyper,设置项目名称,选择项目地址,设置 JDK,选择 Maven 项目,设置 GorupId,选择 maven 项目,我们常用的就是普通项目(quickstart)和 web 项目(webapp),本次我们选择普通项目。

2024-04-04 15:24:29 1121

原创 第二十一章 RabbitMQ

春运抢票完全可以看作是一个大数据量、高并发请求的场景(全国几乎上千万、上亿的人都在抢),在某一时刻车票开抢之后,正常情况下将陆续会有用户抢到车票,但是距离车票付款成功是有一定的时间间隔的,在这段时间内,如果定时器频繁的从数据库中获取“未付款”状态的订单,其数据量之大将难以想象,而且如果大批量的用户在 30 分钟内迟迟不付款,那从数据库中获取的数据量将一直在增长,当达到一定程度时,将给数据库服务器和应用服务器带来巨大的压力,更有甚者将直接压垮服务器,导致抢票等业务全线崩溃,带来的直接后果将不堪设想!

2024-04-03 23:16:46 1143

原创 第二十章 红黑树

如果是添加根节点,则将节点设定为黑色。像这种上溢的情况,就需要从溢出的 B 树节点中选出一个节点进行向上合并,选择 B 树节点中中间的树去进行向上合并,这里中间的两个节点就是原父节点 17 和原祖父节点 25,选这两个哪一个向上合并都是对的,但是我们最好选择以后方便操作的,很显然,应该选择原祖父节点 25 来进行向上合并,因为向上合并就是和最上层的 38 和 55 来组合成新的 B 树节点,向上合并的节点肯定是一个子节点,需要与上层相连,而原祖父节点 25 本身就已经和上层连接了,相对更加方便后续的操作。

2024-04-03 14:09:56 720

原创 第十九章 UML

描述类的对象所有可能的状态,以及事件发生时状态的转移条件,可以捕获对象、子系统和系统的生命周期。区分 UML 模型和 UML 图是非常重要的,UML 图,包括用例图、协作图、活动图、序列图、部署图、构件图、类图、状态图,是模型中信息的图形表达方式,但是 UML 模型独立于 UML 图存在。类图概括起来主要由两部分组成 —— 类、类之间的关系, 其中对类的定义如上图所示, 主要由三部分组成, 它们是类名、 类的属性(成员变量)、 类的相关操作(函数方法), 分别对应图里的上中下三个分区内容。

2024-04-01 23:01:11 804

原创 第十八章 算法

一、介绍 1.1 什么是算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。1.2 什么是数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存

2024-04-01 22:21:34 990

原创 第十七章 Kafka

通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。log.dirs 分别设置为`kafka-logs1、kafka-logs2、kafka-logs3(先创建)PS:如果遇到 zk node exists 的问题,先把 brokers 节点删掉(临时解决方案)。高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。- 修改配置文件中的 broker.id 分别为 1、2、3。1. 进入 /usr/local/soft 目录;

2024-04-01 21:22:55 1307

原创 第十六章 Redies

Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。集合的成员是唯一的,但是评分可以是重复了。用户 ID 为查找的 key,存储的 value 用户对象包含姓名,年龄,生日等信息,如果用普通的 key/value 结构来存储。String 类型是二进制安全的。

2024-04-01 21:01:18 1077

原创 第十六章 Redies

内存存储,NoSQL。基于内存来存储数据。无需 IO,效率高。1. 基于磁盘存储,扩容困难。增加硬件、或者使用其他的技术(分库分表)。> Basically Available(基本可用)> 3. 表与表之间关联,Relationship。2. 数据结构固定(存储数据格式受限)。> 4. 支持海量数据存储,高效数据读写。3. 并发量大情况下读写压力大(IO)。> 2. 结构化,Schema。> 文档存储(MongoDB)> 5. 支持分布式分片存储。> KV 存储(Redis)哨兵模式,分布式数据存储。

2024-03-29 19:17:55 659

原创 第十五章 Nginx

location 不是严格匹配,而是一个“前缀匹配”过程,所以在上面那个案例中,两个 location 都能够匹配,但是普通匹配会遵循一个最长匹配规则,也就是上面的请求中,最终 uri 会匹配到长度最大 location。给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的 HTTP 头来判断,是否需要压缩。- ms(毫秒),s(秒),m(分钟),h(小时),d(天),w(周,包含 7 天),M(月,包含 30 天),y(年,包含 365 天)

2024-03-29 19:10:30 813

原创 第十四章 MySQL

存储引擎负责 MySQL 中数据的存储和提取。与其他应用程序相比,不同的应用程序对某些内存高速缓冲策略的响应更好,因此,尽管某些内存高速缓冲对所有存储引擎来说是共同的(如用于用户连接的高速缓冲,MySQL 的高速查询高速缓冲等),其他高速缓冲策略仅当使用特殊的存储引擎时才唯一定义。表空间是 innodb 存储引擎逻辑结构的最高层,所有的数据都存储在表空间中,默认 innodb 有一个共享表空间,所有的数据都存储在共享表空间中,可以通参数 innodb_per_table 设置每张表单独存放在一个表空间中。

2024-03-29 16:46:07 1004

原创 第十三章 Tomcat优化

实现类:实现 org.apache.catalina.Service 接口的类,默认值为org.apache.catalina.core.StandardService。- 实现类:实现 org.apache.catalina.Server 接口的类,默认值为org.apache.catalina.core.StandardServer。- 实现类 实现org.apache.catalina.Host接口的类,默认值为org.apache.catalina.core.StandardHost。

2024-03-29 16:07:53 570

原创 第十二章 微服务核心(二)

Eureka 采用了 CS 的设计架构,Eureka Sever 作为服务注册功能的服务器,它是服务注册中心。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务节点的信息,服务节点的信息可以在 Eureka Server 的管理界面中直观看到。:在传统的 RPC 远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2024-03-29 15:46:17 1106

原创 第十二章 微服务核心(一)

SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。是将@Import 注解中添加的 ImportSelector 的实现类中的 selectImports 这个方法返回的字符串数组加载到 IoC 容器中。”) //每个季度的第一个月的一号的 1:00:00 执行一次。”) //一月和六月的一号的 1:00:00 执行一次。Thymeleaf 的模板页面的后缀是`.html` 和我们讲的 html 页面的后缀是一样,但可以写标签。

2024-03-29 00:51:53 1111

原创 第十一章 Liunx

之前我们项目配置使用了 123456,这里我们为了方便可以继续沿用这一密码,但还是那句话,在实际生产环境中,强烈不建议使用如此简单的密码,而且 Web 应用尽量不要使用 root 连接数据库,不然一旦被攻击者利用,受害面积将大大增加。vim 是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。如图,有各种不同的版本,DVD 版内置了比较常用的功能,Everything 就是什么都有,Minimal 就是只有基础的功能,因为安装的时候会再次选择需要安装的组件,这里实际上是向下兼容。

2024-03-28 21:11:01 1256

原创 第十章 MyBatis

3. 设置【Group】、【Artifact】、【Java Version】和【Package】,然后点击【Next】;5. 设置好【Project name】和【Project location】,点击【Finish】;2. 点击[Spring Initializr],然后点击【Next】;1.6 新建【UserInfoServiceImpl】1.8 修改【UserInfoMapper.java】1.9 修改【UserInfoMapper.xml】4. 点击【Next】;

2024-03-28 19:30:45 418

原创 第九章 Spring5 高级应用及核心原理(四)

3. 右击【resources】-->【New】-->【XML Configuration File】-->【Spring Config】,【spring-mvc.xml】;2.【src/main】下新建【resources】目录,右击【resources】-->【Mark Directory as】-->【Resources Root】;4. 【view】-->【Tool Windows】-->【Maven】-->【Plugins】-->【tomcat7】 -->【run】测试运行;

2024-03-24 20:34:50 626

原创 第九章 Spring5 高级应用及核心原理(三)

【IUserService】新增 addUserInfo 和 transaction 接口;- 【UserServiceImpl】新增 addUserInfo 和 transaction;- 【UserDaoImpl】实现 addUserInfo 和 transaction 接口;- 在【UserServicImpl】的【transaction】方法上添加【@GpTx】注解。- 【IUserDao】新增 addUserInfo 和 transaction 接口;- 修改【UserServicImpl】

2024-03-24 19:43:42 316

原创 第九章 Spring5 高级应用及核心原理(二)

所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。目标对象没有实现任何的接口,只能使用 CGLIB 代理,CGLIB 的本质其实的代理类继承了目标对象,并重写相关方法。执行结果:fun1 之前没有输入 before ...... ,而 fun2 之前有 before ......。目标对象执行之后的操作......(演出完之后的安排)目标对象 before ... ...目标对象 before ... ...目标对象 after ... ...

2024-03-24 19:11:35 530

原创 第九章 Spring5 高级应用及核心原理(一)

控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,“不用你找,我来提供给你”,这就是控制反转的含义。Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson 的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架。

2024-03-24 17:00:45 695

原创 第八章 常用设计模式(下)

状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例如公文状态的转换、游戏中角色的升级等。

2024-03-23 15:59:53 1188

原创 第八章 常用设计模式(上)

里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。3. 工厂方法模式可以用在异构项目中,例如通过 WebService 与一个非 Java 的项目交互,虽然 WebService 号称是可以做到异构系统的同构化,但是在实际的开发中,还是会碰到很多问题,如类型问题、WSDL 文件的支持问题,等等,从 WSDL 中产生的对象都认为是一个产品,然后由一个具体的工厂类进行管理,减少与外围系统的耦合。

2024-03-22 01:22:59 2321

原创 第七章 七大软件设计原则

封装变化, 也就是受保护的变化(protected variations) , 找出预计有变化或不稳定的点, 我们为这些变化点创建稳定的接口, 准确地讲是封装可能发生的变化, 一旦预测到或“第六感”发觉有变化, 就可以进行封装。- 如果对每一个类型为 P 的对象 op1,都有类型为 S 的对象 os1,使得以 P 定义的所有程序 Px 在所有的对象 oP1 都代换成 os1 时,程序 Px 的行为没有发生变化,那么类型 S 是类型 T 的子类型。使程序的可移植性降低,也增强了对象间的耦合性。

2024-03-21 20:54:11 236

原创 第六章 Java 正则表达式

所以,在其他的语言中(如 Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \\ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \\d,而表示一个普通的反斜杠是 \\。在其他语言中,\\表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。

2024-03-21 20:39:15 1043

原创 第五章 JVM

6、为了验证自己的猜想,于是准备登录后台去测试下,结果在测试的过程中发现到处订单的按钮前端居然没有做点击后按钮置灰交互事件,结果按钮可以一直点,因为导出订单数据本来就非常慢,使用的人员可能发现点击后很久后页面都没反应,结果就一直点,结果就大量的请求进入到后台,堆内存产生了大量的订单对象和 EXCEL 对象,而且方法执行非常慢,导致这一段时间内这些对象都无法被回收,所以最终导致内存溢出。但是,进行标记之后,存活的对象会移动到堆的一端,然后直接清理存活对象以外的区域就可以了。

2024-03-21 20:12:02 878

原创 第四章 Java 网络编程

可以看到,鉴于电子商务等安全上的需求,HTTPS 对比 HTTP,在安全方面已经取得了极大的增强。总结来说,HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。A: 客户端发起 HTTPS 请求,服务端返回证书,客户端对证书进行验证,验证通过后本地生成用于改造对称加密算法的随机数,通过证书中的公钥对随机数进行加密传输到服务端,服务端接收后通过私钥解密得到随机数,之后的数据交互通过对称加密算法进行加解密。

2024-03-18 21:21:29 891

原创 第三章 网络 IO

所以注意通道本身不能传输数据,要想传输数据必须要有缓冲区,这个缓冲区你就可以完全把它理解为火车,比如说你现在想把程序中的数据写到文件中,那么你就可以把数据都写到缓冲区,然后缓冲区通过通道进行传输,最后再把数据从缓冲区拿出来写到文件中,你想把文件中的数据传数到程序中,也是一个道理,把数据写到缓冲区,缓冲区通过通道进行传输,到程序中把数据拿出来。有时候会有这样的问题,当数据不足以填充缓冲区,而又需要往客户端传数据,为了解决这个问题,就有了 flush 的概念,将缓冲区的数据强迫发送。是专门用于应用程序的。

2024-03-13 22:49:41 986

原创 第二章 并发编程

一、线程的基本知识1.1 线程的概念是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以有很多线程,每条线程并行执行不同的任务。 为什么会有线程?- 在多核CPU中,利用多线程可以实现真正意义上的并行执行。- 在一个应用进程中,会存在多个同时执行的任务,如果其中一个任务 被阻塞,将会引起不依赖该任务的任务也被阻塞。通过对不同任务创 建不同的线程去处理,可以提升程序处理的实时性。- 线程可以认为是轻量级的进程,所以线程的创建、销毁比进程更快。

2024-03-12 15:37:23 982

原创 第一章 Java核心内容

但在面试时,若出现对数组操作的题目,就决不允许使用 Arrays 类提供的方法,因为面试官考察的是我们对数组的操作能力,而不是对 Arrays 类的应用。Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。

2024-03-04 23:13:18 941

原创 开源应用容器引擎Docker

我们现在已经掌握了从docker hub上获取相关镜像,然后运行容器,并作出我们自己的处理,但有时候我们需要将我们自己的容器制作为对应的镜像,以便后面继续使用,这时我们就需要用到docker commit ...命令了,这节我们就通过案例来介绍下 docker commit ...命令的使用。前面我们介绍了镜像和容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题。

2024-01-08 10:14:04 1384

原创 版本控制神器之Git深入介绍

Svn集中式的版本控制工具,Svn中,必须要有中央仓库,所有的版本信息都保存在中央仓库中,代码的前进、回退、删除等等操作都需要在中央仓库中进行,用户本地保存的只是版本仓库的一个副本,Svn中的分支非常臃肿。我们在分支上的相关的操作其实的独立的,我们提交到分支对应的版本库中的情况下,其他分支中是查看不到了,包括主分支,如果我们想要在主分支中查看到对应的信息,我们就需要操作分支合并。git里边默认的版本好不容易记。版本库:存放已经提交的数据,push的时候,就是将这个区域中的数据push到远程仓库的。

2024-01-08 08:30:57 1220

原创 项目管理工具Maven

当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方。初学的时候对Maven的概念比较模糊,仅仅知道它可以管理我们的jar包和jar之间的依赖关系,但它的功能并不仅仅局限于此。有些第三方的jar包是不存在与Maven的中央仓库中的。

2024-01-07 22:49:36 1243

原创 Linux操作系统

是第一大编程语言和开发平台。操作系统,我们可以通过虚拟化的技术在当前电脑上通过虚拟化的工具比如VMWare。以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。发行版是一个稳定的,可预测的,可管理的和可复现的平台,源于。是免费的、开源的、可以重新分发的开源操作系统。有上百种不同的发行版,如基于社区开发的。仍是企业和开发人员的首选开发平台。一直是社区驱动的开源项目,旨在与。)规定释出的源码所编译而成。,是一种免费使用和自由传播的。日首次发布,它主要受到。思想的启发,是一个基于。来安装相关的虚拟机。

2024-01-05 23:59:35 2220

原创 Java经典框架之Dubbo

系统正常运行了一段时间后,虽然加的有缓存,使绝大多数的数据库操作可以不通过数据库就能完成,但是任然有一部分的操作(缓存访问不命中,缓存过期)和全部的写操作需要访问数据库,当用户达到一定规模后,数据库因为负载压力过大还是会成为系统的瓶颈,应用和数据分离后,不同特性的服务器承担着不同的服务角色,网站的并发处理能力和数据存储空间都得到了很大的改善,支持网站业务进一步发展,但是随着用户逐渐增多,数据库压力越来越大,访问延迟,进而影响整个网站的性能,此时需要进一步优化。Dubbo 框架,是基于容器运行的.。

2024-01-05 23:44:48 917 1

原创 Java经典框架之Zookeeper

ZXID,事务id,为节点的更新程度,ZXID越大,代表Server对Znode的操作越新。我们需要在Zookeeper的数据存储的目录中创建一个myid文件,文件中的内容只有一行信息,即表示我们集群几点的标识,范围是1-255,每个节点的myid的数字和我们在zoo.cfg中配置的server.数字是对应的。假设Server1的ZXID为145,Server3的为122,第一轮投票中,Server1和Server3都投自己,票分别为(1,145)、(3,122),将自己的票发送给集群中所有机器。

2024-01-05 10:11:54 1658 1

原创 Java经典框架之Redis

返回的接口是key和列表元素值。随着Redis写命令执行的越来越多,会有很多的写命令被记录到AOF文件中,AOF文件会越来越大,造成的后果就是还原操作的时间就会越来越长,为了解决这个问题可以向Redis发送 BGREWRITEAOF ,该命令会移除AOF中冗余的命令。Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。

2024-01-05 09:16:19 1643 1

原创 互联网分布式应用之RabbitMQ

如果忘记掉ACK,那么后果会比较严重,当Consumer退出时,Message会一直重复分发,然后RabbitMQ会占用越来越多的内存,由于RabbitMQ会长时间的运行,因此这个 内存泄漏 是致命的,我们可以通过设置重试次数来防止这个问题,在Consumer的application.properties中设置如下参数。如果相匹配,消息将会投递到该队列。交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的路由键匹配,那么消息就会被路由到该绑定的队列中。它是消息的容器,也是消息的终点。

2024-01-04 20:22:50 1091

原创 互联网分布式应用之SpringCloud

在微服务架构中,我们将一个项目拆分成很多个独立的模块,这些独立的模块通过远程调用来互相配合工作,但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,同时,线程池的资源也是有限的,高并发环境会导致有大量的线程处于等待状态,进而导致响应延迟,为了解决这些问题,我们需要来了解 Hystrix 的请求合并。当配置中心客户端重新启动的时候会显示的执行pull命令来拉取最新的配置信息, 这种方式是需要重启客户端服务的,显然不是太友好,这时我们可以通过Actuator来实现。让整个系统架构更加的合理科学。

2024-01-03 23:13:31 1455

原创 互联网分布式应用之SpringDataJPA

Repository 接口是 Spring Data JPA 中为我我们提供的所有接口中的顶层接口,而且是个标志接口,Repository 提供了两种查询方式的支持。JpaRepository接口是我们开发时使用最多接口,其特点是可以帮助我们将其他接口的方法的返回值做适配处理,可以使我们在开发的时候更方便的使用这些方法。通过上面的命令的方式使用的情况,如果查询条件比较复杂的情况下,那么方法的名称会很长,不是很方便而且容易出错,这时我们可以通过@Query注解来实现。定义持久层接口,定义要实现的相关的方法。

2024-01-03 08:34:22 921

原创 互联网分布式应用之SpringSecurity

前面介绍的注解的权限管理可以控制用户是否具有这个操作的权限,但是当用户具有了这个权限后进入到具体的操作页面,这时我们还有进行更细粒度的控制,这时注解的方式就不太适用了,这时我们可以通过标签来处里。它提供了完善的认证机制和方法级的授权功能。Spring的初始化操作和SpringSecurity有关系的操作是,会加载介绍SpringSecurity的配置文件,将相关的数据添加到Spring容器中。前面的案例我们的账号信息是直接写在配置文件中的,这显然是不太好的,我们来介绍小如何实现和数据库中的信息进行认证。

2024-01-02 21:58:05 1219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除