Java中Optional使用注意事项
前言之前遇到过使用Optional之后带来的隐含bug,现在强调记录一下不好的用法,防止错用。 Optional不能序列化,不能作为类的字段(field)这点尤为重要,即类要纯粹。如果是POJO就原始类型就可以了,如果是领域对象,则更不应该使用Optional作为field。 Optional不适合作为方法参数另一种不太适合使用Optional的情况是将该类型作为方法或者构造函数的参数,这将导致不必要的代码复杂化。 1User user = new User("john@gmail.com", "1234", Optional.empty()); 而且,内部如果忘记isPresent,会得到NoSuchElementException。所以 相反,使用方法重载(method overloading)来处理非强制性参数要方便得多。 推荐Optional作为函数返回值使用Optional作为返回值可以增强stream处理,构建流式API. 比如, findFirst()就是返回一个Optional对象。 1234567@Testpubl ...
how-to-enable-https-for-coding-page
移除github page的指向,完全采用coding page,在设置中申请证书即可。
如何面对博文被抓取
昨天把hexo博客的url的日期去掉了,号称说3级以下的地址可以提高爬虫的rank。今天早上输入网址的时候,不小心多带了一个空格,导致变成了google搜索。然后就发现了文章被爬去的事情。打开发现爬去的文章掐头去尾,隐去了作者信息。有的给个原文连接,有的是啥也不给。 昨晚搞到1点多,才搞出来。然后轻轻松松被拿走,然后加广告。。。 所谓的CC by xxx 没有任何意义。看到有个爬虫专门把文章转换成繁体的(好几个),有个更牛逼, 把标题和作者改成自己,图片添加了自己的水印(清屏网)。 所以,花样百出,防不胜防。 首先,应该如何看待这个问题?我认为既然选择了互联网,就拥抱这种现象吧。起点的作者总是在写文章时不时的加一句看盗版的xxx, 因为这关系到了作者的切身意义,都是钱啊。 而写博客的呢,这又是为了什么? 是为了记录。那么,被爬去也是没啥坏处的,坏就坏在盗版小说会标注作者,盗版博客会去掉作者。 怎么解决全手工的盗版,是防不住的。关键是大量的爬虫盗版。这个可以有。爬虫通常掐头去尾,所以把作者写到博客里,把作者写到代码注释里,把作者写到demo里。如果对于盗图有意见,可以加防盗链 ...
install-nginx-on-centos
安装依赖1234yum -y install gcc-c++yum -y install pcre pcre-develyum -y install zlib zlib-develyum -y install openssl openssl-devel libssl-dev 下载源码12wget http://nginx.org/download/nginx-1.9.12.tar.gztar -zxvf nginx-1.9.12.tar.gz 编译安装123./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_modulemakemake install 查看1whereis nginx 防火墙放开12firewall-cmd --zone=public --add-port=80/tcp --permanent ...
使用nginx代理跨域,使用nginx代理bing的每日一图
前言自从搞清楚了跨域原理后一直自鸣得意,感觉跨域没啥问题了。而事实上对关于跨域的几个header的理解也有限,但那又如何,我能做到跨域就行了。今天想把博客背景图改成bing的每日一图,发现遇到跨域问题。首先想到的就是自己写一个web,请求bing,然后传出结果,把自己的接口允许跨域。确实做到了,但是。我找了一台阿里云服务器,我安装了java,我编写了一个基于dropwizard的webservice。我需要写脚本去部署,确保系统稳定,挂了自动重启。我要写一堆的java代码来完成这件事。忽然想到nginx,于是一发不可收拾。 安装好Nginx参阅http://blog.rmiao.top/install-nginx-on-centos/ 找到配置文件/usr/local/nginx/nginx.conf 新增代理路由12345678910location ^~/proxy/bing/ { add_header 'Access-Control-Allow-Origin' 'http:// ...
upgrade-gradle-wrapper
springboot 2.0需要gradle 1+, 而自动构建的都是3.+,手动升级如下 12./gradlew wrapper --gradle-version=4.3.1 --distribution-type=bin./gradlew tasks
使用dropwizard(6)-国际化-easy-i18n
前言Dropwizard官方文档并没有提供国际化的模块,所以只能自己加。Spring的MessageResource用的很顺手,所以copy过来。 Easy i18n在整合Dropwizard的时候,多语言貌似只能通过jdk自带的ResourceBundle拿数据。其实也就够了,但在开发过程中发现需要缓存,需要解析占位符等。代码越写越多,显然不是仅仅一个调用就完事的。写的差不多的时候突然觉得和spring context里的message source结构类似。于是,放弃维护已经开始变的复杂的逻辑,直接使用spring。 但选取dropwizard的时候就是摒弃了spring,再拿过来也不好玩了。干脆,抽取Spring context项目的MessageResource相关代码,重写封装了一个library: https://github.com/Ryan-Miao/easy-i18n, 欢迎star。 easy-i18n还是和在Spring项目中相同。 首先,引入依赖,由于github项目的library已经有仓库去维护了,就没费心思放到maven和jcenter了,直接从 ...
使用dropwizard(5)--加入swagger
前言Swagger已经成API service的规范了,本处在dropwizard中简单集成Swagger. Demo sourcehttps://github.com/Ryan-Miao/l4dropwizard 本文是基于dropwizard入门之上的演进。 确保依赖都是最新的,或者自行解决版本冲突,比如jackson不同版本之间的类有所不同。 添加swagger依赖12345<dependency> <groupId>com.smoketurner</groupId> <artifactId>dropwizard-swagger</artifactId> <version>1.1.2-1</version></dependency> 在configuration中新增swagger的基础配置12@JsonProperty("swagger")private SwaggerBundleConfigur ...
使用dropwizard(4)-加入测试-jacoco代码覆盖率
前言dropwizard提供了一个简单的测试框架。这里简单集成并加入jacoco测试。 Demo sourcehttps://github.com/Ryan-Miao/l4dropwizard 本文是基于dropwizard入门之上的演进。 确保依赖都是最新的,或者自行解决版本冲突,比如jackson不同版本之间的类有所不同。 加入dropwizard-testing在dependencies中增加依赖 123456<dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-testing</artifactId> <version>${dropwizard.version}</version> <scope>test</scope></dependency> 新增Mockito123456 ...
使用dropwizard(3)-加入DI-dagger2
前言习惯了Spring全家桶,对spring的容器爱不释手。使用dropwizard,看起来确实很轻,然而,真正使用的时候不得不面临一个问题。我们不可能一个resource就能把所有的业务逻辑囊括!那么,必然就要有负责处理逻辑的代码,有要提取的公共的代码,要做面向接口开发等等。按照简单的用法,Java Bean就自己new,只要通过Jersey提供的web能力发出去就好。这样写下来,到处都需要new,难以测试等等。目前我最care的是,每个request过来都要new一堆重复的对象,垃圾回收频繁。写个单例不就解决了?是的,当然要想到单例,然后发现几乎所有的类都是设计成单例的。然后,一堆单例的代码写的死。这就是样板代码。于是,想到提取工具类,算了,不如用Dagger好了。 什么是DaggerDagger是Java里开源的DI框架中最火的之一,主要用在Android领域,很多特性也多针对Android开发的。因为Android开发对省电,性能之类的要求比较高,因此抛弃了反射,直接在编译级别生成工厂。详细学习测试:Dagger2之helloworld原理探究 Demo Sourcehtt ...