BlankCat

BlankCat


  • Home

  • Archives

  • Categories

  • Tags

  • About

  • Search
close

jenkins和tomcat的持续集成

Posted on 2015-12-14   |   In CI

今天来说一下如何用jenkins做持续集成。
jenkins我这里就不介绍了,重点介绍一下如何用jenkins对tomcat进行持续集成。

思路

流程是这样的:

  1. jenkins从git(or svn)拉取代码,进行构建。
  2. 将打出来的war包用jenkins的插件(Publish over SSH)传到你要部署的服务器。
  3. 执行一个shell脚本,将正在运行的tomcat进程kill掉,把war包拷到tomcat目录的webapps下。然后在运行${TOMCAT_DIR}/bin/startup.sh。
    Read more »

Mybatis 枚举存储

Posted on 2015-12-11   |   In Java

枚举

我们在写程序的时候会遇到这种需求。就是我的对象里面有一个属性是一个枚举值,但是mybatis默认是不支持的,官方提供了一个typeHandler可以用枚举的ordinal()来进行存和取的自动转换。把它配置在
mybatis-configuration.xml里。

1
2
3
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.xxx.user.UserType"/>
</typeHandlers>
Read more »

centos 6.5 安装docker

Posted on 2015-12-08   |   In centos

先试试把开环境用docker来部署。

http://docs.docker.com/engine/installation/centos/
直接按照这里安装就可以了,不过我在这里遇到了一点问题。
我是centos6.5,内核在 3.8 以上
通过以下命令查看您的 CentOS 内核:

uname -r

如果执行以上命令后,输出的内核版本号低于 3.8,请参考下面的方法来来升级您的 Linux 内核。

对于 CentOS 6.5 而言,内核版本默认是 2.6。首先,可通过以下命令安装最新内核:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt

随后,编辑以下配置文件:

vi /etc/grub.conf

将default=1修改为default=0。

Read more »

gitlab替换nginx服务

Posted on 2015-10-29   |   In centos

之前在自己服务器上搭建服务器,这是之前的文章
gitlab安装需要注意的问题

后来在按照官网上替换自带服务器上的nginx的时候出现了一点问题。也是找了很久才找到这么一篇帖子,我在这里把nginx的部分转载过来一下。

Read more »

[转]Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版

Posted on 2015-04-22   |   In Java

转载:http://www.dengchuanhua.com/132.html

在分布式系统中,需要生成全局UID的场合还是比较多的,twitter的snowflake解决了这种需求,实现也还是很简单的,除去配置信息,核心代码就是毫秒级时间41位+机器ID 10位+毫秒内序列12位。

该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。

python版详见开源项目https://github.com/erans/pysnowflake。

核心代码为其IdWorker这个类实现,其原理结构如下,我分别用一个0表示一位,用—分割开部分的作用:

1
0---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---0000000000 00

在上面的字符串中,第一位为未使用(实际上也可作为long的符号位),接下来的41位为毫秒级时间,然后5位datacenter标识位,5位机器ID(并不算标识符,实际是为线程标识),然后12位该毫秒内的当前毫秒内的计数,加起来刚好64位,为一个Long型。

这样的好处是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和机器ID作区分),并且效率较高,经测试,snowflake每秒能够产生26万ID左右,完全满足需要。

Read more »

Spring MVC 接口版本管理

Posted on 2015-03-31   |   In spring

随着我们的应用后台不断的发版,因为改动导致了数据结构的变化,这个时候就需要对HTTP API进行版本控制了。对原有的客户端进行兼容,搜索一番后找到一个方法。
先看这个文章,提供了一个解决方案。
http://www.cnblogs.com/jcli/p/springmvc_restful_version.html

Spring MVC通过在方法上使用RequestMapping来确认应该使用哪个方法来响应相应的请求,而RequestMapping又通过各种RequestCondition的实现来完成各种过滤(比如:consumes,headers,methods,params,produces以及value等)。在Spring MVC框架中使用RequestConditionHolder和RequestMappingInfo这两个实现。

