使用docker搭建sonarQube
费了好大功夫把阿里云上的环境从centos 6.5 升级到了 centos 7,可以折腾docker了。刚好团队需要进行代码质量审计,于是就顺水推舟的用docker去搭建一套sonarcube。以下是详细过程。
使用阿里云加速docker镜像docker的官方镜像在海外,速度很难让人满意,可以使用阿里云的加速服务。
登陆阿里云为Docker Hub的镜像站点获取专属加速器地址。形如:https://zv123pat.mirror.aliyuncs.com
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器(docker 1.10+)
sudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://zv3w4pat.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart doc ...
从FTP获取文件流并推送到前端展现
前几天遇到一个需求,需要从FTP里获取PDF并在前端渲染出去,同事采用了直接在iframe嵌入ftp url的方式,个人觉得这种方式并不合理,有很多弊端,比如安全性、跨域、ftp中文路径等问题。所以我建议其采用服务端直接获取ftp文件流,然后转发给前端呈现的方式来解决。以下是主要思路。
从FTP获取文件流这里用到了2个第三方库:Apache的FTPClient,IOUtils。前者的retrieveFileStream方法实现了将文件转成InputStream,后者的toByteArray方法实现了将InputStream转换成Byte[]。
import org.apache.commons.io.IOUtils;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import java.io.IOException;import java.io.InputStream;/** * 从ftp获取文件流 * * @author lefer * @version 1 ...
使用java创建pdf文档
PDF是一个很棒的跨平台的文件格式,纯java的方式,有2个很著名的library实现了pdf的创建和读取:
pdfbox 这是一个 Apache 旗下的开源项目。官网
iText 这是 IBM 推荐的开源项目。官网
两个都很好,我们这次选用iText 5来演示PDF的创建和加密。
主要依赖<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.12</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-pdfa</artifactId> <version>5.5.12</version> </dependency> ...
最好的java反编译工具
最好的java反编译工具不是一款,而是三款。一个工具总有疏漏,三款互相参照,天下无敌。
JD-GUI这是老牌劲旅,口碑好。反编译一个war包,上千个class,眨眼之间。成熟稳重。缺点是变量识别上偶有问题,Iterator循环代码块的反编译上偶有问题。下载
javare没错,这是一个在线反编译网站。极其的准,JD-GUI的毛病他没有。缺点是中文乱码,不能批量逆向。访问
luyten这是一个后期之秀,纯java编写,开源代码。三个月前还在更新,能兼容更新版本的JAVA(测试1.7OK)。缺点是中文会被反编译成UNICODE格式。下载
JPA关键词
JPA相较Hibernate来说,比较优秀的一点就是实现了根据方法名的自动解析创建查询。今天看到团队的小伙伴无论查询复杂或简单还在吭哧吭哧的写@Query,于是决定把JPA的能自动解析的关键词扒出来。供大家参考。
简单示例public interface UserRepository extends JPARepository<User, Long> { List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);}
以上就是一个简单的查询的示例。当继承了JPARepository接口之后,JPA就会尝试根据方法名去自动生成sql,上面的方法会被解析成
select u from User u where u.emailAddress = ?1 and u.lastname = ?2
JPARepository<User, Long> ,第一个参数是对应的实体类,第二个参数是这个实体类的主键的数据类型。根据需要修改。
所有关 ...
Spring MVC中上传文件大小超过限制的异常处理
今天团队里的一个小伙子在写代码的时候,遇到一个问题。他在做上传文件的表单时,限制最大上传文件的大小。但当用户上传的文件超过大小后,虽然后台有报异常,前台却没有错误提示。他拿着这个问题问到了我,我把解决问题的过程记录下来,做个分享。
总体思路服务端拦截异常,并直接返回值给前台。前台根据返回的值给用户做下一步处理。
主要代码
Spring Boot 配置文件
server.port=8888# 下面两个参数是设置上传文件大小multipart.maxFileSize=2MBmultipart.maxRequestSize=2MB# 下面两个参数是禁用spring的默认异常映射,比如将异常会自动映射到 /error下。spring.mvc.throw-exception-if-no-handler-found=truespring.resources.add-mappings=false
捕获文件超过设置大小的异常,并直接返回错误信息
@RestControllerAdvicepublic class RestExceptionHandler { @ExceptionH ...
设计模式演绎-模板方法模式
定义
Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
通用类图模板方法模式是一个比较简单和常见的模式。其通用类图如下。
AbstractClass是抽象模板。在抽象模板中实现模板方法。而在具体的实现类中实现基本方法。
在模板方法中调用基本方法,实现算法逻辑。
通用代码/* 抽象模板类 */public abstract class AbstractClass{ //基本方法 protected abstract void doSomething(); protected abstract ...
设计模式演绎-抽象工厂模式
定义
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.
为创建一组相关或相互依赖的对象提供一个接口,而无须指定它们的具体类。
通用类图
通用代码/* 抽象产品类 */public abstract class AbstarctProductA{ // A产品的共有的方法 public void shareMethod(){ } // A类产品必须实现的方法 public abstract void doSomething();}// 省略抽象产品B/* 产品A1的实现 */public class ProductA_1 extends AbstactProductA{ // 实现抽象类的要求 public void doSomething(){ }}// 省略其他产品实现类/* 抽象工厂类 */publ ...
读《软件开发本质论》
书籍信息
中文书名: 软件开发本质论英文书名: The Nature of Software Development作者: [美]Ron Jeffries译者: 王凌云
阅读感悟
我们最终想要的是价值,提供价值的是功能特性。功能特性发布的越早,我们就能越早提供价值。
基于价值的的管理比基于时间或工件等不提供价值的事物更胜一筹。
根据功能特性做计划很简单,只要在必要的时候才进行估算。根据以往完成的工作量来安排下一阶段的工作,效果会更好。
采用逐渐增加功能特性的增量式开发方法,要求我们每隔几周就能开发出小而完整的产品。所开发的必须总是能够正常运行,而且其设计也是良好的。
开发工作必须要交付真正可用的功能特性。
专注于价值。
目的、自主与专精是提高员工满意度和工作效率的三大驱动力。
目的来源于具体的业务。开发团队需要专门配备一位业务人员(产品负责人或客户),由他来指导团队确定哪些功能特性需要首先完成,哪些可以推迟。业务人员负责将疑虑或问题告诉团队,而不是解决方法,团队一起努力解决。
自主能够给整个团队带来责任感。
专精源自迭代过程。每经过一次迭代,都会完善完成一词的定义。所 ...
Centos7安装Chrome浏览器
2018年7月17日更新:
# 不需要那么麻烦,一条命令搞定yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
以下是原文:
Centos7默认的是Firefox,但还是更喜欢Chrome。以下是安装方法。
# 添加Fedora中文社区提供的镜像源sudo wget http://repo.fdzh.org/chrome/google-chrome-mirrors.repo -P /etc/yum.repos.d/sudo yum install google-chrome-stable
补充:Centos7上Chrome有各种小问题,用了30分钟之后,卸载,换回了firefox- -#
再补充:经测试,安装Chrome-beta版本没有任何问题了。
sudo yum install google-chrome-beta