1. 程式人生 > >quartz 2.2.3 自帶示例原始碼解讀example1~example5

quartz 2.2.3 自帶示例原始碼解讀example1~example5

Example1 第一個quartz示例

public class HelloJob implements Job {
	
	private static Logger _log = LoggerFactory.getLogger(HelloJob.class);

	public HelloJob() {
	}
	
	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		_log.info("Hello World! - " + new Date());
	}
}


public class SimpleExample {
	public void run() throws Exception {
		Logger log = LoggerFactory.getLogger(SimpleExample.class);
		
		log.info("------- Initializing ----------------------");
		
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();
		
		log.info("------- Initialization Complete -----------");
		
		// 下一個整分鐘
		Date runTime = DateBuilder.evenMinuteDate(new Date());
		
		log.info("------- Scheduling Job  -------------------");
		
		JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group").build();
		Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
		sched.scheduleJob(job, trigger);
		
		log.info(job.getKey() + " will run at: " + runTime);
		
		sched.start();
		
		log.info("------- Started Scheduler -----------------");
		log.info("------- Waiting 65 seconds... -------------");
		
		try {
			Thread.sleep(65L * 1000L);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		log.info("------- Shutting Down ---------------------");
		sched.shutdown(true);
		log.info("------- Shutdown Complete -----------------");
	}
	
	public static void main(String[] args) throws Exception {
		SimpleExample example = new SimpleExample();
		example.run();
	}
}

Example2 簡單觸發器

public class SimpleJob implements Job {
	private static Logger _log = LoggerFactory.getLogger(SimpleJob.class);

	public SimpleJob() {
	}
	
	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		JobKey jobKey = context.getJobDetail().getKey();
		_log.info("SimpleJob says: " + jobKey + " executing at " + new Date());
	}
}


public class SimpleTriggerExample {
	public void run() throws Exception {
		Logger log = LoggerFactory.getLogger(SimpleTriggerExample.class);

		log.info("------- Initializing -------------------");

		// 得到排程器例項的引用
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();

		log.info("------- Initialization Complete --------");
		log.info("------- Scheduling Jobs ----------------");

		// jobs can be scheduled before sched.start() has been called

		// 任務開始時間的秒數是15的倍數
		Date startTime = DateBuilder.nextGivenSecondDate(null, 15);

		// job1開始時間的秒數是15的倍數
		JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();
		SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
				.withIdentity("trigger1", "group1").startAt(startTime).build();
		// 排程任務
		Date ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job2開始時間的秒數是15的倍數
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job2", "group1").build();
		trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity(
				"trigger2", "group1").startAt(startTime).build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job3開始時間的秒數是15的倍數(執行一次,重複10次,共11次,每次執行間隔為10s)
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job3", "group1").build();
		trigger = TriggerBuilder.newTrigger()
				.withIdentity("trigger3", "group1").startAt(startTime)
				.withSchedule(
						SimpleScheduleBuilder.simpleSchedule()
								.withIntervalInSeconds(10).withRepeatCount(10))
				.build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		
		// 相同的job3開始時間的秒數是15的倍數(執行一次,重複2次,共3次,每次執行間隔為10s)
		trigger = TriggerBuilder.newTrigger()
				.withIdentity("trigger3", "group2").startAt(startTime)
				.withSchedule(
						SimpleScheduleBuilder.simpleSchedule()
								.withIntervalInSeconds(10).withRepeatCount(2))
				.forJob(job).build();
		ft = sched.scheduleJob(trigger);
		log.info(job.getKey() + " will [also] run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job4開始時間的秒數是15的倍數(執行一次,重複5次,共6次,每次執行間隔為10s)
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job4", "group1").build();
		trigger = TriggerBuilder.newTrigger().withIdentity("trigger4", "group1").startAt(
				startTime).withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).withRepeatCount(5))
				.build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job5會立即排程,執行時間在5分鐘後
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job5", "group1").build();
		trigger = (SimpleTrigger) TriggerBuilder.newTrigger().withIdentity("trigger5",
				"group1").startAt(DateBuilder.futureDate(5, IntervalUnit.MINUTE)).build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job6開始時間的秒數是15的倍數,並且每40秒會重複執行一次,無限重複
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job6", "group1").build();
		trigger = TriggerBuilder.newTrigger().withIdentity("trigger6", "group1").startAt(
				startTime).withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(40).repeatForever())
				.build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		log.info("------- Starting Scheduler ----------------");

		// 所有的任務已加入排程器,但排程器未開始之前所有的任務都不會執行
		sched.start();
		log.info("------- Started Scheduler -----------------");
		// 排程器執行後任務仍然可以被排程
		
		// job7開始時間的秒數是15的倍數,並且每5分鐘會重複執行一次,重複20次
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job7", "group1").build();
		trigger = TriggerBuilder.newTrigger().withIdentity("trigger7", "group1").startAt(
				startTime).withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20))
				.build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// job8可以直接執行,而不使用觸發器
		job = JobBuilder.newJob(SimpleJob.class).withIdentity("job8", "group1")
				.storeDurably().build();
		sched.addJob(job, true);
		log.info("'Manually' triggering job8...");
		sched.triggerJob(JobKey.jobKey("job8", "group1"));

		log.info("------- Waiting 30 seconds... --------------");

		try {
			Thread.sleep(30L * 1000L);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// job7可以重複排程,開始時間的秒數是15的倍數,並且每5分鐘會重複執行一次,重複20次
		log.info("------- Rescheduling... --------------------");
		trigger = TriggerBuilder.newTrigger().withIdentity("trigger7", "group1").startAt(
				startTime).withSchedule(
						SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).withRepeatCount(20))
				.build();

		ft = sched.rescheduleJob(trigger.getKey(), trigger);
		log.info("job7 rescheduled to run at: " + ft);

		log.info("------- Waiting five minutes... ------------");
		try {
			// 等待5分鐘
			Thread.sleep(300L * 1000L);
		} catch (Exception e) {
			e.printStackTrace();
		}

		log.info("------- Shutting Down ---------------------");

		sched.shutdown(true);

		log.info("------- Shutdown Complete -----------------");

		// 顯示排程器的狀態
		SchedulerMetaData metaData = sched.getMetaData();
		log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
	}

	public static void main(String[] args) throws Exception {
		SimpleTriggerExample example = new SimpleTriggerExample();
		example.run();
	}
}

