[本文出自天外归云的博客园]

前提

1、需要安装maven环境;

2、在本地创建maven项目并修改maven配置文件“pom.xml”,添加如下内容:

<dependency>
<groupId>com.atlassian.jira</groupId>
<artifactId>jira-rest-java-client</artifactId>
<version>0.5-m6</version>
</dependency>
<dependency>
<groupId>com.atlassian.util.concurrent</groupId>
<artifactId>atlassian-util-concurrent</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.sharegov/mjson -->
<dependency>
<groupId>org.sharegov</groupId>
<artifactId>mjson</artifactId>
<version>1.4.1</version>
</dependency>

以上三个依赖中,前两个是用来和jira进行交互的类库,最后一个是可以让我能够像在python中处理json一样处理json的mjson类库。

封装方法

对JIRA的操作进行简单封装,示例如下:

package com.mockCommon.util;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.joda.time.DateTime;
import com.atlassian.jira.rest.client.JiraRestClient;
import com.atlassian.jira.rest.client.NullProgressMonitor;
import com.atlassian.jira.rest.client.domain.BasicComponent;
import com.atlassian.jira.rest.client.domain.Comment;
import com.atlassian.jira.rest.client.domain.Issue;
import com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory;
import com.mockCommon.model.JiraInfoModel; import mjson.Json; public class JiraUtil { /**
* 登录JIRA并返回指定的JiraRestClient对象
*
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static JiraRestClient login_jira(String username, String password) throws URISyntaxException {
try {
final JerseyJiraRestClientFactory factory = new JerseyJiraRestClientFactory();
final URI jiraServerUri = new URI("http://jira.ms.netease.com");
final JiraRestClient restClient = factory.createWithBasicHttpAuthentication(jiraServerUri, username,
password);
return restClient;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取并返回指定的Issue对象
*
* @param issueNum
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static Issue get_issue(String issueNum, String username, String password) throws URISyntaxException {
try {
final JiraRestClient restClient = login_jira(username, password);
final NullProgressMonitor pm = new NullProgressMonitor();
final Issue issue = restClient.getIssueClient().getIssue(issueNum, pm);
return issue;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA备注部分的内容
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static List<String> get_comments_body(Issue issue) throws URISyntaxException {
try {
List<String> comments = new ArrayList<String>();
for (Comment comment : issue.getComments()) {
comments.add(comment.getBody().toString());
}
return comments;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的创建时间
*
* @param issueNum
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static DateTime get_create_time(Issue issue) throws URISyntaxException {
try {
return issue.getCreationDate();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的描述部分
*
* @param issueNum
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_description(Issue issue) throws URISyntaxException {
try {
return issue.getDescription();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的标题
*
* @param issueNum
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_summary(Issue issue) throws URISyntaxException {
try {
return issue.getSummary();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的报告人的名字
*
* @param issueNum
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_reporter(Issue issue) throws URISyntaxException {
try {
return issue.getReporter().getDisplayName();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的分派人的姓名列表
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static ArrayList<String> get_assignees(Issue issue) throws URISyntaxException {
try {
Json json = Json.read(issue.getFieldByName("分派给").getValue().toString());
Iterator<Json> assignees = json.asJsonList().iterator();
ArrayList<String> assigneesNames = new ArrayList<String>();
while (assignees.hasNext()) {
Json assignee = Json.read(assignees.next().toString());
String assigneeName = assignee.at("displayName").toString();
assigneesNames.add(assigneeName);
}
return assigneesNames;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的状态
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_status(Issue issue) throws URISyntaxException {
try {
return issue.getStatus().getName();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的类型
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_issue_type(Issue issue) throws URISyntaxException {
try {
return issue.getIssueType().getName();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的模块
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static ArrayList<String> get_modules(Issue issue) throws URISyntaxException {
try {
ArrayList<String> arrayList = new ArrayList<String>();
Iterator<BasicComponent> basicComponents = issue.getComponents().iterator();
while (basicComponents.hasNext()) {
String moduleName = basicComponents.next().getName();
arrayList.add(moduleName);
}
return arrayList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的前端人员的姓名列表
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static ArrayList<String> get_qianduans(Issue issue) throws URISyntaxException {
try {
ArrayList<String> qianduanList = new ArrayList<String>();
Json json = Json.read(issue.getFieldByName("前端").getValue().toString());
Iterator<Json> qianduans = json.asJsonList().iterator();
while (qianduans.hasNext()) {
Json qianduan = Json.read(qianduans.next().toString());
String qianduanName = qianduan.at("displayName").toString();
qianduanList.add(qianduanName);
}
return qianduanList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的开发的姓名列表
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static ArrayList<String> get_developers(Issue issue) throws URISyntaxException {
try {
ArrayList<String> developersList = new ArrayList<String>();
Json json = Json.read(issue.getFieldByName("开发").getValue().toString());
Iterator<Json> developers = json.asJsonList().iterator();
while (developers.hasNext()) {
Json developer = Json.read(developers.next().toString());
String developerName = developer.at("displayName").toString();
developersList.add(developerName);
}
return developersList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的产品人员的姓名
*
* @param issue
* @param username
* @param password
* @return
* @throws URISyntaxException
*/
public static String get_product(Issue issue) throws URISyntaxException {
try {
String product_field = issue.getFieldByName("产品人员").getValue().toString();
return Json.read(product_field).at("displayName").toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的UE开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_UE_start_time(Issue issue) throws URISyntaxException {
try {
String UE_start_time = issue.getFieldByName("UE开始时间").getValue().toString();
return UE_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的UE结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_UE_end_time(Issue issue) throws URISyntaxException {
try {
String UE_end_time = issue.getFieldByName("UE结束时间").getValue().toString();
return UE_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的UI开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_UI_start_time(Issue issue) throws URISyntaxException {
try {
String UI_start_time = issue.getFieldByName("UI开始时间").getValue().toString();
return UI_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的UI结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_UI_end_time(Issue issue) throws URISyntaxException {
try {
String UI_end_time = issue.getFieldByName("UI结束时间").getValue().toString();
return UI_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的客户端开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_app_start_time(Issue issue) throws URISyntaxException {
try {
String app_start_time = issue.getFieldByName("客户端开始时间").getValue().toString();
return app_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的客户端结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_app_end_time(Issue issue) throws URISyntaxException {
try {
String app_end_time = issue.getFieldByName("客户端结束时间").getValue().toString();
return app_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的前端开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_qianduan_start_time(Issue issue) throws URISyntaxException {
try {
String qianduan_start_time = issue.getFieldByName("前端开始时间").getValue().toString();
return qianduan_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的前端结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_qianduan_end_time(Issue issue) throws URISyntaxException {
try {
String qianduan_end_time = issue.getFieldByName("前端结束时间").getValue().toString();
return qianduan_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的开发开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_develop_start_time(Issue issue) throws URISyntaxException {
try {
String develop_start_time = issue.getFieldByName("开发开始时间").getValue().toString();
return develop_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的开发结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_develop_end_time(Issue issue) throws URISyntaxException {
try {
String develop_end_time = issue.getFieldByName("开发结束时间").getValue().toString();
return develop_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的联调开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_liantiao_start_time(Issue issue) throws URISyntaxException {
try {
String liantiao_start_time = issue.getFieldByName("联调开始时间").getValue().toString();
return liantiao_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的联调结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_liantiao_end_time(Issue issue) throws URISyntaxException {
try {
String liantiao_end_time = issue.getFieldByName("联调结束时间").getValue().toString();
return liantiao_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的测试开始时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_test_start_time(Issue issue) throws URISyntaxException {
try {
String test_start_time = issue.getFieldByName("测试开始时间").getValue().toString();
return test_start_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取指定JIRA的测试结束时间
*
* @param issue
* @return
* @throws URISyntaxException
*/
public static String get_test_end_time(Issue issue) throws URISyntaxException {
try {
String test_end_time = issue.getFieldByName("测试结束时间").getValue().toString();
return test_end_time;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取所有可以收集到的JIRA信息并返回JiraInfoModel类型对象
* @param issue
* @return
* @throws URISyntaxException
*/
public static JiraInfoModel get_jira_info(Issue issue) throws URISyntaxException {
List<String> jiraCommentsBody = get_comments_body(issue);
DateTime jiraCreateTime = get_create_time(issue);
String description = get_description(issue);
String summary = get_summary(issue);
String reporter = get_reporter(issue);
ArrayList<String> assignees = get_assignees(issue);
String status = get_status(issue);
String issueType = get_issue_type(issue);
ArrayList<String> modules = get_modules(issue);
ArrayList<String> qianduans = get_qianduans(issue);
ArrayList<String> developers = get_developers(issue);
String product = get_product(issue);
String UE_start_time = get_UE_start_time(issue);
String UE_end_time = get_UE_end_time(issue);
String UI_start_time = get_UI_start_time(issue);
String UI_end_time = get_UI_end_time(issue);
String app_start_time = get_app_start_time(issue);
String app_end_time = get_app_end_time(issue);
String qianduan_start_time = get_qianduan_start_time(issue);
String qianduan_end_time = get_qianduan_end_time(issue);
String develop_start_time = get_develop_start_time(issue);
String develop_end_time = get_develop_end_time(issue);
String liantiao_start_time = get_liantiao_start_time(issue);
String liantiao_end_time = get_liantiao_end_time(issue);
String test_start_time = get_test_start_time(issue);
String test_end_time = get_test_end_time(issue);
JiraInfoModel jiraInfoModel = new JiraInfoModel();
jiraInfoModel.setJiraCommentsBody(jiraCommentsBody);
jiraInfoModel.setJiraCreateTime(jiraCreateTime);
jiraInfoModel.setDescription(description);
jiraInfoModel.setSummary(summary);
jiraInfoModel.setReporter(reporter);
jiraInfoModel.setAssignees(assignees);
jiraInfoModel.setStatus(status);
jiraInfoModel.setIssueType(issueType);
jiraInfoModel.setModules(modules);
jiraInfoModel.setQianduans(qianduans);
jiraInfoModel.setDevelopers(developers);
jiraInfoModel.setProduct(product);
jiraInfoModel.setUE_start_time(UE_start_time);
jiraInfoModel.setUE_end_time(UE_end_time);
jiraInfoModel.setUI_start_time(UI_start_time);
jiraInfoModel.setUI_end_time(UI_end_time);
jiraInfoModel.setApp_start_time(app_start_time);
jiraInfoModel.setApp_end_time(app_end_time);
jiraInfoModel.setQianduan_start_time(qianduan_start_time);
jiraInfoModel.setQianduan_end_time(qianduan_end_time);
jiraInfoModel.setDevelop_start_time(develop_start_time);
jiraInfoModel.setDevelop_end_time(develop_end_time);
jiraInfoModel.setLiantiao_start_time(liantiao_start_time);
jiraInfoModel.setLiantiao_end_time(liantiao_end_time);
jiraInfoModel.setTest_start_time(test_start_time);
jiraInfoModel.setTest_end_time(test_end_time);
return jiraInfoModel;
} /**
* 测试函数
*
* @param args
* @throws URISyntaxException
*/
public static void main(String[] args) throws URISyntaxException {
String username = "用户名";
String password = "密码";
String issueNum = "JIRA号";
final Issue issue = get_issue(issueNum, username, password);
JiraInfoModel jiraInfoModel = get_jira_info(issue);
System.out.println(jiraInfoModel.getSummary());
} }

对应需要创建model类,JiraInfoModel类,包含所有收集到的数据:

package com.mockCommon.model;

import java.util.ArrayList;
import java.util.List; import org.joda.time.DateTime; public class JiraInfoModel {
List<String> jiraCommentsBody;
DateTime jiraCreateTime;
String description;
String summary;
String reporter;
ArrayList<String> assignees;
String status;
String issueType;
ArrayList<String> modules;
ArrayList<String> qianduans;
ArrayList<String> developers;
String product;
String start_develop_time;
String UE_start_time;
String UE_end_time;
String UI_start_time;
String UI_end_time;
String app_start_time;
String app_end_time;
String qianduan_start_time;
String qianduan_end_time;
String develop_start_time;
String develop_end_time;
String liantiao_start_time;
String liantiao_end_time;
String test_start_time;
String test_end_time; public List<String> getJiraCommentsBody() {
return jiraCommentsBody;
} public void setJiraCommentsBody(List<String> jiraCommentsBody) {
this.jiraCommentsBody = jiraCommentsBody;
} public DateTime getJiraCreateTime() {
return jiraCreateTime;
} public void setJiraCreateTime(DateTime jiraCreateTime) {
this.jiraCreateTime = jiraCreateTime;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public String getSummary() {
return summary;
} public void setSummary(String summary) {
this.summary = summary;
} public String getReporter() {
return reporter;
} public void setReporter(String reporter) {
this.reporter = reporter;
} public ArrayList<String> getAssignees() {
return assignees;
} public void setAssignees(ArrayList<String> assignees) {
this.assignees = assignees;
} public String getStatus() {
return status;
} public void setStatus(String status) {
this.status = status;
} public String getIssueType() {
return issueType;
} public void setIssueType(String issueType) {
this.issueType = issueType;
} public ArrayList<String> getModules() {
return modules;
} public void setModules(ArrayList<String> modules) {
this.modules = modules;
} public ArrayList<String> getQianduans() {
return qianduans;
} public void setQianduans(ArrayList<String> qianduans) {
this.qianduans = qianduans;
} public ArrayList<String> getDevelopers() {
return developers;
} public void setDevelopers(ArrayList<String> developers) {
this.developers = developers;
} public String getProduct() {
return product;
} public void setProduct(String product) {
this.product = product;
} public String getStart_develop_time() {
return start_develop_time;
} public void setStart_develop_time(String start_develop_time) {
this.start_develop_time = start_develop_time;
} public String getUE_start_time() {
return UE_start_time;
} public void setUE_start_time(String uE_start_time) {
UE_start_time = uE_start_time;
} public String getUE_end_time() {
return UE_end_time;
} public void setUE_end_time(String uE_end_time) {
UE_end_time = uE_end_time;
} public String getUI_start_time() {
return UI_start_time;
} public void setUI_start_time(String uI_start_time) {
UI_start_time = uI_start_time;
} public String getUI_end_time() {
return UI_end_time;
} public void setUI_end_time(String uI_end_time) {
UI_end_time = uI_end_time;
} public String getApp_start_time() {
return app_start_time;
} public void setApp_start_time(String app_start_time) {
this.app_start_time = app_start_time;
} public String getApp_end_time() {
return app_end_time;
} public void setApp_end_time(String app_end_time) {
this.app_end_time = app_end_time;
} public String getQianduan_start_time() {
return qianduan_start_time;
} public void setQianduan_start_time(String qianduan_start_time) {
this.qianduan_start_time = qianduan_start_time;
} public String getQianduan_end_time() {
return qianduan_end_time;
} public void setQianduan_end_time(String qianduan_end_time) {
this.qianduan_end_time = qianduan_end_time;
} public String getDevelop_start_time() {
return develop_start_time;
} public void setDevelop_start_time(String develop_start_time) {
this.develop_start_time = develop_start_time;
} public String getDevelop_end_time() {
return develop_end_time;
} public void setDevelop_end_time(String develop_end_time) {
this.develop_end_time = develop_end_time;
} public String getLiantiao_start_time() {
return liantiao_start_time;
} public void setLiantiao_start_time(String liantiao_start_time) {
this.liantiao_start_time = liantiao_start_time;
} public String getLiantiao_end_time() {
return liantiao_end_time;
} public void setLiantiao_end_time(String liantiao_end_time) {
this.liantiao_end_time = liantiao_end_time;
} public String getTest_start_time() {
return test_start_time;
} public void setTest_start_time(String test_start_time) {
this.test_start_time = test_start_time;
} public String getTest_end_time() {
return test_end_time;
} public void setTest_end_time(String test_end_time) {
this.test_end_time = test_end_time;
}
}

以上代码中在get_assignees()方法部分用到了mjson中的Json对象,也是主要用来处理json格式的对象。

代码中“用户名”、“密码”、“JIRA号”部分为需要替换的部分。

另外,对于通过jql查询的封装如下:

/**
* 通过jql语句进行查询并返回一个包含issue的key的数组
*
* @param username 登录JIRA的用户名
* @param password 登录JIRA的用户密码
* @param current_user_name 要查询的用户名
* @param jql
* @return
* @throws URISyntaxException
*/
public static ArrayList<String> search_jql(String username, String password, String current_user_name, String jql)
throws URISyntaxException {
final JiraRestClient restClient = login_jira(username, password);
final NullProgressMonitor pm = new NullProgressMonitor();
SearchResult searchResult = restClient.getSearchClient().searchJql(jql, pm);
Iterator<BasicIssue> basicIssues = searchResult.getIssues().iterator();
ArrayList<String> issueKeys = new ArrayList<>();
while (basicIssues.hasNext()) {
String issueKey = basicIssues.next().getKey();
System.out.println(issueKey);
issueKeys.add(issueKey);
}
return issueKeys;
}

上面这些是基本的例子,后续我又针对实际应用做了很多修改。基于这些封装,再用上Spring MVC框架,我做了一个基于JIRA开发的质量保障平台。

Github地址:https://github.com/OuterCloud/JiraHelper

例图1:

例图2:

JIRA REST java client API实际应用的更多相关文章

  1. JIRA Rest JAVA Client API实现问题管理及自定义字段(原创)

    JIRA是一个缺陷跟踪管理系统,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域,当我们需要把第三方业务系统集成进来时,可以调用他的API. JIRA本身的A ...

  2. Memcached Java Client API详解

    针对Memcached官方网站提供的java_memcached-release_2.0.1版本进行阅读分析,Memcached Java客户端lib库主要提供的调用类是SockIOPool和MemC ...

  3. ES系列十五、ES常用Java Client API

    一.简介 1.先看ES的架构图 二.ES支持的客户端连接方式 1.REST API http请求,例如,浏览器请求get方法:利用Postman等工具发起REST请求:java 发起httpClien ...

  4. Java 9 揭秘(14. HTTP/2 Client API)

    Tips 做一个终身学习的人. 在此章中,主要介绍以下内容: 什么是HTTP/2 Client API 如何创建HTTP客户端 如何使HTTP请求 如何接收HTTP响应 如何创建WebSocket的e ...

  5. Elasticsearch Java Rest Client API 整理总结 (一)——Document API

    目录 引言 概述 High REST Client 起步 兼容性 Java Doc 地址 Maven 配置 依赖 初始化 文档 API Index API GET API Exists API Del ...

  6. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  7. Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries

    目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...

  8. JAVA HDFS API Client 连接HA

    如果Hadoop开启HA,那么用Java Client连接Hive的时候,需要指定一些额外的参数 package cn.itacst.hadoop.hdfs; import java.io.FileI ...

  9. Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新Client API的使用要点,高可用性测试,以及各种坑 (转载)

    Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建.高可用性.新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑. 关于K ...

随机推荐

  1. mysql my.cnf 配置建议

    mysql的配置文件是/etc/my.cnf,通过修改它来配置mysql. /etc/my.cnf来自以下文件: 如果你的内存≤64M,则复制/usr/local/share/mysql/my-sma ...

  2. C语言学习笔记 (008) - C语言字符串操作总结大全(超详细)(转)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  3. Redis 学习之路 (010) - redis命令手册

    Redis 键(key) 命令 命令 描述 Redis DEL 命令 该命令用于在 key 存在是删除 key. Redis Dump 命令 序列化给定 key ,并返回被序列化的值. Redis E ...

  4. System.ComponentModel.DataAnnotations.Schema 冲突

    System.ComponentModel.DataAnnotations.Schema 冲突 Entity Framework 与 .net4.5 的 System.ComponentModel.D ...

  5. Swift 类

    1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...

  6. Android Studio多Module开发需要注意的问题

    多module开发,其中的一个为入口module,其他module为独立的“应用”(library) 1.在原有的项目导入另外个项目的module为主项目的次module,即在A项目中添加一个启动B项 ...

  7. 【转】Tesla Model X的车门设计问题

    Tesla Model X的车门设计问题 Tesla即将推出的SUV(Model X),不但继承了以上提到的Model S的各种问题(触摸屏,门把,……),而且还制造了新的问题.Model X具有一个 ...

  8. mongodb及mongoclient在win7下的编译和使用

    1.导言 折腾mongodb几个小时最终有结果了.呃.如今就简单总结一下. 事实上我的需求非常easy,就是在C++代码中调用mongodb的库函数.也就是要得到mongoclient.lib.本来想 ...

  9. mfc怎么显示jpg png图像

    如果是VS2005以上版本可以直接使用MFC自带的CImage类,如果不是可以用网上比较流行的CxImage,或者使用GDI+

  10. asp.net C#取Excel 合并单元格内容

    asp教程.net c#取excel 合并单元格内容读取excel数据,填充dataset// 连接字符串 string xlspath = server.mappath("~/www.11 ...