??xml version="1.0" encoding="utf-8" standalone="yes"?> Java bean对象定义Q?/p>
Jenkins - 插g理 可选插件tab下安装publish over ssh插g。用于Jenkins服务器ssh传输文g到Linux服务器?br />安装好publish over ssh插g后,到Jenkins - 配置?publish over ssh设|相关上传Linux服务器信息?br />
Jenkins ssh key的生成网上有很多资料Q不再过多介l。我是用的Passphrase, d验证key或者passphrase方式可以二选一Q可Ҏ具体情况选择?br />
ssh server讄Q?br />l一配置发布文g的Linux服务器,如下图?br />
其中 remote directory 表示发布文g到服务器的默认目录。若为空默认为当前登录用L录?br />
4.目发布
本文以svn的订单order目ZQ通过Jenkins工具Q经q编?打包-上传-发布q程Q动态的java jar发布C台服务器?br />4.1 新徏d
Jenkins - 新徏dQ创建order发布的一个Q务。由于项目是Zmaven的,所以选择'构徏一个maven目'q入配置面?br />
配置svn代码库信息:
post stepsQ配|发布服务器的信息。如下图?br />
׃order订单服务是集部|Ԍ分别讄??ssh server?br />source files 是指上传到服务器的发布文件。Jenkins默认~译后文件在workspace目录下,q里输入target/{发布jar文g}. 上传到发布服务器后,不需要target目录Q所?remove prefix中填target/?
Remote directory可以为空Q由于我们在W?步中已经讄了全局默认ssh server的remote directory Q所以这里可以不填,如这里设|将覆盖之前的全局配置目录?br />exec command是文件上传到发布服务器后Q需要执行的shell脚本指oQ用于发布order jar包的启动备䆾命o。图中app-deploy.sh为应用jar文g的启动备份shell脚本文gQ需攑ֈ发布服务器指定目录下。其中BUILD_ID=DONTKILLME是ؓ了kill 老的q行jar旉免当前执行进E不被误杀?br />
app-deploy.sh文gQ?br />
## java env
## service name
SERVICE_NAME=$1
SERVICE_DIR=/usr/service/
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
#function start
start(){
cd $SERVICE_DIR
source /etc/profile
## nohup java -Xms256m -Xmx512m -jar $JAR_NAME >log/$SERVICE_NAME.out 2>&1 &
nohup java -jar -Xms256m -Xmx256m $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "#### start $SERVICE_NAME"
}
# function stop
stop(){
cd $SERVICE_DIR
if [ -f "$SERVICE_DIR/$PID" ]; then
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
fi
echo "#### stop $SERVICE_NAME"
sleep 3
PROCESS=`ps -ef|grep $JAR_NAME |grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
echo "Kill the $SERVICE_NAME process [ $i ]"
kill -9 $i
done
}
# function clean
clean(){
echo "---start do do clean phase."
cd $SERVICE_DIR
if [ ! -d "lastDeploy" ]; then
mkdir lastDeploy
fi
if [ -f "$JAR_NAME" ]; then
echo "backup $JAR_NAME"
mv $JAR_NAME lastDeploy/$JAR_NAME\_`date "+%Y%m%d%H%M%S"`
fi
if [ -d "tmp" ]; then
mv -f tmp/$JAR_NAME ./
fi
}
case "$2" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
echo "#### restart $SERVICE_NAME"
;;
clean)
stop
sleep 2
clean
echo "#### clean $SERVICE_NAME"
;;
deploy)
stop
clean
start
echo "#### deploy $SERVICE_NAME"
;;
esac
exit 0
]]>
]]>
djar包外的方法逻辑:通过获取cL件所在code source的\径来定位jar包\径。然后由"jar包\?配置文g?的方式取得对应属性文件?br />
2 * 取类对应source源目录\?br /> 3 * @param clazz
4 * @author qiang.dai
5 * @return
6 */
7 public static String getCodeSourcePath(Class clazz) {
8 URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
9 String path = url.getPath();
10 try {
11 if (path.toUpperCase().endsWith(".JAR")) {
12 int index = path.lastIndexOf("/");
13 path = path.substring(0, index);
14 }
15 return java.net.URLDecoder.decode(path, "UTF-8");
16 } catch (UnsupportedEncodingException e) {
17 e.printStackTrace();
18 return "";
19 }
20 }
d配置文g:
2 try {
3 String classPath = URLUtil.getCodeSourcePath(ConfigManager.class);
4 Properties prop = new Properties();
5 // System.out.println("path="+classPath+File.separator+CONFIG_FILE_NAME);
6 prop.load(new FileReader(new File(new File(classPath),CONFIG_FILE_NAME)));
7 initConfigs(prop);
8 } catch (Exception e) {
9 System.out.println(String.format("******初始化配|文件失?h查文件[%s]在当前目录下存在******", CONFIG_FILE_NAME));
10 e.printStackTrace();
11 throw new RuntimeException(e);
12 }
13 }
]]>
2 * poi解析excel sample
3 * 针对2007及以上版?nbsp;使用XSSF解析
4 * @throws EncryptedDocumentException
5 * @throws InvalidFormatException
6 * @throws IOException
7 */
8 public void parseExcel() throws EncryptedDocumentException, InvalidFormatException, IOException{
9 InputStream is = new FileInputStream("e:\\excel.xlsx");
10 Workbook workbook = WorkbookFactory.create(is);
11 Sheet sheet = null;
12 for (int i = 0; i < workbook.getNumberOfSheets(); i++) {// 获取每个Sheet?/span>
13 sheet = workbook.getSheetAt(i);
14 String sheetName = sheet.getSheetName();
15 if(workbook.isSheetHidden(i)){
16 //判断sheet|否被隐藏
17 System.out.println("sheet="+sheetName+", is hidden.");
18 continue;
19 }
20 for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {// 获取每行
21 if(j==0) //W一行titleQ不处理
22 continue;
23 Row row = sheet.getRow(j);
24 if(row == null)
25 continue;
26 //处理每行数据
27 try {
28 if(row.getZeroHeight()){
29 //行是否被隐藏
30 System.out.println("---Sheet表["+sheetName+"],W? + j + "行被隐藏Q不处理---");
31 continue;
32 }
33 int columns = row.getPhysicalNumberOfCells();
34 for(int c=0;c<columns;c++){
35 Cell cell = row.getCell(c);
36 //TODO: busyness process
37 }
38 } catch (Exception e) {
39 System.out.println("---Sheet表["+sheetName+"],W? + j + "行处理出?img src="http://www.aygfsteel.com/Images/dot.gif" alt="" />.---");
40 e.printStackTrace();
41 throw new RuntimeException(e);
42 }
43
44 System.out.println("---Sheet表["+sheetName+"],W? + j + "行处理完?--");
45 }
46 }
47 }
]]>/**
* Post Http request with XML parameter
* @param requestUrl
* @param xmlData request xml parameter
* @param contentType such as "application/xml"
* @param charset such as "UTF-8" or "GBK"
* @return
*/
public static HttpRespondResult postXmlRequest(String requestUrl, String xmlData, String contentType, String charset){
HttpRespondResult revObj = new HttpRespondResult();
//init PostMethod object.
PostMethod post = new PostMethod(requestUrl);
try {
//wrape the request entity.
RequestEntity requestEntity = new StringRequestEntity(xmlData, contentType, charset);
post.setRequestEntity(requestEntity);
HttpClient httpClient = new HttpClient();
// send the post http request and reture status code.
int statusCode = httpClient.executeMethod(post);
// get reture content from server side.
String bodyContent = post.getResponseBodyAsString();
// populate the reture values to vo.
revObj.setStatusCode(statusCode);
revObj.setRespondbodyContent(bodyContent);
} catch (UnsupportedEncodingException e) {
revObj.handleExceptionMsg(e);
e.printStackTrace();
}catch (HttpException e) {
revObj.handleExceptionMsg(e);
e.printStackTrace();
} catch (IOException e) {
revObj.handleExceptionMsg(e);
e.printStackTrace();
} catch (Exception e){
revObj.handleExceptionMsg(e);
e.printStackTrace();
}finally {
//close the connection.
post.releaseConnection();
}
return revObj;
}
]]>/**
* 促销xml对象c?nbsp;
* @author daiqiang
* 对应xml文g内容如下Q?br />
* <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<promotion>
<id>promotionId</id>
<name>元旦促销</name>
<type>CMS</type>
<typeDes>CMSL促销</typeDes>
<startTime>2012-01-01</startTime>
<endTime>2012-01-03</endTime>
<products>
<product>
<merchantId>merchantid</merchantId>
<num>500</num>
<productCode>code1</productCode>
<productId>111</productId>
<requestId>codedata</requestId>
</product>
<product>
<merchantId>merchantid2</merchantId>
<num>800</num>
<productCode>code2</productCode>
<productId>2</productId>
<requestId>codedata</requestId>
</product>
</products>
</promotion>
*
*/
@XmlRootElement(name="promotion")
@XmlAccessorType(XmlAccessType.FIELD)
public class Promotion implements Serializable{
private static final long serialVersionUID = 870036805093867083L;
private String id;
private String name;
private String type;
private String typeDes;
private String startTime;
private String endTime;
@XmlElementWrapper(name="products")
@XmlElement(name="product")
private List<Product> products;
/*@XmlTransient
the field is not binded to xml
private String testHiddenFields;*/
//此处省略具体set get Ҏ?br />
说明Q上文定义了一个促销对象c?/span>Promotion.
cL注表C:
@XmlRootElementQ用于定义该对象映射?/span>xml根节点元素名Q默认与cd一致。可通过@XmlRootElement(name="otherRootElement")方式指定具体名称?/span>
@XmlAccessorType: 用于标识?/span>java对象?/span>xml映射的访问方式。有如下属性倹{?/span>
PROPERTY/FIELD/PUBLIC_MEMBER/NONE
PROPERTY: 所?/span>set/getҎ对将被映ؓxml元素.除非?/span>XmlTransient标注例外.
FIELD:所有对象属性将被映ؓxml元素。除非被XmlTransient标注例外.
PUBLIC_MEMBERQ?/span>每个public?/span>get/setҎ法或public field被映射?/span>xml元素。除非被XmlTransient标注例外.
NONEQ?/span>没有fields ?/span> property被映,除非昄指定具体fields?/span>property?/span>
属性标注表C:
@XmlTransient:指对应属性不?/span>xml映射?/span>
@XmlElement(name="product")Q指定属性映时对应xml元素名称
@XmlElementWrapper(name="products")Q在某些场景下,需要对映射的属性做包装处理。如例子?/span>products List对象属性,?/span>xml中我惛_映射Ҏ有的product元素再做一?/span>products 元素包装Q如下所C,可以按此种方式实现?/span>
<products>
<product> … </product>
<product> … </product>
…
</products>
Java?/span>xml映射Ҏ
Java对象?/span>XML
XML?/span>Java对象