欢迎来到我的博客
欢迎你陌生人
KBdog的个人博客
Github
Bilibili
Twitter
阿里云服务器的配置以及spring boot项目的部署
前言从大二开始我就一直想着能做个自己的网站,今年年初搭建的这个博客只是静态的页面,不能和后端进行数据交互,所以还是不太满足。正巧最近阿里云对大学生的优惠活动云翼计划开始了,我直接上去免费领了台ECS服务器来搭建我的毕业设计后端。这篇博客就来讲解整个阿里云服务器配置的过程和后端spring boot项目的部署
准备工作
首先要有远程连接服务器的工具Xshell和远程文件传输工具Xftp,这两个在谷歌都有免费社区版下载
阿里云买一台服务器(或云翼计划直接免费领)
在云服务器管理控制台里找到自己刚刚购买的服务器实例,重置并设置密码
找到安全组的选项,点击配置规则,在入方向中手动添加规则来开放外部应用可访问的端口
填写规则时协议和类型默认自定义TCP,授权对象默认0.0.0.0/0,主要要填的是端口范围,填写规则为起始端口号/结束端口号,比如要开放MySQL默认的访问端口3306则直接填3306/3306。这只是开放端口的第一步,后面还要在服务器防火墙里开启端口访问
配置服务器通常我们购买服务器都会选择linux操作系统,因为相比于常用的Windows,其轻量简洁且内存占用小,权限明确,对于 ...
ElasticSearch入门
简介类比mysql等关系型数据库,elasticsearch这种nosql的搜索引擎效率更快,通常的案例有百度淘宝等即时搜索功能Relational DB -> Databases -> Tables -> Rows -> Columns关系型数据库 数据库 表 行 列Elasticsearch -> Indices -> Types -> Documents -> FieldsElasticsearch 索引 类型 文档 域(字段)
elasticsearch安装(windows)
上官网下载压缩包
解压缩
运行bin目录下的elasticsearch.bat批处理文件
cd到对应目录在dos命令行elasticsearch-service.bat install安装elasticsearch服务
访问localhost:9200(默认端口)
kibana可视化工具安装(w ...
SSM框架学习(七)Spring中的事务管理
前言之前我的项目中事务处理都是直接在对应事务方法上加@Transacational注解让spring容器帮我处理,但其具体有哪些细节并不是太了解。在浏览许多博客学习之后,我对spring的事务处理有了更清晰的认识。
什么是事务首先,事务是什么?简单理解事务就是一组操作。比如增删改查,对于数据库来说这些操作要么成功执行提交要么不执行回滚。事务最经典的例子就是转账:A要给B转账1000元,这个过程包含两个关键操作
将A的账户减少1000元
将B的账户增加1000元
如果在整个过程中出现异常比如网络问题,A的账户减少了1000元但是B的账户却没有增加金钱,这样整个事务必须回滚到执行前的状态。事务就是保证操作要么成功要么失败,这是事务的原子性。在业务中我们最常使用到事务的是数据库操作。
事务的特性
原子性(Atomicity): 一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。
一致性(Consisten ...
Java中线程的创建方式与线程池的使用
前言今天做了一家公司的笔试题,结果感觉不太好。题目大多数是基础题,很少涉及到框架相关的内容,果然对实习生来说还是基础知识重要点= =。最后两道是手写编程题,一道要求手写单例模式、另一道jvm内存回收。设计模式前几天刚复习过,最后写出来感觉还行,但第二道就难受了,jvm虚拟机部分几乎没怎么涉及过,就空了交卷。接下来要好好复习基础。回到正题,今天要说的是线程的创建方式和线程池的使用。
线程的三种创建方式
实现Runnable接口
实现Callable接口
继承Thread类
实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。
实现Runnable接口并实现run()方法public class RunnableImpl implements Runnable{ @Override public void run() { System.out.println("runnable:run&qu ...
Java常见容器的简介、排序与遍历
前言最近在看csnotes复习基础知识,正好写博客记录一下
概览容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。
Collection
Set
TreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。
HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的。
LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。
Queue
LinkedList:可以用它来实现双向队列。
PriorityQueue:基于堆结构实现,可以用它来实现优先队列。
List
ArrayList:基于动态数组实现,支持随机访问,线程不安全。数组默认大小为10,每次扩容使用grow()方法扩容一半,也 ...
SSM框架学习(六)spring mvc的简介、各种注解以及其使用方式
spring mvc的简介spring mvc一开始就集成于spring框架中,其功能十分强大,在web项目中主要的亮点有支持RESTful风格的请求、拦截器、异常处理、国际化、数据视图解析、跨域配置等。下面讲解spring mvc与spring搭配的web项目主要用法。
一个请求的执行过程在使用了spring mvc的项目里,所有请求都会被spring容器中的DispatcherServlet拦截处理,整体过程:
用户发送请求至前端控制器DispatcherServlet
DispatcherServlet收到请求调用HandlerMapping处理器映射器
处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
DispatcherServlet调用HandlerAdapter处理器适配器
HandlerAdapter经过适配调用具体的处理器(Controller)
Controller执行完成返回ModelAndView
HandlerAdapter将controller执行结 ...
SSM框架学习(五)spring的面向切面编程AOP
概括面向切面编程全称Aspect Oriented Programming,其可以通过切面插入一段代码,在切面执行之前或之后对其进行数据处理。AOP可以实现业务逻辑和关注点代码分离,比如每一次的业务处理之前都要进行日志的打印,要是在每个业务逻辑中都添加打印日志的内容,那代码就重复冗余且耦合度高,我们进行业务的编写最好就是明确各自的职责,各项业务分离开,实现解耦。通常aop适用于日志记录、权限控制、事务处理等方面。
AOP的五种增强方式
before advice。这种增强方式是在join point前被执行。
after return advice。这种情况是join point正常执行成功后再执行。
after throwing advice。这种情况是joint point执行过程中抛出异常的执行结果。
after advice。这种情况无论join point执行过程正不正常都会执行。
around advice。这种情况在join point前和join point后都会执行一遍。
AOP在spring项目中的实现
首先来看看没有使用aop时候进行日志打印的方式:
priva ...
在spring boot项目中进行全局异常处理
前言在项目中我们会经常碰到异常处理的问题,比如用户在发送请求到我们的后端时如果请求参数或路径出现错误,在没做异常处理的情况下服务端会直接把一大串错误信息返回给用户。这种情况并不少见,用户获得这些信息并没有什么用处,我们后端可以对所有这种异常进行统一的处理然后提取重点统一返回封装后的数据。Spring官方文档给我们提供一种解决方案,使用@ControllerAdvice和@ExceptionHandler注解可以将组件注册为全局异常处理类和方法。@ControllerAdvice实际上就是一个增强的@Controller,使用该controller可以实现三个方面的功能:全局异常处理、全局数据绑定、全局数据预处理。该博文将讲解其全局异常处理的使用方法。
异常处理类的注册与使用
首先要建一个处理类,使用@ControllerAdvice将其注入到IoC容器中成为全局异常处理类//全局异常处理@ControllerAdvicepublic class WebMvcExceptionHandler { }
使用@ExceptionHandler在方法上注明要进行捕捉的 ...
SSM框架学习(四)spring的核心-控制反转IoC
前言Spring是一款十分优秀的JAVAEE框架,其主要核心内容就是IoC(控制反转)和AOP(面向切面编程)。这一篇博文是我对IoC相关内容的理解。
IoC和DI简介
IoC英文全称叫Inversion of Control,是面向对象编程的一种设计方案,在Spring中的体现就是把各种bean交给Spring容器进行管理,极大降低了代码的耦合度。比如,之前要使用一个javabean对象,我们要通过new的方式给对象进行实例化,这是在代码里写死的,也是俗称的硬编码。这些一个个对象都在代码里写着,要对它们的依赖或属性进行修改需要改动代码,这就是高耦合的一种表现。而控制反转给我们提出一种方便的解决方案,把bean交给容器,需要修改其内容时只需在配置文件里对其操作,这就极大地降低了耦合度,方便代码的重用。
DI英文名全称Dependency Injection,即是依赖注入。其跟控制反转是从不同角度描述的同一个概念。对象与对象之间总是有依赖关系的,比如对象A属性中包含对象B,通常情况下需要在A的代码中显式地new一个B。而使用依赖注入技术时A只需要定义一个私有的B对象,其实例化过程是由容器 ...