自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring Security——自定义security配置

Spring Security 应用级别的安全主要包含两个主要部分,即登录认证(Authentication)和访问授权(Authorization)。文章记录一下登录认证的实现方式自定义security配置是要继承 WebSecurityConfigurerAdapter 的配置类,重写自己的Security 配置。*@EnableWebSecurity 启动security配置。...

2019-12-27 14:33:51 623 1

原创 SpringBoot切换不同环境的配置方式

SpringBoot中通过Profile属性配置实现对不同环境提供不同配置功能的支持。可以通过激活、指定参数等方式快速的切换环境1.分多个配置文件不同环境的配置文件使用application-{profile}.yml的格式例如:配置文件分为主配置文件application.yml 和 测试环境application-dev.yml ,生产环境application-prod.yml ...

2019-12-27 09:46:36 1213

原创 基于Redis过期事件实现——订单超时取消

订单超时取消的实现,首先想到的是定时任务,但是这种实现方式在订单量较大的情况下是有问题的,而且时间也会有误差,最大时间差就是定时任务的执行间隔时间。使用redis的过期监听事件可以比较好的解决这个问题。实现的方式是订单创建后向redus中存一记录,一般就以订单号为key。设置过期时间(订单超时时间),一旦时间超时会触发监听事件,这时候就可以通过key判断这个订单是否支付,未支付时取消订单。...

2019-12-26 16:46:22 6671 5

原创 spring security——JWT验证集成

目录使用JWT实现登录功能定义JWT验证Token的Filter实现在登录后代替session校验JWT与Security集成配置JWT的验证特点就是可以代替session实现在用户登录后请求的验证使用JWT实现登录功能大概的流程是通过输入的userName查询DB中的密码,然后用passwordEncoder做密码校验,然后可以做一些授权的操作。最后要生成JWT的t...

2019-12-25 18:58:43 650

原创 Spring Security——passwordEncoder加密

PasswordEncoder 接口是用来加密的,这个接口提供了俩个方法:String encode(CharSequence var1); 加密方法,返回加密后的密码。boolean matches(CharSequence var1, String var2); 密码验证,返回密码是否一致。第一个参数是明文密码,第二个参数是加密后的密码(数据库取)PasswordEnc...

2019-12-22 21:55:31 4701

原创 Hibernate——一对多关联映射(CRUD)

目录实体类增加关联对象下面是映射文件:save相关操作正常的保存操作:级联保存:外键维护:查询操作:delete相关操作:删除one的一方(customer):删除many的一方:级联删除(通常是删除one连带many):两张表,用户和订单,记录一下一对多和多对一关联映射的实现。实体类增加关联对象客户实体类中除了客户自己的属性外,还要加一个...

2019-12-18 22:21:51 265

原创 抽取BaseDao和BaseService

目录抽取BaseDao定义BaseDao接口定义BaseDaoImpl类业务Dao基于BaseDao的的实现方式抽取BaseService定义BaseService接口定义抽象的BaseServiceImpl类业务service基于BaseService的实现(第一种方式):业务service基于BaseService的实现(第二种方式):抽取BaseDao...

2019-12-17 15:33:23 1180

原创 Mybatis——二级缓存

目录认识Mybatis的二级缓存:概念理解:使用场景:通过代码进一步理解:使用Mybatis的二级缓存:1.开启二级缓存配置2.在要是用二级缓存的Mapper中配置使用缓存3.对应的model类要序列化禁用某个特定方法的二级缓存功能:使用mybatis的二级缓存(整合ehcache):1.引入ehcache的JAR2.指定cache的实现方式使用eh...

2019-12-16 15:39:29 584

原创 Mybatis——多表查询结果映射(ResultMap)

目录一对一映射:1.简单的可以基于主表model扩展一个新的model添加缺少的字段,作为ResultType使用。2.自定义ResultMap,一个model里面包含另一个model配置映射一对多映射自定义ResultMap,一的model里放以多的model为元素的集合(List)多对多映射:一对一映射:一张user表,一张order表,现在要查询某个o...

2019-12-16 12:00:03 6167 1

原创 Hibernate——一级缓存(session)

目录持久化类分的三种状态瞬时态 transient :持久态 persistent :脱管态 detached :Hibernate的两个缓存:一级缓存:二级缓存(本文不做具体记录):对一级缓存session的理解:通过2段代码进一步理解session缓存:对session缓存进行管理操作方法:一级缓存中的快照区:基于一级缓存考虑到的session...

2019-12-15 19:32:40 322

原创 Hibernate——SQL查询(Hql,Sql,Criteria)

之前的文章记录了单表CRUD操作可以通过API直接实现不用自己写sql,这篇文章记录一下hibernate中自定义查询的实现。1.HQL查询(有session一级缓存)HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的使用session.createQuery创建一个Query对象并定义HQL查询语句,HQL语句与sql的区别就是用类...

2019-12-15 18:54:44 477

原创 Hibernate——ORM映射配置和单表CRUD操作的API方法