Example 3 crontab格式的觸發器

public class SimpleJob implements Job {

	private static Logger _log = LoggerFactory.getLogger(SimpleJob.class);

	public SimpleJob() {
	}

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		// 列印job的名稱和執行時間
		JobKey jobKey = context.getJobDetail().getKey();
		_log.info("SimpleJob says: " + jobKey + " executing at " + new Date());
	}
}


public class CronTriggerExample {

  public void run() throws Exception {
    Logger log = LoggerFactory.getLogger(CronTriggerExample.class);

    log.info("------- Initializing -------------------");

    // 得到排程器的引用
    SchedulerFactory sf = new StdSchedulerFactory();
    Scheduler sched = sf.getScheduler();

    log.info("------- Initialization Complete --------");

    log.info("------- Scheduling Jobs ----------------");

    // job可以在排程器執行前被排程

    // job 1 每20秒執行1次
    JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build();
    CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?"))
        .build();
    Date ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 2 在偶數分鐘的第15秒執行
    job = newJob(SimpleJob.class).withIdentity("job2", "group1").build();
    trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule("15 0/2 * * * ?")).build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 3 在8-17點的偶數分鐘執行
    job = newJob(SimpleJob.class).withIdentity("job3", "group1").build();
    trigger = newTrigger().withIdentity("trigger3", "group1").withSchedule(cronSchedule("0 0/2 8-17 * * ?")).build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 4 在17-23點分鐘是3的倍數執行
    job = newJob(SimpleJob.class).withIdentity("job4", "group1").build();
    trigger = newTrigger().withIdentity("trigger4", "group1").withSchedule(cronSchedule("0 0/3 17-23 * * ?")).build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 5 在每月1號或15號的10點執行
    job = newJob(SimpleJob.class).withIdentity("job5", "group1").build();
    trigger = newTrigger().withIdentity("trigger5", "group1").withSchedule(cronSchedule("0 0 10am 1,15 * ?")).build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 6 週一至週五的每30秒執行一次
    job = newJob(SimpleJob.class).withIdentity("job6", "group1").build();
    trigger = newTrigger().withIdentity("trigger6", "group1").withSchedule(cronSchedule("0,30 * * ? * MON-FRI"))
        .build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    // job 7 在週六、週日的每30秒執行一次
    job = newJob(SimpleJob.class).withIdentity("job7", "group1").build();
    trigger = newTrigger().withIdentity("trigger7", "group1").withSchedule(cronSchedule("0,30 * * ? * SAT,SUN"))
        .build();
    ft = sched.scheduleJob(job, trigger);
    log.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
             + trigger.getCronExpression());

    log.info("------- Starting Scheduler ----------------");

    // 排程器執行前所有任務不會執行
    sched.start();

    log.info("------- Started Scheduler -----------------");

    log.info("------- Waiting five minutes... ------------");
    try {
      Thread.sleep(300L * 1000L);
    } catch (Exception e) {
      e.printStackTrace();
    }

    log.info("------- Shutting Down ---------------------");

    sched.shutdown(true);

    log.info("------- Shutdown Complete -----------------");

    SchedulerMetaData metaData = sched.getMetaData();
    log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");

  }

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

    CronTriggerExample example = new CronTriggerExample();
    example.run();
  }

}

