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 小立飛刀 閱讀(20707) 評論(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
          這位大哥,請問你的問題解決了嗎,我現在遇到同樣的需求,請問如何實現  回復  更多評論
            
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

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

          常用鏈接

          留言簿(12)

          隨筆分類(43)

          相冊

          收藏夾(7)

          朋友的博客

          電子資料

          搜索

          •  

          積分與排名

          • 積分 - 302763
          • 排名 - 192

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 蒙阴县| 佛山市| 东莞市| 临湘市| 武夷山市| 隆德县| 白朗县| 石景山区| 古交市| 忻州市| 游戏| 陕西省| 义乌市| 开化县| 泾阳县| 德阳市| 蕲春县| 无锡市| 永善县| 焦作市| 舟曲县| 宜春市| 内江市| 旬阳县| 宝山区| 济源市| 基隆市| 榆社县| 锦州市| 广饶县| 绵阳市| 上犹县| 新密市| 册亨县| 通渭县| 西吉县| 开封市| 介休市| 洛隆县| 太康县| 深州市|