什么是函数式编程思想?
请注意这篇文章并不是教你怎么使用Java8里面的集合新特性–stream流,也不是教会你怎么使用lambda表达式,它纯粹是我个人从函数式编程思想的角度出发,来思考我们为什么需要函数式编程以及何时才需要函数式编程的一个思考过程。先说说我在开发过程中碰到的一个问题,因为有问题才能驱动人去解决问题嘛!这个问题就是我在写不同的定时任务的时候,发现每次都要使用一段相同的for循环代码段,中间唯一不同的就是在for循环里面执行的一部分代码段。这部分代码段根据不同的需求而不同,而使用这个for循环的目的就是为了遍历一个列表。那部分不同的代码就是要在for循环里面根据列表里面不同的值来执行相应的任务。所以写了很多这种定时任务之后我就感觉那部分for循环代码能不能抽成一个函数啊,这样就能复用了啊。但是不幸的的是,我要执行的不同的代码段是在for循环里面,而不是在for循环后面。所以要想以前一样,把这个for循环提取出来是不起作用的,因为照以前的思想函数的参数只能是变量,不能是代码段。我在没有想到函数式编程思想的时候甚至想能不能有一种搭积木式的编程方式,就是只要一个函数里面包含for循环的前一个大括号,
2019-11-29 技术分享
千万不要这样使用@Async注解
在实际的项目中,对于一些用时比较长的代码片段或者函数,我们可以采用异步的方式来执行,这样就不会影响整体的流程了。比如我在一个用户请求中需要上传一些文件,但是上传文件的耗时会相对来说比较长,这个时候如果上传文件的成功与否不影响主流程的话,就可以把上传文件的操作异步化,在spring boot中比较常见的方式就是把要异步执行的代码片段封装成一个函数,然后在函数头使用@Async注解,就可以实现代码的异步执行(当然首先得在启动类上加上@EnableAsync注解了)。具体的使用方式这里我也就不再演示了,网上教大家使用@Async的很多。今天我要讲的并不是怎么去使用@Async注解,而是讲我在实际开发过程中遇到的一个坑,希望你不要再犯。首先,再明确一点,学习一个知识,第一步是找到相应的官网或是比较权威的网站。那么这个坑是什么呢?就是如果你在同一个类里面调用一个自己的被@Async修饰的函数时,这个函数将不会被异步执行,它依然是同步执行的!所以你如果没有经过测试就想当然的以为只要在方法头加上@Async就能达到异步的效果,那么你很有可能会得到相反的效果。这个是很要命的。所以我来给你们演示一下,这
2019-11-13 技术分享
最近学习的两种导出Excel的方式对比
最近在工作过程中遇到了一个需要将数据库的数据导出为Excel文件的需求,以便运营团队分析数据。众所周知,POI是Apache软件基金会的一个用于处理office中各个文档格式的库,但是它太原始了,不利于我们快速开发。又因为一开始的需求是把列表数据转换为Excel,于是我就在谷歌上搜索了一下关键词“Java把列表数据转换为Excel”,于是搜到了XXL-EXCEL。一、XXL-EXCEL这是一款专门用于把Java对象列表与Excel互相转换的第三方库,官方宣称一行代码完成Java对象和Excel之间的转换,事实上也确实如此。XXL-EXCEL的优势就是可以简单快捷的完成Java对象列表与Excel的互相转换。使用方式在官网也写得非常清楚,这里就不展示了。一开始用的时候,还感觉XXL-EXCEL挺好用的,但是随着需求的增加,它的缺点就暴露了出来,就是功能过于简单,可以自定义的地方太少。比如我在一个Excel文件中有多个sheet,sheet的名字就不能自定义,XXL-EXCEL默认的行为就是把在Java对象名的注解上注明的名字后面添加一个递增数字。比如用@ExcelSheet(name =
2019-10-26 技术分享