Example4 向任務傳遞引數

// 接收引數和維護狀態的示例,注意這兩個註解
@PersistJobDataAfterExecution   // 每次執行後會持久化JobData
@DisallowConcurrentExecution    // 不允許併發執行
public class ColorJob implements Job {

    private static Logger _log = LoggerFactory.getLogger(ColorJob.class);
    
    // 靜態引數
    public static final String FAVORITE_COLOR = "favorite color";
    public static final String EXECUTION_COUNT = "count";
    
    // 因為quartz每次執行任務時都會重新例項化一個類,所以非靜態成員變數不能用來維護狀態
    private int _counter = 1;

    public ColorJob() {
    }

    public void execute(JobExecutionContext context)
        throws JobExecutionException {
    	// 獲取jobkey類似group1.job1
        JobKey jobKey = context.getJobDetail().getKey();
        
        // 獲取並列印傳遞過來的引數
        JobDataMap data = context.getJobDetail().getJobDataMap();
        String favoriteColor = data.getString(FAVORITE_COLOR);
        int count = data.getInt(EXECUTION_COUNT);
        _log.info("ColorJob: " + jobKey + " executing at " + new Date() + "\n" +
            "  favorite color is " + favoriteColor + "\n" + 
            "  execution count (from job map) is " + count + "\n" + 
            "  execution count (from job member variable) is " + _counter);
        
        // 增加count並儲存到job的map中,所以job狀態可以維護
        count++;
        data.put(EXECUTION_COUNT, count);
        
        // 增加本地成員變數,通過成員變數不能維護job狀態
        _counter++;
    }
}



public class JobStateExample {

	public void run() throws Exception {
		Logger log = LoggerFactory.getLogger(JobStateExample.class);

		log.info("------- Initializing -------------------");

		// 得到排程器的引用
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();

		log.info("------- Initialization Complete --------");

		log.info("------- Scheduling Jobs ----------------");

		// 開始時間秒數是10的倍數
		Date startTime = nextGivenSecondDate(null, 10);

		// job1 會在秒數是10的倍數開始,重複4次,每10秒重複1次
		JobDetail job1 = newJob(ColorJob.class).withIdentity("job1", "group1")
				.build();
		SimpleTrigger trigger1 = newTrigger()
				.withIdentity("trigger1", "group1").startAt(startTime)
				.withSchedule(
						simpleSchedule().withIntervalInSeconds(10)
								.withRepeatCount(4)).build();
		// 向 job1 傳遞引數
		job1.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Green");
		job1.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1);
		Date scheduleTime1 = sched.scheduleJob(job1, trigger1);
		log.info(job1.getKey() + " will run at: " + scheduleTime1
				+ " and repeat: " + trigger1.getRepeatCount()
				+ " times, every " + trigger1.getRepeatInterval() / 1000
				+ " seconds");

