reactive

聊聊reactive streams的schedulers

試著忘記壹切 提交于 2020-03-02 03:28:58
序 本文主要研究一下reactive streams的schedulers 背景 默认情况下Mono以及Flux都在主线程上运行,有时候可能会阻塞主线程,可以通过设定schedulers让其在其他线程运行。 原始输出 没有使用publishOn及subscribeOn时输出如下 11:26:10.668 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework 11:26:11.097 [main] INFO com.example.demo.SchedulerTest - defer thread:[main] 11:26:11.116 [main] INFO com.example.demo.SchedulerTest - filter thread:[main] 11:26:11.116 [main] INFO com.example.demo.SchedulerTest - filter thread:[main] 11:26:11.116 [main] INFO com.example.demo.SchedulerTest - subscribe thread:[main],data :2 11:26:11.116 [main] INFO com.example.demo

基于Spring Boot 2.0 及MongoDB 3.6.2 实现的简单文件共享服务器

痴心易碎 提交于 2020-03-01 06:18:57
近期研究学习Spring Boot 2.0及MongoDB期间,尝试用Reactive模式实现了一个简单的文件共享服务器,可用于家庭及小型组织内部的文件共享,目前已实现如下功能: 1. 管理员及普通账号鉴权; 2. 分组文件管理,分目录管理; 3. 文件批量下载,PDF及图片格式文件预览与下载; 4. 目录管理与账号管理; 5. 各个基础功能的REST API接口; 6. 新增TensorFlow 自动识别图像内容,为图像增加内容标签 开发环境配置如下: JDK最低版本要求 Java SE 1.8, 目前在JDK9.0版本环境还存在一些兼容性问题。 Spring Framework 5.0.3.RELEASE + Spring Boot 2.0.BUILD-SNAPSHOT Spring Security 5.0.1.RELEASE Kotlin 1.2 (目前仅用于建立实体映射Bean) Springfox Swagger 2.8.0 + swagger-bootstrap-ui 1.7.2 (不同的REST API展示界面) MongoDB 3.6.2 (配置数据及文件存储) 后端文件全部存储在MongoDB库内, 本示例程序启动操作简单,具体操作步骤如下: 1. 从码云下载代码库,在本地通过gradle命令编译生成jar包; 2. 下载MongoDB,启动mongodb实例;

Spring Boot高频面试题:Spring Boot执行原理

你离开我真会死。 提交于 2020-02-28 03:47:58
之前一篇文章 Spring Boot快速入门 文章中,我们已经体会到Spring Boot的神器,不再像之前Spring那样需要繁琐的XML,甚至几秒钟就能搭建出Spring的项目骨架。接下来我们简单分析Spring Boot的基本原理,让我们揭开它神秘的面纱吧。 1 @SpringBootApplication 首先,我从引导类开始 /** * Spring Boot引导类 * 一点教程网 - www.yiidian.com */ @SpringBootApplication public class MyBootApplication { public static void main(String[] args) { SpringApplication.run(MyBootApplication.class,args); } } 引导类代码很简单,但可以看出最关键的是 @SpringBootApplication 注解以及在main方法中运行的SpringAppliation.run()了,我们进去 @SpringBootApplication 的源码: @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration

vue3 watch