自定义RequestCondition
  • 实现RequestCondition接口
1
2
3
4
5
6
7
8
9
10
package org.springframework.web.servlet.mvc.condition;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
public interface RequestCondition<T> {
T combine(T other);
T getMatchingCondition(HttpServletRequest request);
int compareTo(T other, HttpServletRequest request);
}
  • 继承RequestMappingHandlerMapping
    • getCustomTypeCondition方法根据对应的Handler类返回类级别的condition
    • getCustomMethodCondition方法根据对应的Handler方法返回方法级别的condition
Read more »

发现tomcat的一个bug

Posted on 2015-03-10   |   In Java

在做项目的时候出现一个错误,看了半天没看出来是什么问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root cause
java.util.NoSuchElementException
java.util.ArrayList$Itr.next(ArrayList.java:834)
org.apache.jasper.compiler.Validator$ValidateVisitor.getJspAttribute(Validator.java:1385)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:772)
org.apache.jasper.compiler.Node$UninterpretedTag.accept(Node.java:1251)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:779)
org.apache.jasper.compiler.Node$UninterpretedTag.accept(Node.java:1251)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:529)
org.apache.jasper.compiler.Node$JspRoot.accept(Node.java:564)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2429)
org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2435)
org.apache.jasper.compiler.Node$Root.accept(Node.java:474)
org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2377)
org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1841)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:217)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

找了半天才发现是tomcat的一个bug,换了一个tomcat版本就好了
导致这个错误的原因如下

1
<jsp:param name="test" value="" />

如果是value是空值,在某些tomcat版本下就会出现这个情况,如果你遇见了,不妨换个版本试试。

Spring Mvc 3.1 之后如何配置messageConverters

Posted on 2015-03-06   |   In spring

<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。

这句话我在很多帖子都看到过,我自己的项目本身使用的Spring MVC 3.2,实际上在3.1之后,注册的类发生了变化

Spring Framework 3.1 introduces a new set of support classes for processing requests with annotated controllers:

RequestMappingHandlerMapping
RequestMappingHandlerAdapter
ExceptionHandlerExceptionResolver
These classes are a replacement for the existing:

DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
AnnotationMethodHandlerExceptionResolver

Read more »

CentOS Jenkins + Sonar + Nexus 环境搭建

Posted on 2015-03-06   |   In CI

Nexus篇

在Centos上安装

如果机器上是JDK1.6的话,nexus-2.5.1是最后一个支持JDK1.6的版本。

下载地址:http://www.sonatype.org/nexus/archived

我这里使用FTP工具上传到服务器上。执行命令的时候如果遇到没有权限的地方用chmod改变文件权限。

设置为系统自启动服务(使用root用户)

1
2
cd /etc/init.d/
cp /usr/local/jdk/nexus-2.5.1-01/bin/jsw/linux-x86-64/nexus nexus

编辑/etc/init.d/nexus文件,添加以下变量定义:

1
2
3
NEXUS_HOME=/usr/local/jdk/nexus-2.5.1-01
PLATFORM=linux-x86-64
PLATFORM_DIR="${NEXUS_HOME}/bin/jsw/${PLATFORM}"

Read more »

centos 6.5 安装gitlab安装需注意的问题

Posted on 2015-02-06   |   In centos

安装gitlab
首先按照官网进行操作,环境为centos 6.5
https://about.gitlab.com/downloads/
注意安装过程中执行命令

1
sudo gitlab-ctl reconfigure

出现错误,在/etc/gitlab/gitlab.rb中修改域名后再执行一次方可启动成功
image

Read more »
1…789
BlankCat

BlankCat

三岁学说话,一生学闭嘴!

84 posts
25 categories
46 tags
GitHub Weibo 开发导航 个人主页
© 2017 BlankCat
Powered by Hexo
Theme - NexT.Mist