![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 75
nyzzht123
这个作者很懒,什么都没留下…
展开
-
Quarkus初探
快速体验Quarkus原创 2024-04-10 15:51:30 · 938 阅读 · 1 评论 -
StructuredTaskScope
需要注意的是StructuredTaskScope与ForkJoinPool不同,ForkJoinPool是为计算密集型任务设置的,StructuredTaskScope默认使用虚线程,主要面向I/O密集型。是为了解决主线程和子线程之间的可见性(observability),消除因取消和关闭而产生的常见风险,例如线程泄漏和取消延迟而引入的一个新组件。参考:https://openjdk.org/jeps/453。方法,该方法需要分别调用另外两个方法。这段代码有以下几个问题。原创 2023-08-30 13:52:23 · 440 阅读 · 0 评论 -
Java虚线程 简介
虚线程是JDK19中新引入的一个功能,在JDK19中是Preview。旨在帮助开发者以更简单、清晰的方式开发出高性能,吞吐量更大的应用程序。原创 2023-08-14 11:27:10 · 220 阅读 · 0 评论 -
Mockito mockStatic, mockConstruction
之前项目中都是使用PowerMock的mockStatic和whenNew来mock 静态方法和构造函数。但是在升级jdk17的过程中发现PowerMock已停止维护且不支持jdk17,我们转而将Mockito升级,使用Mockito中提供的。原创 2023-03-01 15:53:43 · 7858 阅读 · 0 评论 -
Feign源码浅析
创建一个公用的httpClient肯定是很多码农都遇到过的任务,提供了一个简单优雅的方式。首先要区别一点,是spring封装的,和原始的Feign在用法上有一定的区别。Sping提供的封装固然用起来简单,但是其中的依赖或许会给我们的工程带来很多麻烦。这里我们把重点放在原始的,看看他是如何为我们创建httpClient的。上述事例中展示了一种Feign的用法,这种指定baseUrl的形式最终会生成一个,如果baseUrl不固定,Feign还提供了一种的实现深入探究的创建和使用就是这么简单,但是在这简单的原创 2022-12-05 16:25:28 · 292 阅读 · 0 评论 -
缩短maven build 时间
提升mavne test时间背景增加内存背景公司最近对代码的行覆盖提了要求,虽然说更多的UT可以在一定程度上提升代码质量,但是由于代码的量很大导致maven build出包的速度受到了很大的影响,一度增加到了40min。(我们公司一定要先build 通过才能将代码合并到Master)在这样的情况下领导要求大幅缩短UT耗费的时间增加内存通过增加分析build过程中的GC log,发现经过多次的Full GC,每次都会消耗掉不少时间,通过修改pom.xml来修改 <argLine>-nov原创 2022-01-17 16:53:05 · 732 阅读 · 0 评论 -
SpringBoot 2.0 ErrorpageFilter disable
最近在Monitor生产环境时发现有些时段出现了大量的http 500异常,刚开始还以为是出现了问题,仔细排查过后发现其实是遇到了Sql注入的攻击,被Spring Security的拦截器拦截后抛出了RequestRejectedException的异常,由于在filter层,该异常未被处理最终成了500。虽然未造成真实的影响,但是影响到了Monitor的准确性,还是要进行处理。方案一: RequestRejectedHandler如果是SpringBoot 2.4,有一个很方便的解决方案 @Bean原创 2021-09-02 14:14:59 · 796 阅读 · 0 评论 -
MongoDb学习笔记(二)SpringBoot整合,client初始化
项目地址:https://gitee.com/xiiiao/mongo-learning添加pom依赖<!-- spring相关依赖--><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</vers原创 2020-08-11 15:54:55 · 5665 阅读 · 1 评论 -
ribbon中使用HystrixRequestVariableDefault的一个注意事项
ribbon中使用HystrixRequestVariableDefault的一个注意事项ribbon中自定义路由使用HystrixRequestVariableDefault遇到的问题ribbon中自定义路由使用HystrixRequestVariableDefault最近在研究SpringCloud的灰度发布方案,具体方案是在zuul过滤器中判断哪些用户属于灰度用户,通过HystrixRe...原创 2020-04-16 16:56:56 · 1413 阅读 · 0 评论 -
使用Netty发送和接收http报文中的一些注意事项
使用Netty发送和接收http报文中的一些注意事项近期看了一些《Netty实战》这本书,看完之后有些云里雾里的,就想写一个简单的http服务端和客户端感受一下,代码不多但是期间还是遇到了一些问题,这里把其中的一些坑记录下来。Netty自带的编码器解码器Netty为常用的网络协议准备了编/解码器,但是就像Netty中大多数组件都是有服务端与客户端的区别,编/解码器同样也存在这方面的...原创 2018-05-04 20:29:33 · 6896 阅读 · 1 评论 -
Play 2.6 依赖注入
依赖注入https://playframework.com/documentation/2.6.x/JavaDependencyInjectionPlay对实现了JSR 330的依赖注入提供了支持。Play自带的默认的实现是Guice,其他实现也可以添加进来。为了启用Guice模块,先要在依赖中添加信息libraryDependencies += guiceGuice wiki...翻译 2018-02-13 13:48:29 · 1128 阅读 · 2 评论 -
Play 2.6 模版引擎Twirl
模板引擎英文原文 https://playframework.com/documentation/2.6.x/JavaTemplates基于Scala类型安全的模板引擎Play使用的模板引擎为Twirl。具有以下特点(略过不译): - compact, expressive, and fluid: it minimizes the number of characters an翻译 2018-01-09 19:16:33 · 711 阅读 · 0 评论 -
Play 2.6 Twirl表单工具
Form template helpers英文原文 https://playframework.com/documentation/2.6.x/JavaFormHelpers#form-template-helpers创建一个标签helper会根据反转路由信息自动设置action和method的值@helper.form(action = routes.Applicati翻译 2018-01-10 19:38:10 · 251 阅读 · 0 评论 -
Play 2.6 表单
Java表单英文原文 https://playframework.com/documentation/2.6.x/JavaForms在使用表单之前,可以先看一下Play enhancer,Play enhancer为Java类中的域生成访问方法,这样你就不需要手动添加这些代码,这也许会为你提供一些便利。下面展示的例子都是手工生成访问方法的。启用/禁用表单组件默认情况下,如果启动P翻译 2018-01-10 19:17:54 · 771 阅读 · 0 评论 -
Play 2.6 为Twirl添加自定义的格式
为模板引擎添加自定义的格式原文地址 https://playframework.com/documentation/2.6.x/JavaCustomTemplateFormatTwirl内建的模板引擎支持大多数常用的格式(HTML,XML等),如果有需要的话也可以添加自己的格式。模板引擎处理过程模板引擎通过添加模板中的静态、动态内容来构建最终结果,考虑以下的例子:fo翻译 2018-01-10 09:00:15 · 374 阅读 · 0 评论 -
Play 2.6 Twirl模板常见用法
模板常见用法英文原文 https://playframework.com/documentation/2.6.x/JavaTemplateUseCases布局可以声明一个view/main.scala.html模板作为模板@(title: String)(content: Html)html> head> title>@titletitle> head翻译 2018-01-10 08:48:00 · 629 阅读 · 0 评论 -
Play 2.6 模板中的依赖注入
模板中的依赖注入通过使用构造器,模板可以被生成为一个class而不是一个静态对象。这就意味着模板可以被直接注入到Controller中,并且可以自己管理依赖。假设我们有一个组件Summarizer,这个组件不会被Controller使用package services;public interface Summarizer { /** Provide short form o翻译 2018-01-10 08:44:51 · 352 阅读 · 0 评论 -
Play 2.6 WebSocket
WebSocketsWebSockets是一种支持全双工通信的套接字。现代的html5通过js api使得浏览器天生支持webSocket。但是Websockets在移动端以及服务器之间的通信也非常有用,在这些情况下可以复用一个已经存在的TCP连接。处理WebSockets一般Play通过action来处理http请求,但是WebSockets是完全不同的,没法使用action来处翻译 2018-01-09 17:34:16 · 1047 阅读 · 0 评论 -
Play 2.6 Comet
CometComet是指基于 HTTP 长连接的“服务器推”技术,是一种不需要客户端主动请求,服务端可以主动让客户端推送消息的技术。英文原文 https://playframework.com/documentation/2.6.x/JavaComet#using-chunked-responses-with-comet使用chunked response来实现Cometch翻译 2018-01-09 17:32:21 · 218 阅读 · 0 评论 -
Play 2.6 Play enhancer
Play enhancer英文原文 https://playframework.com/documentation/2.6.x/PlayEnhancerPlay enhancer是sbt的一个插件,用来产生Java bean的get set方法,并且重写了那些通过getters和setters来获取域的代码。动机Java的一大缺点就是一个简单的东西需要一大堆样板代码,这其中最翻译 2018-01-11 17:18:59 · 358 阅读 · 0 评论 -
Play 2.6 访问SQL数据库
访问SQL数据库Note: JDBC是一种阻塞操作。你不能直接在controller中运行JDBC查询语句。详见配置CustomExecutionContext章节配置JDBC连接池Play提供插件来管理连接池,你可以根据需要配置多个数据库。 为了启动数据库插件,需要添加以下依赖:libraryDependencies += javaJdbc然后需要字applica翻译 2018-01-11 20:02:59 · 1129 阅读 · 0 评论 -
Play 2.6 使用JPA
使用JPAhttps://playframework.com/documentation/2.6.x/JavaJPA添加依赖首先腰围工程添加javaJpa依赖,这里会提供JDBC和JPA的相关依赖。Play中没有内建的JPA实现,可以使用任何可用的实现,下面的例子使用了HibernatelibraryDependencies ++= Seq( javaJpa,翻译 2018-01-12 10:25:52 · 1170 阅读 · 2 评论 -
Play 2.6 使用Ebean
Ebean的使用https://playframework.com/documentation/2.6.x/JavaEbean配置EbeanPlay自带Ebean。首先在project/plugins.sbt中添加插件addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.0.1")然后在build.sbt中启用翻译 2018-01-12 10:27:01 · 1899 阅读 · 0 评论 -
Play 2.6 在Play中使用缓存
使用缓存https://playframework.com/documentation/2.6.x/JavaCache对数据进行缓存是一种很常见的优化方式,Play也提供了全聚德缓存。对于cache有一点很重要,缓存只能做缓存能做的:你刚保存的数据也许会丢失。对于任何保存在缓存中的数据,当数据丢失时需要一个重新生成的策略。这个哲学存在于Play的基础之中,而且与Java EE不同,se翻译 2018-01-12 19:43:59 · 1997 阅读 · 0 评论 -
Play 2.6 使用Play WS调用REST API
使用Play WS调用REST APIhttps://playframework.com/documentation/2.6.x/JavaWS又是我们需要去访问别的HTTP服务器的资源。PLAY提供了WS类库来支持异步的HTTP调用。在使用WS API时有两个部分:发出请求,处理响应。我们首先会介绍如何发出GET和POST请求,然后展示如何通过类库来处理响应,最后介绍一下常见的用法。翻译 2018-01-12 19:45:41 · 4547 阅读 · 0 评论 -
Play 2.6 Play对OpenID的支持
Play对OpenID的支持https://playframework.com/documentation/2.6.x/JavaOpenIDOpenID是一种协议,允许使用一个帐号来登入多个服务。作为一名Web开发这,你可以让用户使用一个他们已经拥有的账户(比如谷歌账户)来登录。在企业内,可以使用OpenID来连接SSO服务。OpenID的流程用户想给你提供了他的OpenID翻译 2018-01-12 19:47:26 · 323 阅读 · 2 评论 -
Play 2.6 OAuth的使用
OAuthhttps://playframework.com/documentation/2.6.x/JavaOAuthOAuth是一个发布和交互受保护数据的简单方法。这是一种更加安全的访问方式。举个例子,你可以去获取用户在Twitter上的数据。OAuth有两个版本,1.0和2.0。第二个版本在不使用类库的情况下也很容易实现。因此Play只对1.0版本进行了支持。使用添加翻译 2018-01-12 19:48:29 · 375 阅读 · 0 评论 -
Play 2.6 路由
routersconf/routers文件中配置路由信息 一条路由信息包括两个部分:http方法(get、post等)请求路径无参路由routers文件GET /count controllers.CountController.count代码package controllers;import pl原创 2018-01-06 14:17:03 · 664 阅读 · 0 评论 -
Play 2.6 设置Response
设置Response文档原地址 https://playframework.com/documentation/2.6.x/JavaResponse修改默认的Content-TypePlay会根据返回内容的Java值自动填充content-typeResult textResult = ok("Hello World!");会将Content-Type填充为text/翻译 2018-01-08 19:29:31 · 760 阅读 · 0 评论 -
Play 2.6 Session and Flash scope
Session and Flash scope如果想要在多次http请求间保存数据,可以将数据保存在会话或者flash scope中,保存在会话中的数据在整个用户会话期间都有效,保存在flash中的数据只在下次请求中可用。session和flash中的数据没有保存到服务端中,而是通过cookies的方式添加到下一次的请求中,所以保存的数据十分有限(4KB)且只能保存StringSe翻译 2018-01-08 19:45:30 · 342 阅读 · 0 评论 -
Play 2.6 Body Parser
Body parsers一个http请求包含了一个请求头和一个请求体,头部信息比较短,可以安全的保存在内存中,在Play中头部信息使用RequestHeader类进行建模。请求体的内容可能较大,使用流stream的形式进行建模,Play提供了一个BodyParser抽象用于将流中的信息转换为内存对象。由于Play是一个异步框架,对流的处理不实用Java中的InputStream,因为该方法翻译 2018-01-08 19:48:34 · 482 阅读 · 0 评论 -
Play 2.6 Action组合
英文原文地址 https://playframework.com/documentation/2.6.x/JavaActionsCompositionAction compositionaction是一个返回play.mvc.Result对象的方法。实际上play在内部将actions当作functions管理(Actually, Play manages internally ac翻译 2018-01-08 20:01:29 · 1355 阅读 · 0 评论 -
Play 2.6 拦截Http请求
拦截Http请求英文原文 https://playframework.com/documentation/2.6.x/JavaActionCreatorPlay提供的Java API提供了两种方式拦截action请求。第一种为ActionCreator,这种方法提供了一个creationAction方法用来创建action组合中使用的初始action。第二种为实现HttpReques翻译 2018-01-08 20:03:58 · 1815 阅读 · 3 评论 -
Play 2.6 内容协商
内容协商https://playframework.com/documentation/2.6.x/JavaContentNegotiation内容协商是这样一种机制,对于同一个URI,可能返回不同的服务形式,例如对于Web Services 可以返回不同的输出格式(XML,JSON等)。服务驱动协商使用Accept*形式的请求头。语言可以通过 play.mvc.Http.Requ翻译 2018-01-08 20:07:50 · 190 阅读 · 0 评论 -
Play 2.6 异步处理结果
异步处理结果英文原文 https://playframework.com/documentation/2.6.x/JavaAsync创建异步的controllerPlay是一个自底向上的异步框架,play处理所有的request都是异步、非阻塞的。默认的方式是使用异步的controller。换句话说,contrller中的应用代码需要避免阻塞,i.e.不能等待某一个操作。场景的阻翻译 2018-01-09 14:54:11 · 1619 阅读 · 0 评论 -
Play 2.6 Streaming HTTP response
Streaming HTTP response标准的响应及Content-Length从HTTP1.1开始,服务端为了在single connection下对HTTP请求及响应提供服务,需要在response中提供响应的Content-Length。默认情况下,不需要显示的指明Content-Length,比如以下的例子public Result index() {翻译 2018-01-09 14:59:50 · 788 阅读 · 0 评论 -
Play 2.6 抵御CSRF
抵御跨站伪造请求https://playframework.com/documentation/2.6.x/JavaCsrfCSRF是一个安全漏洞,攻击者通过受害者的浏览器在会话期间发起一个请求。由于每一个请求都会带有session token,如果攻击者能够迫使被害者浏览器以自己的身份发出请求,那么也能以用户的名义发出请求。建议你了解以下CSRF,了解一下什么是攻击向量什么不是,可以翻译 2018-01-11 17:14:35 · 1179 阅读 · 0 评论