我和我的团队正试图找出一种方法来“加载”安装了 Quartz.NET 模式的 Sql Server 数据库。
<add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
对于演示,我们一直将工作设置存储在 .xml (quartz_jobs.xml) 中。
我的问题是:
有没有办法从.xml(quartz_jobs.xml)(Quartz.Simpl.RAMJobStore)“加载”调度数据,然后“保存”到AdoJobStore(Quartz.Impl.AdoJobStore.JobStoreTX)?
原因是我们的“启动”数据可以很容易地写入 .xml 中。
现在,我看到将作业放入 AdoJobStore 的唯一方法是通过 Quartz.Net 对象模型在 c# 代码中“编码”。
或“回放”一些已分析的 TSQL(使用 Sql Profiler):(
直接问题在“(将 xml 放入 sql-server)”上方......更高级别的问题是“如何用启动数据填充 AdoJobStore ......这不是 C# 代码中的“编码” .
编辑:我正在输入我的代码……使用 Marko 的(接受为答案)响应。
我的配置文件:
<quartz>
<add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz" />
<add key="quartz.plugin.xml.fileNames" value="~/Quartz_Jobs_001.xml" />
<add key="quartz.plugin.xml.ScanInterval" value="10" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"/>
<add key="quartz.jobStore.dataSource" value="default"/>
<add key="quartz.dataSource.default.connectionString" value="Server=MyServer\MyInstance;Database=QuartzDB;Trusted_Connection=True;Application Name='quartz_config';"/>
<add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
</quartz>
我的代码:
NameValueCollection config = (NameValueCollection)ConfigurationManager.GetSection("quartz");
ISchedulerFactory factory = new StdSchedulerFactory(config);
IScheduler sched = factory.GetScheduler();
sched.Clear();
sched.Start();
笔记:
我必须调用 IScheduler.Start() 才能将值保留到数据库中。
添加此行的结果:
<add key="quartz.plugin.xml.ScanInterval" value="10" />
是我可以将条目添加到quartz_job.xml 中,并且它将(仅附加)数据库中的数据(在引擎运行时)。
又名,我可以“即时”“添加查找数据”(到数据库中)......而无需停止服务。一个不错的小花絮。删除作业需要重新启动。