		// job2 會在秒數是10的倍數開始,重複4次,每10秒重複1次
		JobDetail job2 = newJob(ColorJob.class).withIdentity("job2", "group1")
				.build();
		SimpleTrigger trigger2 = newTrigger()
				.withIdentity("trigger2", "group1").startAt(startTime)
				.withSchedule(
						simpleSchedule().withIntervalInSeconds(10)
								.withRepeatCount(4)).build();
		// 向 job2傳遞引數
		job2.getJobDataMap().put(ColorJob.FAVORITE_COLOR, "Red");
		job2.getJobDataMap().put(ColorJob.EXECUTION_COUNT, 1);
		Date scheduleTime2 = sched.scheduleJob(job2, trigger2);
		log.info(job2.getKey().toString() + " will run at: " + scheduleTime2
				+ " and repeat: " + trigger2.getRepeatCount()
				+ " times, every " + trigger2.getRepeatInterval() / 1000
				+ " seconds");

		log.info("------- Starting Scheduler ----------------");

		// 所有的任務已加入排程器,但排程器未開始之前所有的任務都不會執行
		sched.start();

		log.info("------- Started Scheduler -----------------");

		log.info("------- Waiting 60 seconds... -------------");
		try {
			Thread.sleep(60L * 1000L);
		} catch (Exception e) {
			//
		}

		log.info("------- Shutting Down ---------------------");

		sched.shutdown(true);

		log.info("------- Shutdown Complete -----------------");

		SchedulerMetaData metaData = sched.getMetaData();
		log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");

	}

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

		JobStateExample example = new JobStateExample();
		example.run();
	}

}


Example5 錯失任務執行策略

/**
 * 一個啞任務,用於單元測試
 */
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class StatefulDumbJob implements Job {
	// 常量
	public static final String NUM_EXECUTIONS = "NumExecutions";
	public static final String EXECUTION_DELAY = "ExecutionDelay";

	public StatefulDumbJob() {
	}

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		System.err.println("---" + context.getJobDetail().getKey()
				+ " executing.[" + new Date() + "]");

		// 取出job中的map中的資料,增加並重新放入job的map中
		JobDataMap map = context.getJobDetail().getJobDataMap();
		int executeCount = 0;
		if (map.containsKey(NUM_EXECUTIONS)) {
			executeCount = map.getInt(NUM_EXECUTIONS);
		}
		executeCount++;
		map.put(NUM_EXECUTIONS, executeCount);

		// 如果包含延遲欄位,則模擬任務延遲5秒
		long delay = 5000l;
		if (map.containsKey(EXECUTION_DELAY)) {
			delay = map.getLong(EXECUTION_DELAY);
		}
		try {
			Thread.sleep(delay);
		} catch (Exception ignore) {
		}
		
		// 完成任務,列印完成語句
		System.err.println("  -" + context.getJobDetail().getKey()
				+ " complete (" + executeCount + ").");
	}
}



public class MisfireExample {

