CentOS下配置Jenkins+SVN+Maven进行持续集成

2014年9月26日 没有评论

jenkins的安装方式有多种,在Linux下可以通过yum来直接安装jenkins,jenkins官方文档中有详细介绍,在这里不讨论这种方式。常见的安装方式是通过官网上的war包进行。

1.下载war包

在官网右侧可以找到最新的war包:http://jenkins-ci.org/

2.启动jenkins

jenkins的运行有两种方式,第一种是直接部署到j2ee容器中,如tomcat.第二种是直接用java -jar命令启动,下面详细说明这种方式所需的配置。

jenkins.war内部集成了winstone这个servlet容器,下面创建一个启动脚本。

#!/bin/sh
 
JENKINS_HOME=/home/software/jenkins/work
export JENKINS_HOME
 
java -jar jenkins.war --logfile=/home/software/jenkins/logs/log.txt --httpPort=8888 --daemon --extractedFilesFolder=/home/software/jenkins/temp

httpPort参数用于指定工作端口,更多配置项可以使用 java -jar jenkins.war –help 查看

目录结构如下:

-rw-r--r--  1 root root 67789860 Sep 22 12:00 jenkins.war
drwxr-xr-x  2 root root     4096 Sep 26 15:56 logs
-rwxr-xr-x  1 root root      217 Sep 26 15:55 start.sh
drwxr-xr-x  2 root root     4096 Sep 26 15:56 temp
drwxr-xr-x 12 root root     4096 Sep 26 15:57 work

主要是work目录,用于存放jenkins的配置和解压war包。完成上述操作后变可以通过start.sh来启动jenkins了。

3.配置jenkins
a).进入jenkins管理界面,系统管理–>系统配置,配置jdk和maven。
b).设置邮件通知服务,如果使用第三方SMTP服务,如163邮箱,需要先在系统管理–>系统配置,配置系统管理员邮件地址以及邮件通知即可。
c).在持续集成任务中配置的post steps里的脚本,如果如果不能正常启动tomcat可以再脚本前面加上BUILD_ID=xxx.如图:
jenkins-post-steps

分类: 高级民工 标签:

SpringMVC获取所有映射URL

2014年8月30日 没有评论

  获取代码如下:

public static List<String> getAllRequestMapping(HttpServletRequest request){
    ServletContext sc = request.getSession().getServletContext();
    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc,FrameworkServlet.class.getName() + ".CONTEXT.mvc");
    RequestMappingHandlerMapping mapping = wac.getBean(RequestMappingHandlerMapping.class);
 
    List<String> list = new ArrayList<String>();
    for(RequestMappingInfo info : mapping.getHandlerMethods().keySet()){
    	for(String url : info.getPatternsCondition().getPatterns()){
    		list.add(url);
    		break;
    	}
    }
 
    return list;
 
}
分类: 源码分享, 高级民工 标签:

JAVA序列化中的一些问题

2014年6月3日 没有评论

1.serialVersionUID的作用

  serialVersionUID可以认为是一个类的摘要,默认值的计算依赖于类的构造方法、成员变量和成员方法的定义规则,具体算法代码位于:java.io.ObjectStreamClass.computeDefaultSUID(Class<?>) 。对于implements Serializable的类而言可以显示或非显示的定义serialVersionUID,在通常情况下建议显示定义serialVersionUID,这样就算改变成员方法定义也不会影响到反序列化操作。

2.成员变量的增加或减少会影响反序列化吗?

  这个问题的前提是显示定义了serialVersionUID,如果非显示定义serialVersionUID则对 构造方法、成员变量和成员方法的任意修改都会导致反序列化失败,因为反序列化时会计算当前Class的serialVersionUID,如果序列化前后不一致则会导致反序列化失败。

  在显示定义了serialVersionUID的情况下如果保证serialVersionUID的值序列化前后不变,则对成员变量的增加或减少都不会导致反序列化失败,但如果是对原有成员变量的定义进行了修改,如:public int a;变成了public Srting a; 则会导致反序列化失败,具体代码位于:java.io.ObjectStreamClass.matchFields(ObjectStreamField[], ObjectStreamClass) 方法,这个方法会判断序列化对象和jvm加载对象的属性类型是否一样。

分类: 高级民工 标签:

JQuery多个ready()方法执行顺序

2014年4月25日 没有评论

  JQuery.ready()方法传入一个function作为参数,一个页面中允许多个JQuery.ready()调用,在dom加载完毕后依照JQuery.ready()调用的先后顺序执行传入的function。

  如果想让某个JQuery.ready()里的function最后执行可以采用一个变通方法:

$(function(){
	$(function(){
		alert("last!")
	});
});

如果有其他代码里面使用了这种方式可以嵌套多个,这样就能达到最后执行的目的了。

分类: 高级民工 标签:

Oracle按天建立表分区

2013年11月26日 没有评论

创建语句如下:

CREATE TABLE t_log(
       id    NUMBER,
       log_name    VARCHAR(100)
       log_date DATE
)
partition BY range (log_date)
INTERVAL (NUMTODSINTERVAL(1,'day'))
(
         partition p1234 VALUES less than (to_date('2013-11-11','yyyy-mm-dd'))
);

查询表分区:

SELECT * FROM user_tab_partitions t WHERE t.TABLE_NAME = 'T_LOG' ORDER BY t.partition_name

删除表分区:

ALTER TABLE T_LOGDROP PARTITION SYS_P122

如果要为一个现存的表创建表分区,先创建一个表结构与之一样的新表,再把数据插入到新表中,最后重命名表名即可。(需要注意表重命名的时候表会有短暂的不可用,并且在一个操作频繁的表中进行这种操作也需要注意数据的完整性。)

分类: 高级民工 标签: