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

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

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

    posts - 40,  comments - 187,  trackbacks - 0

    書接上回,上回說到,我們已經將頁面的時間設置轉為了Cron Expression,下面我記錄了時間規則。

    3) 記錄時間規則

          我將時間規則存入數據庫中,目的是為了生成歷史日志,也可以存入XML文件中。當然您也可以省略此步,直接將轉換后的規則放入相應的Quartz trigger中。


    4) 更新任務觸發器的時間設置

    到了關鍵的一步了,也是最簡單的一步,一個方法就可以實現了。

    首先,我們需要通過trigger的名稱得到一個CronTriggerBean;

    其次,通過trigger的setCronExpression(String cronExp)方法將新的表達式注入;

    最后,RESCHEDULE THE JOB,OK!

     1     /**
     2      * 自定義定時器調度時間
     3      *  @param
     triggerName 觸發器名稱
     4       *  @throws
     Exception 
     5       */

     6      public   void  updateNotificationInterval(String triggerName, String triggerId)
     7              throws  SchedulerException, ParseException 
    {
     8          // 得到trigger

     9         CronTriggerBean trigger  =  (CronTriggerBean) scheduler.getTrigger(
    10
                    triggerName, Scheduler.DEFAULT_GROUP);
    11          // 得到cron expression        

    12         String cronExpression  =  schedulerDAO.getCronExpression(triggerId);
    13          // 設置trigger的時間規則

    14         trigger.setCronExpression(cronExpression);
    15          // 重置job

    16         scheduler.rescheduleJob(triggerName, Scheduler.DEFAULT_GROUP, trigger);
    17     }

    18

    至此,目的達到了,快樂的看著您的任務在您自定義的時間下快樂的執行,您是否也想像'Happy Feet'中那只快樂的企鵝一樣,Show段踢踏呢 ; - D


    PS:忘了說我的Quartz任務是怎么配置的了,罪過,罪過。

    < bean  id ="compareJob"
            class
    ="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >
            
    < property  name ="targetObject"  ref ="compareService"   />
            
    < property  name ="targetMethod"  value ="compare"   />
            
    < property  name ="concurrent"  value ="false"   />
        
    </ bean >  

        
    < bean  id ="compareTrigger"

            class
    ="org.springframework.scheduling.quartz.CronTriggerBean" >
            
    < property  name ="jobDetail"  ref ="compareJob"   />
            
    < property  name ="cronExpression" >             
                
    < value > 0 39 16 20 * ? </ value >
            
    </ property >
        
    </ bean >

    < bean  id ="schedulerFactory"
            class
    ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
            
    < property  name ="triggers" >
                
    < list >                     
                         < ref  local ="compareTrigger"   />

                
    </ list >
            
    </ property >
        
    </ bean >


                                                                                        THE END

    posted on 2007-01-10 16:55 小立飛刀 閱讀(20700) 評論(22)  編輯  收藏 所屬分類: Spring

    FeedBack:
    # re: Spring Quartz如何動態配置時間(3)
    2007-01-10 17:14 | zip
    good!  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-01-10 17:55 | ajax java group
    感覺有點像 crontab .....  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-01-11 10:19 | 小雪飛刀
    其實Quartz的Cron Expression就是來自Unix中,所以感覺很像crontab命令  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-01-11 18:25 | yy77
    上面這個updateNotificationInterval究竟寫在哪個類里面呢?這個類要在xml里面怎么配置才能夠得到scheduler的對象呢?
    看最后聲明的那部分沒有這個類的部分啊。難道是直接通過context來獲得么?  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-01-15 10:59 | 小雪飛刀
    to yy77

    updateNotificationInterval() 這個方法可以寫在你的業務邏輯類中,scheduler對象在這個類中注入就可以用了。如:
    public class SchedulerService {

    private Scheduler scheduler;

    /**
    * @param scheduler The scheduler to set.
    */
    public void setScheduler(Scheduler scheduler) {
    this.scheduler = scheduler;
    }

    public void updateNotificationInterval(...) {
    //...
    scheduler.rescheduleJob(...);
    //...
    }
    }
    在Spring中的配置如下:
    <bean id="schedulerServiceTarget" class="SchedulerService">
    <property name="scheduler" ref="schedulerFactory" />
    </bean>
    而schedulerFactory這個bean我在文章中寫到了
    < bean id ="schedulerFactory"
    class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
    < property name ="triggers" >
    < list >
    < ref local ="compareTrigger" />
    </ list >
    </ property >
    </ bean >

    不知道這樣能不能回答你的問題呢,yy77 ?;-)

      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)[未登錄]
    2007-02-12 16:48 | Spring
    我想請問一下:我都配置好了,程序到了制定的時間會進入方法A,我想在進入方法A后,就取得< value > 0 39 16 20 * ? </ value >這個值,應該怎么實現呢?謝謝
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-02-12 17:00 | 小雪飛刀
    @Spring
    我理解您的意思是:
    您的Method A中需要用到這個時間,但是不知道從哪里取到。

    我的解決方法是將所有的時間規則放入數據庫中,然后從數據庫中讀取最近插入的一個值就是所需時間了。

    不知道這樣能不能回答你的問題。  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)[未登錄]
    2007-02-13 09:36 | Spring
    感謝您的回答,可能我沒表達清楚我的意思!我現在的時間是在數據庫中,就用您的方法假設,我要定時觸發這個方法< property name ="targetMethod" value ="compare" /> ,但是這個方法會在不同的時間點多次觸發,比如每月最后1天,每個星期第一天都是觸發這個方法!我這里可以配置多個時間么?< property name ="cronExpression" >
    < value > 0 39 16 20 * ? </ value >
    </ property > 然后把這個時間值放進數據庫查詢!謝謝
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)[未登錄]
    2007-02-13 15:16 | 過客
    如果找不到調用的方法一般是什么錯誤?類的名字,方法名在多次查證都是正確的  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-02-13 15:32 | 小雪飛刀
    @過客
    能否把你的配置文件貼出來看看?  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-02-13 15:34 | 小雪飛刀
    @Spring
    我查閱了Quartz的文檔,沒有找到可以為一個Job配置多個value elements的方法,所以有個比較笨的方法是設置多個Job,讓它們指向同一個Method,按照不同的時間執行。
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-05-22 16:14 | jinhaha
    請問我要是調用多個方法怎么辦?  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-05-22 17:29 | 小雪飛刀
    @jinhaha

    理論上時可以的。你可以通過加載mutiple propertys達到調用多個方法的目的。如:
    <property name="targetMethod">
    <list>
    <value>register</value>
    <value>compare</value>
    </list>
    </property>

    不過我沒有實際實驗過,您可以實驗一下,告訴我結果 :)
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-08-10 12:14 | boddi
    thrank you!
      是這樣的,客戶有個需求是可以自己修改任務的間隔時間的!(這個值是設置到數據庫中的),因為SimpleTriggerBean必須設置repeatInterval屬性,而這個值因為是保存在數據中的,所以我想設置兩個定時任務CMSTransformCRMTrigger和ScheduleInfoActionTrigger,ScheduleInfoActionTrigger在CMSTransformCRMTrigger任務執行前觸發:其目的是為CMSTransformCRMTrigger根據數據庫的值設置其repeatInterval屬性,配置文件如下:
        <bean id="CMSTransformCRMEngine" class="org.springframework.aop.framework.ProxyFactoryBean">
            
    <property name="targetSource">
                
    <bean class="org.springframework.aop.target.SingletonTargetSource">
                    
    <constructor-arg>
                        
    <bean class="com.server.business.cms.CMSTransformCRMEngine"/>
                    
    </constructor-arg>
                
    </bean>
            
    </property>
            
    <property name="interceptorNames">
                
    <list>
                    
    <value>CallContextInterceptor</value>
                
    </list>
            
    </property>
        
    </bean>

     
    <bean id="CMSTransformCRMJob" class="org.springframework.scheduling.quartz.JobDetailBean">         
            
    <property name="jobClass">
                
    <value>com.wisecrm.server.business.cms.CMSTransformCRMScheduledTask</value>
            
    </property>    
            
    <property name="jobDataAsMap">
                
    <map>
                    
    <entry key="cmsTranCRMEnginer">
                        
    <ref bean="CMSTransformCRMEngine"></ref>
                    
    </entry>
                
    </map>
            
    </property>
        
    </bean>
        
         
    <bean id="CMSTransformCRMTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="CMSTransformCRMJob"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>90000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>90000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="ScheduleInfoAction" class="com.wisecrm.server.business.cms.ScheduleInfoAction">         
            
    <property name="dataSource" ref="DataSource"/>     
            
    <property name="scheduler" ref="schedulerFactory"/>     
        
    </bean>
        
        
    <bean id="ScheduleInfoActionFactory" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            
    <property name="targetObject" ref="ScheduleInfoAction"/>
            
    <property name="targetMethod">
                 
    <value>setTaskTimeByPreference</value>
            
    </property>
            
    <!--property name="arguments">
                <list>
                    <ref local="DataSource"/>
                    <ref local="schedulerFactory"/>
                </list>
            </property
    -->
            
    <property name="concurrent" value="false"/>
        
    </bean>
        
        
    <bean id="ScheduleInfoActionTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="ScheduleInfoActionFactory"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>80000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>50000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">         
            
    <property name="triggers">             
                
    <list>                 
                    
    <ref local="CMSTransformCRMTrigger"/>             
                    
    <ref local="ScheduleInfoActionTrigger"/>             
                
    </list>         
            
    </property>
        
    </bean>

    ScheduleInfoAction是動態設置間隔時間的接口:
    public class ScheduleInfoAction {

        
    private Scheduler scheduler;

        
    public void setTaskTimeByPreference() throws SchedulerException {
            
    if (isStartCMSTransformCRMTask()) {
                SimpleTriggerBean trigger 
    = (SimpleTriggerBean) scheduler.getTrigger("ScheduleInfoActionTrigger",
                                Scheduler.DEFAULT_GROUP);
                trigger.setRepeatInterval(Long.parseLong(Application.getSystemSettingService().getPrefValue(
    "CMSPeriod")));
                scheduler.rescheduleJob(
    "ScheduleInfoActionTrigger",
                        Scheduler.DEFAULT_GROUP, trigger);
            }
     
    else {
                scheduler.shutdown();
            }

        }


        public
     boolean isStartCMSTransformCRMTask() {
            
    return Application.getSystemSettingService().getPrefValue("CMSPeriod"!= null;
        }


        public
     Scheduler getScheduler() {
            
    return scheduler;
        }


        public
     void setScheduler(Scheduler scheduler) {
            
    this.scheduler = scheduler;
        }


    }
      但是不知為和兩個任務都不執行?
    后面我再在程序啟動時就通過ScheduleInfoAction的factoryBean
    設置CMSTransformCRMTrigger其repeatInterval屬性,只保留一個定時任務就可以了,
    配置如下:
    <bean id="ScheduleInfoAction" class="com.wisecrm.server.business.cms.ScheduleInfoAction">         
            
    <property name="scheduler" ref="schedulerFactory"/>     
        
    </bean>
        
        
    <bean id="ScheduleInfoActionFactory" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            
    <property name="targetObject" ref="CMSTransformCRMEngine"/>
            
    <property name="targetMethod">
                 
    <value>run</value>
            
    </property>
            
    <property name="concurrent" value="false"/>
        
    </bean>
        
        
    <bean id="ScheduleInfoActionTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="ScheduleInfoActionFactory"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>80000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>80000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">         
            
    <property name="triggers">             
                
    <list>            
                    
    <ref bean="ScheduleInfoActionTrigger"/>             
                
    </list>         
            
    </property>
        
    </bean>
    但總感覺到有點笨拙,你幫忙參考下   回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-08-10 14:32 | 小雪飛刀
    @boddi
    首先Scheduler是接口不是類,其次FactoryBean that sets up a Quartz Scheduler, manages its lifecycle as part of the Spring application context, and exposes the Scheduler reference for dependency injection.

    您下面這個配置我不太明白是什么意思?能否把整個配置文件貼出來?
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-08-11 14:56 | boddi

    thrank you!
      是這樣的,客戶有個需求是可以自己修改任務的間隔時間的!(這個值是設置到數據庫中的),因為SimpleTriggerBean必須設置repeatInterval屬性,而這個值因為是保存在數據中的,所以我想設置兩個定時任務CMSTransformCRMTrigger和ScheduleInfoActionTrigger,ScheduleInfoActionTrigger在CMSTransformCRMTrigger任務執行前觸發:其目的是為CMSTransformCRMTrigger根據數據庫的值設置其repeatInterval屬性,配置文件如下:

        <bean id="CMSTransformCRMEngine" class="org.springframework.aop.framework.ProxyFactoryBean">
            
    <property name="targetSource">
                
    <bean class="org.springframework.aop.target.SingletonTargetSource">
                    
    <constructor-arg>
                        
    <bean class="com.server.business.cms.CMSTransformCRMEngine"/>
                    
    </constructor-arg>
                
    </bean>
            
    </property>
            
    <property name="interceptorNames">
                
    <list>
                    
    <value>CallContextInterceptor</value>
                
    </list>
            
    </property>
        
    </bean>

     
    <bean id="CMSTransformCRMJob" class="org.springframework.scheduling.quartz.JobDetailBean">         
            
    <property name="jobClass">
                
    <value>com.wisecrm.server.business.cms.CMSTransformCRMScheduledTask</value>
            
    </property>    
            
    <property name="jobDataAsMap">
                
    <map>
                    
    <entry key="cmsTranCRMEnginer">
                        
    <ref bean="CMSTransformCRMEngine"></ref>
                    
    </entry>
                
    </map>
            
    </property>
        
    </bean>
        
         
    <bean id="CMSTransformCRMTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="CMSTransformCRMJob"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>90000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>90000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="ScheduleInfoAction" class="com.wisecrm.server.business.cms.ScheduleInfoAction">         
            
    <property name="dataSource" ref="DataSource"/>     
            
    <property name="scheduler" ref="schedulerFactory"/>     
        
    </bean>
        
        
    <bean id="ScheduleInfoActionFactory" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            
    <property name="targetObject" ref="ScheduleInfoAction"/>
            
    <property name="targetMethod">
                 
    <value>setTaskTimeByPreference</value>
            
    </property>
            
    <!--property name="arguments">
                <list>
                    <ref local="DataSource"/>
                    <ref local="schedulerFactory"/>
                </list>
            </property
    -->
            
    <property name="concurrent" value="false"/>
        
    </bean>
        
        
    <bean id="ScheduleInfoActionTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="ScheduleInfoActionFactory"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>80000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>50000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">         
            
    <property name="triggers">             
                
    <list>                 
                    
    <ref local="CMSTransformCRMTrigger"/>             
                    
    <ref local="ScheduleInfoActionTrigger"/>             
                
    </list>         
            
    </property>
        
    </bean>


    ScheduleInfoAction是動態設置間隔時間的接口:

    public class ScheduleInfoAction {

        
    private Scheduler scheduler;

        
    public void setTaskTimeByPreference() throws SchedulerException 
    {
            
    if (isStartCMSTransformCRMTask()) 
    {
                SimpleTriggerBean trigger 
    = (SimpleTriggerBean) scheduler.getTrigger("ScheduleInfoActionTrigger
    ",
                                Scheduler.DEFAULT_GROUP);
                trigger.setRepeatInterval(Long.parseLong(Application.getSystemSettingService().getPrefValue(
    "CMSPeriod
    ")));
                scheduler.rescheduleJob(
    "ScheduleInfoActionTrigger
    ",
                        Scheduler.DEFAULT_GROUP, trigger);
            }
     
    else {
                scheduler.shutdown();
            }

        }


        public
     boolean isStartCMSTransformCRMTask() {
            
    return Application.getSystemSettingService().getPrefValue("CMSPeriod"!= null
    ;
        }


        public
     Scheduler getScheduler() {
            
    return scheduler;
        }


        public
     void setScheduler(Scheduler scheduler) {
            
    this.scheduler 
    = scheduler;
        }


    }

      但是不知為和兩個任務都不執行?

    后面我再在程序啟動時就通過ScheduleInfoAction的factoryBean

    設置CMSTransformCRMTrigger其repeatInterval屬性,只保留一個定時任務就可以了,

    配置如下:


    <bean id="ScheduleInfoAction" class="com.wisecrm.server.business.cms.ScheduleInfoAction">         
            
    <property name="scheduler" ref="schedulerFactory"/>     
        
    </bean>
        
        
    <bean id="ScheduleInfoActionFactory" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            
    <property name="targetObject" ref="CMSTransformCRMEngine"/>
            
    <property name="targetMethod">
                 
    <value>run</value>
            
    </property>
            
    <property name="concurrent" value="false"/>
        
    </bean>
        
        
    <bean id="ScheduleInfoActionTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">         
            
    <property name="jobDetail">
                
    <ref bean="ScheduleInfoActionFactory"></ref>
            
    </property>    
            
    <property name="startDelay">
                
    <value>80000</value>
            
    </property>
            
    <property name="repeatInterval">
                
    <value>80000</value>
            
    </property>
        
    </bean>
        
        
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">         
            
    <property name="triggers">             
                
    <list>            
                    
    <ref bean="ScheduleInfoActionTrigger"/>             
                
    </list>         
            
    </property>
        
    </bean>


    但總感覺到有點笨拙,你幫忙參考下,為什么repeatInterval不能通過繼承SimpleTriggerBean復寫getRepeatInterval方法去設置呢?

      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2007-08-22 11:36 | kk
    問一下:
    Qest1:rescheduleJob是不是在兩種場景下使用,一是服務重啟時,一是用戶需要更改任務的時間規則(觸發器)時?

    Qest2:用戶在更改任務的時間規則(觸發器)時,可能還需要任務已經運行的狀態信息。
    場景一:某個任務從2007/1/1日開始,每天8:30運行。到了2007/5/1日,用戶想更改為每天9:00運行,新觸發器設為2007/1/1,9:00。希望的更新觸發器后第一次運行時間是2007/5/2日 9:00。請問quartz可以做到嗎?
    場景二:某任務的執行次數為100次,當執行到30次時,用戶希望把執行次數改為150次,新觸發器設為150次,所以任務還需執行150-(100-30)=80次。請問quartz可以做到嗎?  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2008-10-28 15:28 | 風續飄
    你好,我是剛剛搞開發不久,想學習quartz,你的這個程序的時間是從數據庫里來讀取的嗎?能不能把你的表結構發我看看,感激不盡!  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2008-10-30 13:17 | 小立飛刀
    @風續飄

    表結構很簡單,只需要key,value兩個字段就可以滿足要求。您也可以采用其他存儲方式,如存入xml中。  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2009-04-23 18:18 | sunday
    @kk
    你好,我也碰到了你所說的第一種情況,不知您是怎么解決的?  回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)
    2009-04-28 13:33 | 小立飛刀
    @sunday
    什么情況 能否說得詳細些?
      回復  更多評論
      
    # re: Spring Quartz如何動態配置時間(3)[未登錄]
    2009-07-27 16:37 | jim
    這位大哥,請問你的問題解決了嗎,我現在遇到同樣的需求,請問如何實現  回復  更多評論
      
    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    生存或毀滅,這是個必答之問題:是否應默默的忍受坎苛命運之無情打擊,還是應與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個較崇高?

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302613
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产精品玖玖美女张开腿让男人桶爽免费看| 日韩一级在线播放免费观看| 国产成人+综合亚洲+天堂| 亚洲Av综合色区无码专区桃色 | 亚洲视频一区二区在线观看| 亚洲精品成人a在线观看| 噜噜嘿在线视频免费观看| **实干一级毛片aa免费| 麻豆精品不卡国产免费看| 人妻仑乱A级毛片免费看| 亚洲熟妇av午夜无码不卡| 亚洲手机中文字幕| 亚洲男人都懂得羞羞网站| 夜夜春亚洲嫩草影院| 亚洲国产精品13p| 国产一区二区三区在线免费| 无码免费午夜福利片在线| 亚洲国产精品免费在线观看| 免费国产叼嘿视频大全网站| a级毛片在线免费看| 久久er国产精品免费观看8| 一级人做人a爰免费视频 | 国产美女无遮挡免费视频网站 | 国产精品亚洲一区二区麻豆| 亚洲欧洲国产成人精品| 亚洲图片在线观看| 亚洲一区二区三区电影| 亚洲视频在线观看不卡| 亚洲精品中文字幕乱码影院| 一级一级一级毛片免费毛片| 特级毛片A级毛片免费播放| 国内成人精品亚洲日本语音| 亚洲.国产.欧美一区二区三区| 亚洲AV永久无码精品放毛片| 国产AV无码专区亚洲AV麻豆丫| 羞羞视频在线免费观看| 一级特级aaaa毛片免费观看 | 亚洲综合久久夜AV | 亚洲乱码国产一区三区| 国产成人亚洲综合无码精品| 亚洲天堂视频在线观看|