クォーツにまず、
クォーツも単独で使用することができ、それはJ2EEとJ2SEアプリケーションと組み合わせることができますOpenSymphonyのオープンソース組織とジョブスケジューリング分野におけるオープンソースプロジェクトです。Javaエンタープライズ・アプリケーションでは、クォーツは、最も広く使用されているの時限スケジューリングフレームワークです。
クォーツのメインコンセプト:
- スケジューリングAPIの主なタスク:スケジューラ
- ScheduleBuilderは:シンプルな実装クラスに、例えば、スケジューラを構築するために使用SimpleScheduleBuilder
- ジョブ:インタフェースのタスク実行のスケジューリング方法であって、実行されるタスクのタイミング、すなわち
- 仕事スケジュールされたタスクの例:JobDetail
- JobBuilder:特定の団体の仕事、JobDetailを構築するための
- トリガ:コンポーネントを定義する実行計画、実行、すなわちタイミングをスケジューリング
- TriggerBuilder:トリガーの構築
A、クォーツデモ
SpringBootでは、我々は、石英の依存性を導入する必要があります。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--quartz定时调度依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
まずここで、単純に現在の時刻を印刷し、すなわち達成QuartzJobBean executeInternal継承設定するクラスQuartzJob1、、、スケジュールされたタスクロジック作成方法、特定のジョブを実行するタイミング・ロジックを定義します。
public class QuartzJob1 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("QuartzJob1----" + sdf.format(new Date()));
}
}
関連するタスクQuartzJob1ながらQuartzConfigを作成し、その後、JobDetailを定義し、JobDetailは、JobBuilderによって建てられました。
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail1(){
return JobBuilder.newJob(QuartzJob1.class).storeDurably().build();
}
}
最後に、我々はSimpleScheduleBuilderスケジューラを構築するためのタイミングスケジュールトリガ、簡単な実装クラスを定義する必要があり、TriggerBuilderは、トリガーを構築するために使用されます
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail1(){
return JobBuilder.newJob(QuartzJob1.class).storeDurably().build();
}
@Bean
public Trigger trigger1(){
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1) //每一秒执行一次
.repeatForever(); //永久重复,一直执行下去
return TriggerBuilder.newTrigger()
.forJob(jobDetail1())
.withSchedule(scheduleBuilder)
.build();
}
}
このようなクォーツタイミングタスクは完了!
実際には、定義は、以下のタイマータスク2 jobDetail2とトリガ2、例えば、仕事に内部クラスを使用して、ジョブ・クラスを作成するために分配することができます。
@Bean
public JobDetail jobDetail2(){
QuartzJobBean quartzJob2 = new QuartzJobBean() {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("内部类quartzJob2----" + sdf.format(new Date()));
}
};
return JobBuilder.newJob(quartzJob2.getClass()).storeDurably().build();
}
@Bean
public Trigger trigger2(){
//JobDetail的bean注入不能省略
//JobDetail jobDetail3 = JobBuilder.newJob(QuartzJob2.class).storeDurably().build();
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2) //每2秒执行一次
.repeatForever(); //永久重复,一直执行下去
return TriggerBuilder.newTrigger()
.forJob(jobDetail2())
.withSchedule(scheduleBuilder).build();
}
プログラムを起動し、我々は、コンソールの出力の時間を見ることができます。
石英は同時にデータの永続性をサポートして、スケジューリング情報のタイミングは、データベースに永続化されてもよいです。
データベースに永続化]を選択し、我々は対応するテーブルを作成する必要があり、table文を内蔵することができクォーツ公式サイトのドキュメント\ dbTablesディレクトリ内の対応するSQLスクリプトを見つけるために、データベース解凍し、ダウンロードします。
便宜上、私はまた、プロジェクト内のソースコードのリソースにファイルを置きます。
データベース操作、我々は関連する依存関係を紹介します。ORMフレームワークは、例えばMyBatisの、休止状態またはJPA場合、それはもはや導入依存JDBCではありません。
<!--mysql连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--jdbc依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
application.yml設定ファイルでは、我々は永続的な方法を石英する宣言します。
server:
port: 10900
spring:
profiles:
active: dev
quartz:
job-store-type: jdbc #持久化到数据库
properties:
org:
quartz:
datasource:
# 新版驱动从com.mysql.jdbc.Driver变更为com.mysql.cj.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver
# 数据源需要添加时间标准和指定编码格式解决乱码 You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 1234
scheduler:
instancName: clusteredScheduler
instanceId: AUTO
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate #StdJDBCDelegate说明支持集群
tablePrefix: QRTZ_
isClustered: true
clusterCheckinInterval: 1000
useProperties: false
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 20
threadPriority: 5
ここでは、主にジョブストア型である:JDBC、実証プロジェクトは、他のORMのデータソースではなく、その場合、情報は石英ノードの下のデータソースノードで定義されたデータソースが存在するであろうように、データ・ソースであることを、データベースに永続発現すでに存在する、同じプロパティを設定するために使用することができ、もちろん、最も重要なはQuartzDataSource文です。
ここで重要なのは、@QuartzDataSourceであり、このプロジェクトは、すでにデータソースに存在する分離すること。
//Error:EmbeddedDatabaseType class not found,Druid数据源初始化需要引入spring-jdbc依赖,JPA或mybatis依赖已经包含该依赖
@Bean
@QuartzDataSource
@ConfigurationProperties(prefix = "spring.quartz.properties.org.quartz.datasource")
DataSource quartzDataSource(){
return DruidDataSourceBuilder.create().build();
}
このような持続性は、我々は、起動が完了した後、我々は我々のデータベースは、データの時限スケジューリングされている見ることができ、プロジェクトを再起動し、SQLを実行し、設定されています。
送信元アドレス:https://github.com/imyanger/springboot-project/tree/master/p25-springboot-quartz