<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    #

    SPRING BATCH 運行機制

    JOB的XML配置相當于命令模式中的一個命令,每次運行,會生成一個JOB INSTANCE,同時也會生成一個JOB EXCETION,JOB INSTANCE表示有一個JOB,JOB EXECUTION表示進行第一次嘗試。失敗運行的JOB再次運行時,只生成一個JOB EXCETION,表示進行的第二次嘗試。當SPRING BATCH JOB引擎接到運行請求時,有以下幾種情況:@import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

    1. 判斷此JOB以前是否有運行過,判斷依據:根據JOB NAME和JOB PARAMETERS信息去這兩張表查找,如找到記錄,則是有運行過,如確定有則引擎退出并提示。


    2. 判斷是否有重復運行的JOB,如果沒,查找此JOB上次運行的情況,如果有FAIL的情況,則重新從上次失敗的地方運行繼續運行,判斷根據:根據JOB INSTANCE關聯的JOB EXECUTION查找是否有狀態為FAIL的記錄,如有則是,就新建一個JOB EXECUTION表示進行第二次嘗試,同時又生成關于新JOB的JOB EXECUTION。上次的JOB運行完后,再運行此次新JOB。判斷上次失敗的STEP的依據:查找對應的JOB EXECUTON的STEP EXECUTON狀態為FAIL的STEP即可,會從此步驟開始運行,而不是從第一步開始運行。

    參考文檔:
    http://static.springsource.org/spring-batch/reference/html/domain.html#domainJobInstance

    posted @ 2012-10-20 11:57 paulwong 閱讀(943) | 評論 (0)編輯 收藏

    JAVA正則表達式

    public class FindA{
    public static void main(String args[])
    throws Exception{

    String candidate =
    "A Matcher examines the results of applying a pattern.";
    String regex = "\\ba\\w*\\b";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(candidate);
    String val = null;
    System.out.println("INPUT: " + candidate);
    System.out.println("REGEX: " + regex +"\r\n");
    while (m.find()){
    val = m.group();
    System.out.println("MATCH: " + val);
    }
    if (val == null) {
    System.out.println("NO MATCHES: ");
    }
    }
    }



    \b表示單詞的邊界,w表示任意的可構成單詞的字母數字,*表示前面的字母(當然可以
    是更復雜的組之類的了東東)重復0次或0次以上,a當然還是a了。所以這個regex就
    匹配單詞開頭為a的單詞了。
    二、下面總結一下基本的正則表達式的meta character以及它們含義:
    . 匹配任意一個字符 $ 匹配一行的結尾 ^ 匹配一行的開頭(在[]里面表示否定)
    {} 定義了一個范圍  [] 定義了一個字符類 () 定義了一個組
    *前面出現0次以上 + 前面匹配一次以上 ?前面出現0次或一次  
    \ 后面的字符不會看作metacharacter \w 字母數字下劃線 \W 非字母數字下劃線
    \d 單個數字 \D單個非數字 | 或,二者之一 &&與操作符 \b單詞邊界
    下面看看幾個簡單的例子:
    [abc] a、b 或 c(簡單類)
    [^abc] 任何字符,除了a、b 或 c(否定)
    [a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(范圍)
    [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
    [a-z&&[def]] d、e 或 f(交集)
    [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
    [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)



    \\ 反斜杠
    \t 間隔 ('\u0009')
    \n 換行 ('\u000A')
    \r 回車 ('\u000D')
    \d 數字 等價于[0-9]
    \D 非數字 等價于[^0-9]
    \s 空白符號 [\t\n\x0B\f\r]
    \S 非空白符號 [^\t\n\x0B\f\r]
    \w 單獨字符 [a-zA-Z_0-9]
    \W 非單獨字符 [^a-zA-Z_0-9]
    \f 換頁符
    \e Escape
    \b 一個單詞的邊界
    \B 一個非單詞的邊界
    \G 前一個匹配的結束

    ^為限制開頭
    ^java 條件限制為以Java為開頭字符
    $為限制結尾
    java$ 條件限制為以java為結尾字符
    . 條件限制除\n以外任意一個單獨字符
    java.. 條件限制為java后除換行外任意兩個字符


    加入特定限制條件「[]」
    [a-z] 條件限制在小寫a to z范圍中一個字符
    [A-Z] 條件限制在大寫A to Z范圍中一個字符
    [a-zA-Z] 條件限制在小寫a to z或大寫A to Z范圍中一個字符
    [0-9] 條件限制在小寫0 to 9范圍中一個字符
    [0-9a-z] 條件限制在小寫0 to 9或a to z范圍中一個字符
    [0-9[a-z]] 條件限制在小寫0 to 9或a to z范圍中一個字符(交集)

    []中加入^后加再次限制條件「[^]」
    [^a-z] 條件限制在非小寫a to z范圍中一個字符
    [^A-Z] 條件限制在非大寫A to Z范圍中一個字符
    [^a-zA-Z] 條件限制在非小寫a to z或大寫A to Z范圍中一個字符
    [^0-9] 條件限制在非小寫0 to 9范圍中一個字符
    [^0-9a-z] 條件限制在非小寫0 to 9或a to z范圍中一個字符
    [^0-9[a-z]] 條件限制在非小寫0 to 9或a to z范圍中一個字符(交集)

    在限制條件為特定字符出現0次以上時,可以使用「*」
    J* 0個以上J
    .* 0個以上任意字符
    J.*D J與D之間0個以上任意字符

    在限制條件為特定字符出現1次以上時,可以使用「+」
    J+ 1個以上J
    .+ 1個以上任意字符
    J.+D J與D之間1個以上任意字符

    在限制條件為特定字符出現有0或1次以上時,可以使用「?」
    JA? J或者JA出現

    限制為連續出現指定次數字符「{a}」
    J{2} JJ
    J{3} JJJ
    文字a個以上,并且「{a,}」
    J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存)
    文字個以上,b個以下「{a,b}」
    J{3,5} JJJ或JJJJ或JJJJJ
    兩者取一「|」
    J|A J或A
    Java|Hello Java或Hello

    「()」中規定一個組合類型
    比如,我查詢<a href=\"index.html\">index</a>中<a href></a>間的數據,可寫作<a.*href=\".*\">(.+?)</a>

    在使用Pattern.compile函數時,可以加入控制正則表達式的匹配行為的參數:
    Pattern Pattern.compile(String regex, int flag)

    flag的取值范圍如下:
    Pattern.CANON_EQ 當且僅當兩個字符的"正規分解(canonical decomposition)"都完全相同的情況下,才認定匹配。比如用了這個標志之后,表達式"a\u030A"會匹配"?"。默認情況下,不考慮"規 范相等性(canonical equivalence)"。
    Pattern.CASE_INSENSITIVE(?i) 默認情況下,大小寫不明感的匹配只適用于US-ASCII字符集。這個標志能讓表達式忽略大小寫進行匹配。要想對Unicode字符進行大小不明感的匹 配,只要將UNICODE_CASE與這個標志合起來就行了。
    Pattern.COMMENTS(?x) 在這種模式下,匹配時會忽略(正則表達式里的)空格字符(譯者注:不是指表達式里的"\\s",而是指表達式里的空格,tab,回車之類)。注釋從#開始,一直到這行結束。可以通過嵌入式的標志來啟用Unix行模式。
    Pattern.DOTALL(?s) 在這種模式下,表達式'.'可以匹配任意字符,包括表示一行的結束符。默認情況下,表達式'.'不匹配行的結束符。
    Pattern.MULTILINE
    (?m) 在這種模式下,'^'和'$'分別匹配一行的開始和結束。此外,'^'仍然匹配字符串的開始,'$'也匹配字符串的結束。默認情況下,這兩個表達式僅僅匹配字符串的開始和結束。
    Pattern.UNICODE_CASE
    (?u) 在這個模式下,如果你還啟用了CASE_INSENSITIVE標志,那么它會對Unicode字符進行大小寫不明感的匹配。默認情況下,大小寫不敏感的匹配只適用于US-ASCII字符集。
    Pattern.UNIX_LINES(?d) 在這個模式下,只有'\n'才被認作一行的中止,并且與'.','^',以及'$'進行匹配。


    拋開空泛的概念,下面寫出幾個簡單的Java正則用例:

    ◆比如,在字符串包含驗證時

    //查找以Java開頭,任意結尾的字符串
    Pattern pattern = Pattern.compile("^Java.*");
    Matcher matcher = pattern.matcher("Java不是人");
    boolean b= matcher.matches();
    //當條件滿足時,將返回true,否則返回false
    System.out.println(b);


    ◆以多條件分割字符串時
    Pattern pattern = Pattern.compile("[, |]+");
    String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
    for (int i=0;i<strs.length;i++) {
    System.out.println(strs[i]);
    }

    ◆文字替換(首次出現字符)
    Pattern pattern = Pattern.compile("正則表達式");
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
    //替換第一個符合正則的數據
    System.out.println(matcher.replaceFirst("Java"));

    ◆文字替換(全部)
    Pattern pattern = Pattern.compile("正則表達式");
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
    //替換第一個符合正則的數據
    System.out.println(matcher.replaceAll("Java"));


    ◆文字替換(置換字符)
    Pattern pattern = Pattern.compile("正則表達式");
    Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World ");
    StringBuffer sbr = new StringBuffer();
    while (matcher.find()) {
    matcher.appendReplacement(sbr, "Java");
    }
    matcher.appendTail(sbr);
    System.out.println(sbr.toString());

    ◆驗證是否為郵箱地址

    String str="ceponline@yahoo.com.cn";
    Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    System.out.println(matcher.matches());

    ◆去除html標記
    Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
    Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");
    String string = matcher.replaceAll("");
    System.out.println(string);

    ◆查找html中對應條件字符串
    Pattern pattern = Pattern.compile("href=\"(.+?)\"");
    Matcher matcher = pattern.matcher("<a href=\"index.html\">主頁</a>");
    if(matcher.find())
    System.out.println(matcher.group(1));
    }

    ◆截取http://地址
    //截取url
    Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
    Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
    StringBuffer buffer = new StringBuffer();
    while(matcher.find()){
    buffer.append(matcher.group());
    buffer.append("\r\n");
    System.out.println(buffer.toString());
    }

    ◆替換指定{}中文字

    String str = "Java目前的發展史是由{0}年-{1}年";
    String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};
    System.out.println(replace(str,object));

    public static String replace(final String sourceString,Object[] object) {
    String temp=sourceString;
    for(int i=0;i<object.length;i++){
    String[] result=(String[])object[i];
    Pattern pattern = Pattern.compile(result[0]);
    Matcher matcher = pattern.matcher(temp);
    temp=matcher.replaceAll(result[1]);
    }
    return temp;
    }


    ◆以正則條件查詢指定目錄下文件

    //用于緩存文件列表
    private ArrayList files = new ArrayList();
    //用于承載文件路徑
    private String _path;
    //用于承載未合并的正則公式
    private String _regexp;

    class MyFileFilter implements FileFilter {

    /**
    * 匹配文件名稱
    */
    public boolean accept(File file) {
    try {
    Pattern pattern = Pattern.compile(_regexp);
    Matcher match = pattern.matcher(file.getName());
    return match.matches();
    } catch (Exception e) {
    return true;
    }
    }
    }

    /**
    * 解析輸入流
    * @param inputs
    */
    FilesAnalyze (String path,String regexp){
    getFileName(path,regexp);
    }

    /**
    * 分析文件名并加入files
    * @param input
    */
    private void getFileName(String path,String regexp) {
    //目錄
    _path=path;
    _regexp=regexp;
    File directory = new File(_path);
    File[] filesFile = directory.listFiles(new MyFileFilter());
    if (filesFile == null) return;
    for (int j = 0; j < filesFile.length; j++) {
    files.add(filesFile[j]);
    }
    return;
    }

    /**
    * 顯示輸出信息
    * @param out
    */
    public void print (PrintStream out) {
    Iterator elements = files.iterator();
    while (elements.hasNext()) {
    File file=(File) elements.next();
    out.println(file.getPath());
    }
    }

    public static void output(String path,String regexp) {

    FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
    fileGroup1.print(System.out);
    }

    public static void main (String[] args) {
    output("C:\\","[A-z|.]*");
    } @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

    posted @ 2012-10-20 11:26 paulwong 閱讀(387) | 評論 (0)編輯 收藏

    spring integration同步數據庫數據

         摘要: 需求為:當客戶已有系統的數據被同步到我方數據庫后,若再有新數據,只同步新數據到我方數據庫。解決:因為客戶的業務表是不能變動的,我方在客戶數據庫中新建一狀態表,記錄哪些數據被更新過。當客戶業務表有新數據插入時,用觸發器將新數據id插入到狀態表。為方便實例:業務表pp,狀態表status結構為:pp: Code highlighting produced by Actipro CodeHighli...  閱讀全文

    posted @ 2012-10-17 11:50 paulwong 閱讀(2325) | 評論 (1)編輯 收藏

    SPRING INTEGRATION + SPRING BATCH

         摘要: SPRING INTEGRATION的強項是事件驅動,但捕獲之后,要做的事是觸發一個類的方法,對于要處理大數據量的文件,就沒有辦法了,如讀取1w條記錄,然后插入數據庫。而這個正是SPRING BATCH的強項所在,因此有必要將此兩個框架整合起來用。 場景:盯著一個文件夾,如果一有文件,此文件可能非常大的,則啟動一個BATCH JOB來處理。 文件拉取器,監控文件夾一有新...  閱讀全文

    posted @ 2012-10-16 00:11 paulwong 閱讀(5480) | 評論 (7)編輯 收藏

    蘋果資源

    http://bbs.weiphone.com/read-htm-tid-5170172.html

    http://bbs.weiphone.com/read-htm-tid-5352738.html

    http://www.appletuan.com/

    posted @ 2012-10-14 00:32 paulwong 閱讀(277) | 評論 (0)編輯 收藏

    Quartz 中的任務開始、暫停和繼續

         摘要: 第一個TASK:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->package com.paul.springbatchtest.tasklet;import org.quartz.SchedulerException;public class Tas...  閱讀全文

    posted @ 2012-10-13 16:18 paulwong 閱讀(3994) | 評論 (1)編輯 收藏

    Spring 3.0的任務調度

    Spring3.0以后,自己已經完全支持更加精確的時間,而不需要Quartz(Quartz是一個開放源碼項目,專注于任務調度器,提供了極為廣泛的特性如持久化任務,集群和分布式任務等。Spring對Quartz的集成與其對JDK Timer的集成在任務、觸發器和調度計劃的聲明式配置方面等都非常相似。 )的支持:當然后面我們也會用Quartz實現任務的調度。

    Spring3.0同樣也使用cron表達式。與Quartz不同的是,Spring3.0不支持年,而Quartz支持年。但這點好象并不是非常重要。

    cron表達式:-是用空格分開的時間字段,不使用年。
    *(秒0-59)    
    *(分鐘0-
    59)  
    *(小時0-
    23)  
    *(日期1-
    31)  
    *(月份1-12或是JAN-DEC)  
    *(星期1-7或是SUN-SAT)  

    示例: 
    */
    5  * * * * 6-7  :: 每個周6到周日,每隔5秒鐘執行一次。
     
    */
    1 * * 7-9 1-2 1-7 :: 1月到2月中的7號到9號,且必須要滿足周一到周日,每隔1秒鐘執行一次。 

    */
    1 * * 7-9 1,5 1-7  :: 注意里面的,(逗號),只有1月和5月的7到9號,且必須要滿足周一到周日,每一秒鐘執行一次。 

    */
    1 17-59 * 7-9 1,5 1-7 :: 只解釋17-59,是指從第17分鐘到第59分鐘,在指定的時間內,每一秒種執行一次 

    17-59 * 7-9 1,5 1-7  :: 此代碼的功能與上面完全相同。如果不寫秒即為每一秒執行一次。 

      59
     19-23 * 7-9 1,5 1-7  :: 19分-23分的每59秒鐘時只執行一次。 

      59 19,26 * 7-9 1,5 1-7  :: 注意里面的,(逗號),是指只有19分或是26分的56秒鐘時執行一次。 

      * * 
    16-23 7-9 1,5 1-7  :: 定義每天的16點到23點每一秒鐘執行一次。 

      59 59 23 * * 1-5  :: 定義每周1到周5,晚上23:59:59秒只執行一次。
    這個相當用有。可以工作時間每天給用戶發郵件。 

    在Spring3.0中引用了新的命名空間-task:
    task:scheduler 用于定義一個ThreadPoolTaskScheduler,并可以指定線程池的大小,
    即pool-size.所有任務隊列都將會在指定大小的線程池中運行:

    定義如下:
    <!-- 對于同一個Pojo可以聲明多次,并設置標記屬性 -->  
    <bean id="one" class="cn.itcast.schedule.One">  
    <property name="task" value="A"></property>  
    </bean>  

    <bean id="two" class="cn.itcast.schedule.One">  
    <property name="task" value="B"></property>  
    </bean>  

    <bean id="three" class="cn.itcast.schedule.One">  
    <property name="task" value="C"></property>  
    </bean>  

    <!-- 聲明一個具有兩個線程的池,每一個對象將獲取同樣的運行機會 -->  
    <task:scheduler id="sch" pool-size="2"/>  

    <!-- 引用線程池 -->  
    <task:scheduled-tasks scheduler="sch">  
        
    <!-- 引用Spring Bean并設置調用的方法的時間間隔 --> 
        
    <task:scheduled ref="one" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
           <task:scheduled ref="two" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
           <task:scheduled ref="three" method="doSomeThing"  fixed-delay="#{1000*3}"/> 
      </task:scheduled-tasks> 

    <!-- 配置一個定時執行的任務 --> 
    <bean id="work" class="cn.itcast.schedule.Two"/> 

    <task:scheduler id="sendMail"/> 

    <task:scheduled-tasks scheduler="sendMail"> 
        
    <!-- 定義在1月8號19:37:1秒執行一次,無論是周幾 --> 
        
    <task:scheduled ref="work" method="work" cron="1 37 19 8 1 *"/> 
    </task:scheduled-tasks> 


    定義好之后,正常啟動容器即可,只有條件符合,即會按要求執行任務。

    posted @ 2012-10-12 10:51 paulwong 閱讀(4276) | 評論 (0)編輯 收藏

    SPRING BATCH SCREN

    SCENARIO 1:
    A job runs at a specific period in the day at a specific interval (e.g. between 1am - 3am at 15 minute intervals) . When it completes with a specific status, it stops (and does not run after 15 minutes) and does not get triggered again until the next day again at 1am, and at the same time, it triggers all dependent jobs.

    SCENARIO 2:
    A job is scheduled to run at a specific time of day. It continues to run at regular intervals until a condition is met, after which it stops running. It will then start running the next day at the scheduled time and process repeats.

    Reference:

    spring+quartz 動態任務方案
    http://www.iteye.com/topic/704646

    Quartz+Spring 自定義作業調度(作業在DB中配置)
    http://www.tkk7.com/jnbzwm/archive/2010/09/06/331239.html

    Quartz在Spring中動態設置cronExpression(spring設置動態定時任務)
    http://blog.sina.com.cn/s/blog_4f925fc30100u81j.html

    Quartz實現Java調度操作
    http://blog.sina.com.cn/s/blog_4f925fc30100u7yd.html

    Sping 中配置Quartz,SchedulerFactoryBean不能自動啟動
    http://www.iteye.com/problems/15283

    posted @ 2012-10-11 18:10 paulwong 閱讀(344) | 評論 (0)編輯 收藏

    支招12306 海量高并發網站架構設計經驗談

    http://www.it168.com/redian/12306hpc/

    posted @ 2012-10-08 21:38 paulwong 閱讀(755) | 評論 (0)編輯 收藏

    MAC BOOK屏幕保護貼

    http://unwire.hk/2012/07/04/retina-mbp-screen-protector/notebook/

    GALAXY NOTE 2 像素:1280*720 屏幕大小:5.55寸  顯示效果:模糊
    GALAXY NOTE 1 像素:1280*800 屏幕大小:5.3寸    顯示效果:清晰
    GALAXY S3        像素:1280*720 屏幕大小:4.8寸    顯示效果:清晰

    posted @ 2012-10-08 14:08 paulwong 閱讀(347) | 評論 (0)編輯 收藏

    僅列出標題
    共115頁: First 上一頁 75 76 77 78 79 80 81 82 83 下一頁 Last 
    主站蜘蛛池模板: 国产一级高清视频免费看| 最新69国产成人精品免费视频动漫| 国产亚洲精品久久久久秋霞| 亚洲最大激情中文字幕| 思思久久99热免费精品6| 最刺激黄a大片免费网站| 成人毛片免费在线观看| 亚洲一区AV无码少妇电影☆| 亚洲成无码人在线观看| 亚洲精品中文字幕无码A片老| 一级毛片不卡免费看老司机| 又大又硬又爽又粗又快的视频免费| 免费人成网站7777视频| 亚洲成无码人在线观看| 在线观看特色大片免费视频| 在线亚洲人成电影网站色www| 久久久精品视频免费观看| 成人爽A毛片免费看| 亚洲视频一区调教| 高潮内射免费看片| 久久久久久99av无码免费网站| 亚洲熟妇无码一区二区三区导航 | aaa毛片免费观看| 亚洲AV永久无码精品成人| 无码免费又爽又高潮喷水的视频 | 亚洲网站在线免费观看| 亚洲精品视频免费| 四虎影院在线免费播放| 亚洲乱码中文论理电影| 97精品免费视频| 亚洲乱码av中文一区二区| 亚洲国产精品日韩| 亚洲av日韩综合一区二区三区| 99久久精品免费精品国产| 国产亚洲综合网曝门系列| 一区二区视频免费观看| 亚洲人成网址在线观看| 国产精品酒店视频免费看| 亚洲国产欧美一区二区三区| 女人张开腿等男人桶免费视频| sihu国产精品永久免费|