目录ORM映射配置1.实体类对应的hbm.xml文件:2、Hibernate的核心配置文件:(使用mapping 标签配置hbm.xml文件的路径映射)CRUD操作获得session1.插入一条记录:session.save()2.根据ID查找一条记录:session.get()或session.load() get方法和load方法...

2019-12-15 00:39:32 231 1

原创 Mybatis——编写动态SQL中where,if使用

where与if的使用起到了参数字段的非空校验作用。直接上代码: where标签会自动生成where关键字。如果前面的sql条件不会拼装(sex = #{user.sex}),那么后面if标签内的and关键字会自动省略。所以sql不会出错。 <select id="findUserList" parameterType="userQueryVO" resultType="u...

2019-12-13 18:29:17 513

原创 Mybatis——返回值resultType(resultMap)详解

之前的文章记录了传参类型,本文记录一下返回值类型的配置。返回值属性有两种设置,一种是resultType,一种是resultMap。resultType适用于返回值是简单类型(String,Integer)或者数据库字段与POJO字段完全一致的情况下,所以属性值一般是某一个pojo类或者简单类型。如果数据库中的字段在resultType指定的实体类中没有对应的字段名称,那这个值将丢失。...

2019-12-13 16:28:54 22415

原创 Mybatis——传参parameterType详解

Mybatis使用的重点就是传参和返回值,也就是parameterType和ResultType(ResultMap)文章记录一下传参的几种使用情况:1.单个参数或较少参数的时候。单个参数直接传就好了,不需要细说。如果参数两三个,推荐在Mapper接口中使用@param注解表明字段。 public User findUserById(int id); <select ...

2019-12-13 15:21:19 2410

原创 ThreadPoolTaskExecutor实现多线程并处理返回值

这篇文章主要记录一下有返回值的多线程该怎么实现。之前的文章有提到过ThreadPoolTaskExecutor线程池执行任务有几个方法:executor.execute(Runnable task):完美适用于没有返回值的情况。未捕获的异常会抛出executor.submit(Runnable task):也适用于没返回值的情况,未捕获的异常不会抛出executor.submit(...

2019-12-12 17:29:39 6422

原创 jQuery——遍历数据的方式

1.JS实现:<script> var arr= ["1111","2222","3333","4444","5555"] function foreach(array) { for (var i = 0; i < array.length; i++) { var item = array[i]; alert(i+": "item...

2019-12-11 15:28:33 568

原创 JAVA IO流

JAVA中的流分为输入流和输出流。其实还有打印流 输入流又分字节输入流和字符输入流(InputStream和Reader); 输出流又分字节输出流和字符输出流(OutputStream和Writer)。网上找了张流接口的图输入流: 字节输入流: InputStream:是所有的输入字节流的父类,它是...

2019-12-10 20:50:10 97

原创 JAVA TCP Socket

JAVA实现TCP通信要用到Socket和ServerSocket两个类,都在java.net包中下: ServerSocket 类用于实现服务端。 Socket 类实现客户端。服务器端实现思路:使用ServerSocket类的port参数的构造方法指定监听的端口,创建一个ServerSocket对象。 通过accept()方法监听获得一个客户端请求。A...

2019-12-10 17:58:48 248

原创 设计模式——工厂方法模式

工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可优点:新增一种产品时,只需要增加相应的具体产品类,再通过实现抽象工厂接口实现新产品的工厂类即可,不需要改动任何原有代码仍然以手机类和具体型号的手机为例:创建工厂类接口:abstract cl...

2019-12-09 18:29:17 99

原创 设计模式——简单工厂模式

简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。简单工厂模式的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,...

2019-12-09 18:05:23 88

原创 SpringBoot——Filter过滤器

过滤器的实现要实现javax.servlet包下的filter接口:配置方式分为注解方式和xml配置方式:Springboot中肯定是使用注解方式:@WebFilter注解1,@WebFilter()注解标注是一个filter2,value等同于xml配置的url-pattern,是过滤路径。dispatcherTypes 标识拦截的类型,默认为请求类型(REQUEST),此外还有...

2019-12-06 18:53:37 279

原创 设计模式——观察者模式

观察者模式:观察者模式又叫发布-订阅(Publish/Subscribe)模式。定义了多个对象之间的一对多的依赖关系,当被观察的对象改变状态时,所有依赖于它(观察者)的都会得到通知并被自动更新。这个模式最简单的组成就是一个被观察者(发布者),一个或多个观察者(订阅者),这么理解其实有点像MQ的概念。。。JDK中其实提供了Observer接口和Observable类让你简单快速的实现观察者模...

2019-12-06 18:01:39 94

原创 SpringBoot实现WebSocket

WebSocket技术实现了浏览器客户端实时更新数据,这是自己的理解。应用场景比如聊天室,股票实时信息这种。在以前这种都是以轮询请求的方式实现的,但是http终究都是请求响应式的,只能是客户端不断的请求才可以,资源浪费严重,如果数据更新【频率小】那就造成资源浪费。后来有了长轮询的方式,就是请求时如果没有数据就不返回,直到有数据更新才返回。然后进行下一次请求。以上是对实时功能实现方案的了解。...

2019-12-06 14:54:47 291

原创 自定义servlet

springmvc用多了,虽然知道这也是servlet的一种实现但是原生的servlet反而快忘干净了。简单复习一下首选实现自己的servlet有多种方式,最常用的就是实现Servlet接口,或者直接集成HttpServlet。自己实现接口的形式要自己重写service方法,而集成HttpServlet的话一般直接重写doPost,doGet等方法实现自己的处理逻辑就好了。在web项目中简...

2019-12-05 14:43:45 1324

原创 STS中使用tomcat部署项目 项目两次加载问题

情况是这样的,在STS中的tomcat配置里server location中选择了tomcat的安装路径,并且按习惯把项目部署路径指定为webapps了。因为默认的配置是部署在STS workspace里面,所以这么一改就可以在自己安装的tomcat里面看到项目部署了本以为自己这种配置很正确。其实这也是正常的配置方式。然而,but。。。启动的时候这个项目被加载了两遍。于是懵逼了,,,找了半...

2019-12-03 22:30:33 861

原创 tomcat虚拟路径配置及使用场景(部署项目,服务器上磁盘文件实现http访问)

看到tomcat虚拟路径时觉得有点懵,,其实早就了解过使用场景了。回忆一下tomca部署web项目的方式:一种是 把编译好的项目放到Tomcat安装目录的webapps目录中,内嵌式,启动tomcat就可以。像Eclipse中添加war部署其实就是这样的实现。第二种是 更改tomcat/conf/server.xml 文件,在<Host>标签下添加<Context&g...

2019-12-03 17:36:01 528

原创 IDEA 使用tomcat部署web项目时是怎么实现部署的

IDEA中使用tomcat部署项目遇到的问题:1,tomcat中webapps目录下有原来的项目,但是实际使用中启动tomcat却没有看到这个项目启动。2.这个目录下竟然没有当前正在开发准确说是正在tomcat上跑着的项目。。最后发现IDEA其实是通过自己内置的tomcat配置文件设置虚拟路径实现部署的,完全不会对已经安装的tomcat设置有任何影响首选说IDEA Artifact...

2019-12-03 15:48:28 746

原创 IDEA搭建SpringMVC+Spring+Mybatis项目

boot用多了发现SSM配置都快忘了,动手搭一下。文章参考郭永峰讲师的教程~~~~为了使项目结构清晰,首先新建一个空的项目:这个只作为IDEA最外层的目录展示,没有实际意义,不做赘述~~~好了,进入主题:创建父工程。新建一个Module,指定为Maven项目,其他不要选,直接next创建,然后删除src等文件夹创建子工程:dao,service,manager,api四...

2019-12-02 22:46:04 431

原创 解决跨域问题详解(在Springboot中)

一旦接触了前后端分离的项目,首先可能要解决的就是前端请求跨域的问题。解决跨域问题有多个角度:1.前端JSONP,同时后端要支持(前面写过一篇)2.Nginx配置3.后端配置(过滤器拦截器等)之前有写过一篇传统的Spring项目配置过滤器的方式,凡是后端处理的当时原理上都是差不多的,就是比较老套,实现自定义filter,web.xml做一下配置使用filter。SpringM...

2019-12-02 18:29:45 532

原创 JSONP 解决跨域问题的前后端实现(使用Springboot实现后端支持)

由于浏览器客户端有同源策略,所以随之出现的就是浏览器请求跨域问题,这个问题其实是这样的: 假设我们使用Ajax向不同域的服务器发送一个请求,其实在服务器端不会有任何问题,只是服务端响应数据返回给浏览器的时候,浏览器根据响应头的Access-Control-Allow-Origin字段的值来判断是否有权限获取数据,一般情况下,服务器端如果没有在这个字段做特殊处理的话,跨域是没有权限访问的,所...

2019-12-02 15:53:43 1485

原创 函数式接口编程——lambda表达式实现优雅的操作集合

首先说函数式接口:就是有且只有一个抽象方法的接口,一般通过@FunctionalInterface这个注解来表明某个接口是一个函数式接口。而lambda表达式就是对函数式接口的编程进行代码简化实现,使代码更优雅。这种只关注做什么而不需要关注怎么做的方式成为函数式编程。lambda表达式的写法: // 参数列表 ...

2019-12-01 17:29:53 397

原创 ThreadPoolExecutor和ThreadPoolTaskExecutor线程池

在非SpringBoot项目中一般是通过xml配置一个线程池的Bean,然后注入bean进而使用线程池执行任务。java开发中使用的线程池一般是ThreadPoolTaskExecutor和ThreadPoolExecutor两个,前者是spring提供的,后者是JDK自带的。贴一下使用spring的ThreadPoolTaskExecutor线程池的Bean配置<!-- sp...

2019-12-01 00:11:59 930

win系统erlang安装包

对应rabbitmq-3.8.9版本

2020-12-21

空空如也

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

TA关注的人

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