	public void run() throws Exception {
		Logger log = LoggerFactory.getLogger(MisfireExample.class);

		log.info("------- Initializing -------------------");
		// 得到排程器的引用
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();

		log.info("------- Initialization Complete -----------");
		log.info("------- Scheduling Jobs -----------");

		// 開始時間秒數是15的倍數
		Date startTime = nextGivenSecondDate(null, 15);

		// 有狀態job1每3秒執行1次,但會延遲10秒(任務中睡眠了10秒模擬了執行任務需要10秒)
		JobDetail job = newJob(StatefulDumbJob.class).withIdentity(
				"statefulJob1", "group1").usingJobData(
				StatefulDumbJob.EXECUTION_DELAY, 10000L).build();
		SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1")
				.startAt(startTime).withSchedule(
						simpleSchedule().withIntervalInSeconds(3)
								.repeatForever()).build();
		Date ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		// 有狀態job2每3秒執行1次,但會延遲10秒(任務中睡眠了10秒模擬了執行任務需要10秒)
		// job2設定了策略,所以錯失後會立即觸發,而不會等到下一個觸發點
		job = newJob(StatefulDumbJob.class).withIdentity("statefulJob2",
				"group1").usingJobData(StatefulDumbJob.EXECUTION_DELAY, 10000L)
				.build();
		trigger = newTrigger().withIdentity("trigger2", "group1").startAt(
				startTime).withSchedule(
				simpleSchedule().withIntervalInSeconds(3).repeatForever()
				// 設定錯失觸發後的排程策略
						.withMisfireHandlingInstructionNowWithExistingCount())
				.build();
		ft = sched.scheduleJob(job, trigger);
		log.info(job.getKey() + " will run at: " + ft + " and repeat: "
				+ trigger.getRepeatCount() + " times, every "
				+ trigger.getRepeatInterval() / 1000 + " seconds");

		log.info("------- Starting Scheduler ----------------");
		sched.start();
		log.info("------- Started Scheduler -----------------");

		try {
			Thread.sleep(600L * 1000L);
		} catch (Exception e) {
		}

		log.info("------- Shutting Down ---------------------");
		sched.shutdown(true);
		log.info("------- Shutdown Complete -----------------");

		SchedulerMetaData metaData = sched.getMetaData();
		log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
	}

	public static void main(String[] args) throws Exception {
		MisfireExample example = new MisfireExample();
		example.run();
	}

	//本範例中,觸發的間隔被設定為3秒,但是由於任務體執行間睡眠10秒,導致了錯失觸發的產生。
	//實際執行的效果,2個任務執行的間隔為10秒。
	//由於丟失觸發時,job2的策略是立即觸發,而job1是等待下一次機會觸發。所以job2會趕在job1的前頭,最終執行次數大於job1。
}




相關推薦

quartz 2.2.3 示例原始碼解讀example1~example5

