【发布时间】:2014-05-30 12:47:20
【问题描述】:
刚开始使用 Quartz.Net。所以请不要介意菜鸟的问题。
我已经搜索过,但显然,我找不到面临同样问题的人。 我将 MySQL 用于我的 Quartz.Net ADO 存储。我能够成功运行服务并使用调度程序触发作业。但是没有任何日志进入数据库。我检查了是否使用错误密码获取了数据库,并且调度程序服务无法启动。因此,服务正在选择商店,但未记录被解雇的工作。我不知道为什么。
这些是我的调度服务的属性。
<quartz >
<add key="quartz.scheduler.instanceName" value="AbACScheduler"/>
<add key="quartz.scheduler.instanceId" value="instance_one"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="Normal"/>
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz"/>
<add key="quartz.jobStore.dataSource" value="default"/>
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
<add key="quartz.dataSource.default.connectionString" value="Server=localhost;Database=quartz;Uid=xxx;Pwd=xxx;"/>
<add key="quartz.jobStore.tablePrefix" value="qrtz_"/>
<add key="quartz.dataSource.default.provider" value="MySql-50"/>
<add key="quartz.jobStore.useProperties" value="true"/>
</quartz>
表前缀也正确,我使用的是 5.0 MySQL 连接器。
这是我用于测试服务的小型测试控制台代码。
private static void Main(string[] args)
{
try
{
Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };
// Grab the Scheduler instance from the Factory
IScheduler scheduler = GetScheduler();
// and start it off
scheduler.Start();
// define the job and tie it to our HelloJob class
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("job1", "group1")
.Build();
// Trigger the job to run now, and then repeat every 10 seconds
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(10)
.RepeatForever())
.Build();
// Tell quartz to schedule the job using our trigger
scheduler.ScheduleJob(job, trigger);
// some sleep to show what's happening
Thread.Sleep(TimeSpan.FromSeconds(60));
// and last shut down the scheduler when you are ready to close your program
scheduler.Shutdown();
}
catch (SchedulerException se)
{
Console.WriteLine(se);
}
Console.WriteLine("Press any key to close the application");
Console.ReadKey();
}
private static IScheduler GetScheduler()
{
try
{
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "AbACScheduler";
properties["quartz.dataSource.default.provider"] ="MySql-50";
properties["quartz.scheduler.proxy.address"] = string.Format(@"tcp://{0}:{1}/{2}", "localhost", "555",
"AbACScheduler");
// Get a reference to the scheduler
var sf = new StdSchedulerFactory(properties);
return sf.GetScheduler();
}
catch (Exception ex)
{
Console.WriteLine("Scheduler not available: '{0}'", ex.Message);
throw;
}
}
这是我的 HelloJob(取自quartz.Net)
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Greetings from HelloJob!");
}
}
我使用了用于为 MySQL 创建 ADOStore 的 DB 脚本,该脚本与 Quartz.Net 源文件一起提供。
有什么我做错了吗?请指导我。
谢谢!
【问题讨论】:
-
您遇到了什么异常?
-
我实际上没有得到任何异常。
-
您说作业没有被记录是什么意思?您希望看到哪些您在数据库中没有看到的内容?
-
不应该在 qrtz_fired_triggers 中记录一些东西吗?我不知道。我认为 Quartz 应该将其记录在 ADO Store 中,或者将仍在运行的当前作业记录在 qrtz_job_details 中;调度器状态记录在 qrtz_scheduler_state 中;实际上什么也没发生。我错过了什么吗?
标签: c# quartz.net