最后都变了- 提交于 2020-02-27 20:15:03
watch 监听ref let a = ref(0) let b = ref(1) watch(() => { console.log('watch a+b', a.value + b.value) }) watch(a, () => { console.log('watch a', a.value + b.value) }) setTimeout( () => { a.value++ }, 1000 ) setTimeout( () => { b.value++ }, 2000 ) 默认是先执行一次, 不指定监听的数据源时, 只要关联数据变化, 就会执行, 指定监听源时, 只有指定的数据变化后才会执行 监听reactive let a = reactive({count: 1}) let b = reactive({count: 2}) watch(() => { console.log('a+b', a.count + b.count) }) watch(() => a.count, () => { console.log('a.count', a.count + b.count) }) watch(() => a, () => { console.log('a', a.count + b.count) }) setTimeout(() => { a.count++ },

Vue中你可能认为是bug的情况原来是这样的

谁说胖子不能爱 提交于 2020-02-27 20:11:29
前言 我们知道Vue框架剧本双向数据绑定功能,在我们使用方便的同时,还有一些细节问题我们并不知道,接下来一起探讨一些吧 双向数据绑定 js变量改变影响页面 页面改变影响js变量 Vue2是如何做到数据绑定的 Object.defineProperty(obj,key,{ set:function (newV) { val = newV; // 通知所有用到这个属性的DOM更新 dep.notifyAll(); }, get:function () { if (Dep.currentSub) { // 对这个属性,新订阅一个元素 dep.subscribe(); } return val; } }); 以上需要说的就是: Vue中data函数返回的对象,会经过层层遍历,最后将所有的对象通过以上方法,把其属性进行监视。 通过xxx.xxx = 'xxx' 就会触发set函数 通过xxx.xxx 就会触发get函数 关于数组与基本数据类型的奇葩现象 我们声明好数组,其中放置基本数据类型 let vm = new Vue({ el:'#app', template:` <div> <p v-for="n in arr"> {{n}} </p> </div>`, data(){ return { arr:[1,2,3] } } }); 现在我们改变其中的元素值 如图所见

vue3 简单上手

China☆狼群 提交于 2020-02-27 15:08:33
使用 vue-next-webpack-preview 项目作为测试环境 生命周期 setup函数的执行时机和composition-api 的变现并不一致, vue3中是最先执行的 下图为composition-api 效果 组件传参以及事件处理 子组件, 接受父组件传递的参数 使用该值作为初始值, 进行+1操作, 并将该事件抛出 <template> <div> <span>{{count}}</span> <button @click="add">add</button> </div> </template> <script> import {ref} from 'vue' export default { name: "Calc", setup(prop, ctx) { let count = ref(prop.initValue) const add = () => { count.value++ ctx.emit('on-add', count.value) } return { add, count } } } </script> 父组件 每次点击时, 就生成随机数, 并传入子组件, 接受子组件add事件, 打印参数 <template> <div> <Calc v-for="(i,index) in list" :key="index" :initValue="i"

0116 spring的webFlux

爷,独闯天下 提交于 2020-02-27 15:00:16
背景 场景 要求 编程方法 电商和金融行业 数据一致性要求非常高 高并发的时候需要锁或者其它机制来保证一些重要数据的一致性;<br />但是性能也下降的很快; 游戏,新闻,视频,广告 不需要很高的数据一致性 对并发数和响应速度要求比较高 这种场景下,出现了响应式编程。依赖的基础技术点如下: 技术点 说明 servlet3.1 支持响应式编程 java8 语法丰富支持响应式编程,非堵塞式编程 spring5 新一代的web框架webflux,依托于servlet3.1+和java8 srpingboot2.x 使用了spring5 Rxjava 一种流行的响应式编程框架 Reactor spring5中响应式编程的默认实现方式 基本概念 响应式编程关键词: 数据流:流式处理 异步: 异步处理 消息:基于消息名 Reactor模型 客户端先向服务器端注册感兴趣的event,完成了事件订阅; 客户端发生已经注册的事件,会触发服务器的响应,服务器存在一个selector线程,【轮询客户端发送过来的事件】但是并不实际处理事件,而是找到对应的Request Handler,启用另外一条线程运行处理。 最终结果会转换成data stream,发送到客户端; WebFlux 基于servlet3.1对非阻塞机制,和java8的函数式语法,webflux出现了。 响应式编程分为3层: 层 说明

Reactive Spring WebClient - Making a SOAP call

余生颓废 提交于 2020-02-26 09:19:12
问题 I am looking to make a SOAP call from spring reactive webclient. I couldn't find any documentation for it. Wondering what would the approach. Right now I am thinking Construct the SOAP message using JAXB on a separate thread pool Make the call by converting it to string via webclient Do convert back into java using jaxb on the way back on separate tp. What are the downsides and any other approaches? 回答1: You need to generate SOAP client as the stub classes with methods for asynchronous. JAX

Reactive Spring WebClient - Making a SOAP call

折月煮酒 提交于 2020-02-26 09:17:05
问题 I am looking to make a SOAP call from spring reactive webclient. I couldn't find any documentation for it. Wondering what would the approach. Right now I am thinking Construct the SOAP message using JAXB on a separate thread pool Make the call by converting it to string via webclient Do convert back into java using jaxb on the way back on separate tp. What are the downsides and any other approaches? 回答1: You need to generate SOAP client as the stub classes with methods for asynchronous. JAX

Spring WebFlux -01-Reactor 简介

巧了我就是萌 提交于 2020-02-26 04:37:29
Reactor是第四代Reactive库,基于Reactive Streams规范在JVM上构建非阻塞应用程序。Reactor侧重于服务器端响应式编程,是一个基于Java 8实现的响应式流规范(Reactive Streams specification)响应式库。 作为Reactive Engine/SPI,Reactor Core和IO模块都为重点使用场景提供了响应流构造,最终与Spring、RxJava、Akka Streams和Ratpack等框架结合使用,作为Reactive API,Reactor框架模块提供了丰富的消费功能,如组合和发布订阅事件。 本节对Reactor的介绍以基本的概念和简单使用为主,更多Reactor高级特性可参考Reactor官网: http://projectreactor.io/ 。 来源: oschina 链接: https://my.oschina.net/u/3777515/blog/3163492