Example1 第一個quartz示例 public class HelloJob implements Job { private static Logger _log = LoggerFactory.getLogger(HelloJob.class); p

Macbook Hbase(1.2.6) 偽分布式安裝,Hadoop(2.8.2) ,使用zookeeper

may use oop cab cto 電腦 nds log4j clu 首先需要保證hadoop已經在電腦上安裝。然後接下來只需要下載hhase配置就行了。 Step1: 下載hbase http://archive.apache.org/dist/hbase/1.2.6

更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面23維4碼原始碼

更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面2二3維4碼原始碼java視訊教程2:微信小遊戲java視訊教程FlashFXP4_ikoznghong.zipjava視訊教程mime型別.txtjava視訊教程單獨包(1).rarjava視訊教程單獨

linux上CUnit 2.1.3安裝-使用-示例-安裝不上的解決方法

Ubuntu 16.04 安裝CUnit 一、CUnit-2.1-3,下載地址  https://sourceforge.net/projects/cunit/ 二、解壓 #tar jxvf CUnit-2.1-3.tar.bz2 三、安裝 進入CUnit-2.1-3目錄,

用opencv3.3的traincascade.exe訓練LBP特征的分類器

不能 有效 格式 aar file jpg for rotation 方差 opencv3.3中有可以訓練分類器opencv_traincascade.exe,可以用HAAR、LBP和HOG特征訓練分類器。 這個函數都可以在opencv\build\x64\vc14\bin

VS2015+OpenCV2.4.13環境搭建詳細步驟及示例編譯執行

前言 最近研究了一下opencv的kalman濾波演算法,想要執行裡面的示例,折騰了半天,在網上找了一些資料,終於搞定了,主要是配置vs的環境,這裡做個詳細的步驟總結。 軟體下載 首先,在opencv官網下載軟體。官網下載地址。 注意,4.0.0版本是近期才釋出的,是大

TI am335x sdk linux原始碼下編譯驅動出錯解決辦法

在使用beaglebone black的時候從TI官網下載了最新版的sdk: ti-processor-sdk-linux-am335x-evm-01.00.00.00-Linux-x86-Install.bin 在linux下安裝之後 kernel的預設路徑是 /opt/

hadoop 示例wordcount 詳細執行步驟

因為機器學習,接觸到了資料探勘;因為資料探勘,接觸到了大資料;因為大資料,接觸到了Hadoop。之前有過hadoop的簡單瞭解,但都是基於別人提供的hadoop來學習和使用,雖然也很好用 ,終究不如自己的使用起來方便 。經過這兩天參考大量網上的經驗,終於成功的搭

Ubuntu16.04 上執行 Hadoop2.7.3 example wordCount摸索記錄

首先最最重要的寫在最前面,也是我覺得個人踩得最深的坑,剛接觸hadoop的人,缺少的認識: hdfs的理解:它是一個檔案系統,跟linux的檔案系統是類似的結構,擁有類似的語法,大概就是你在linux上ls檢視檔案列表,那麼hdfs的無非就是hadoop fs -ls。ha

Unity示例Demo專案Standard Assets Example Project研究詳解

關於Standard Assets Example Project 最近更新Unity3D,更新包推送了Standard Assets Example Project的更新,於是便下載下來研究

Qt示例演示程式

使用的Qt版本:4.8.1 Qt提供了不少示例,便於使用者參考和學習。另外,Qt還提供了一個示例的演示程式。 演示程式目錄為:"qt安裝目錄/bin/qtdemo.exe" 開啟程式如下圖: 選擇某一示例程式,點選右下方“launch”,即可開啟示例程式。 作者開啟的S

使用kbmmw中的隨機數替換delphi 10.3 的隨機數

中心 密碼 time 函數 del 算法 cati 集中 alt 我們在開發中經常會使用隨機數模擬各種隨機條件,例如生成唯一的密碼和令牌。 在計算機中,一般采用PRNG(偽隨機序列發生器)模擬真實隨機數。既然是隨機,就要要沒有任何規律, 在取值範圍內均勻、獨立。以確保盡

8.0 Notification的使用1. 普通的notification 2. 進度條的notification 3. 定義的notification,點選事件進入軟體的一個activity

實現功能: 最終效果: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

jQuery 2.0.3 原始碼分析 Deferred(最細的實現剖析,圖)

Deferred的概念請看第一篇 ******************構建Deferred物件時候的流程圖************************** **********************原始碼解析********************** 因為callback被剝

ubuntu 14.04下安裝cmake 3.2.2版本2.8.2

Either use a PPA or compile it yourself: Installation by a PPA (Upgrade to 3.2) sudo apt-get install software-properties-common sudo add-apt-repository p

python 2to3.py 程式碼轉換2-->3

2to3.py #!/usr/bin/env python import sys from lib2to3.main import main sys.exit(main("lib2to3.fixes"))   demo.py def greet(name): pr

將Ubuntu 10.042.6.32核心升級成3.0核心圖文教程

1、完成如下實踐工作,並截圖說明實踐步驟:1)下載安裝虛擬機器VMWare Workstation;2)在虛擬機器中安裝Linux2.x ;3)通過自行編譯,將Linux 2.x核心升級到Linux 3.x。 1)     安裝VMware Workstation 11.1

最新Spring-4.3.10和quartz-2.2.3整合示例

筆記 Spring 為簡化 Quartz 的操作提供了相關支援類Quartz Scheduler 。方便我們進行任務排程的開發。網上版本大都一大抄,而且時間久遠,無奈去看官方文件,還好Google翻譯很給力,鑽研了一下午,搞定~配置了兩個定時任務,一個是直接呼

zabbix-3.2.6之定制監控項參數 監控http 80端口是否正常

wid 正常 3.2 添加 1-1 items lan ati agen 1、自定義映射值 配置--->主機--->監控項 創建監控項----展示映像值 再輸入參數 點更新---拉到最下面,就可以看到新添加的參數。 2、item(監

Centos 6.9 Python 2.6.6 切換為2.7.13(or later)

source 查看 find 命令 進入目錄 進入 安裝 2.6 usr local 目的: 系統默認運行python, 系統提示2.6.6,不滿足練習環境-->切到2.7.x步驟1: find 命令查找所有的python相關文件#find / name=‘pytho