- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
即使我用过 Tarun Arora 的 solution到
Scheduler with the name xxx already exists.
问题,我仍然得到同样的错误。这是他的解决方案,我假设他已经正确地实现了 Singleton 模式:
public class Scheduler
{
public readonly IScheduler Instance;
public string Address { get; private set; }
public string JobName { get; set; }
public string JobGroup { get; set; }
public int Priority { get; set; }
public string CronExpression { get; set; }
private readonly ISchedulerFactory _schedulerFactory;
public Scheduler(string server, int port, string scheduler)
{
Address = string.Format("tcp://{0}:{1}/{2}", server, port, scheduler);
_schedulerFactory = new StdSchedulerFactory(GetProperties(Address));
try
{
Instance = _schedulerFactory.GetScheduler();
if (!Instance.IsStarted)
Instance.Start();
}
catch (SchedulerException ex)
{
throw new Exception(string.Format("Failed: {0}", ex.Message));
}
}
private static NameValueCollection GetProperties(string address)
{
var properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "ServerScheduler";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.threadPool.threadCount"] = "0";
properties["quartz.scheduler.proxy.address"] = address;
return properties;
}
public IScheduler GetScheduler()
{
return Instance;
}
}
我必须承认我没有使用他所说的最后一部分
If you wanted to call Scheduler then you should be using something like the code sample below…
public SchedulerMetaData GetMetaData()
{
var scheduler = new Scheduler("ServerName", Convert.ToInt32("PortNumber"), "Scheduler"));
return scheduler.GetMetaData();
}
这是我在我的应用程序中调用调度程序的方式:
IScheduler sched = new Scheduler(logger, "127.0.0.1", 555, "QuartzScheduler").Instance;
IJobDetail postbagjob = null;
ITrigger postbagJobTrigger = null;
try
{
postbagjob = JobBuilder.Create<PostbagJob>()
.WithIdentity(jobName, jobGroup)
.UsingJobData("CampaignId", campaignId.ToString())
.UsingJobData("CampaignType", campaignType)
.Build();
postbagJobTrigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity(triggerName, triggerGroup)
.WithCronSchedule(cron)
.StartAt(DateTime.Now)
.Build();
}
catch (SchedulerException ex)
{
MsgBox.Show(ex.Message);
}
它在我第一次要添加作业时起作用,但在我第二次调用它时,sched
变成了 null
。
最佳答案
我已经测试了该实现,它似乎有效。
您的解决方案中必须有其他东西阻止事情正常工作。
你确定在你的服务器上运行的作业是 PostbagJob
吗?
我建议您检查服务器的配置。确保你有这样的东西:
<add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz"/>
<add key="quartz.scheduler.exporter.port" value="555"/>
<add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler"/>
<add key="quartz.scheduler.exporter.channelType" value="tcp"/>
<add key="quartz.scheduler.exporter.channelName" value="httpQuartz"/>
关于您的 cron 触发器,您能告诉我们什么?你能发布 cron 表达式吗?
为什么不尝试将其更改为简单的触发器并查看其工作原理:
postbagJobTrigger = (ISimpleTrigger)TriggerBuilder.Create()
.WithIdentity("SampleTrigger", "QUARTZGROUP")
.WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())
.StartNow()
.Build();
您应该做的另一件事是在服务器和客户端之间与作业共享一个程序集,以便它们具有相同的签名。
我对 Scheduler
类做了一些更改。你可以找到最终结果 here .
注意:
要运行服务器和客户端,请确保您在解决方案中配置了多个启动项目(右键单击解决方案)。
更新:
更好的方法是以这种方式创建单例类:
public sealed class QuartzScheduler
{
private static QuartzScheduler instance = null;
private static readonly object padlock = new object();
private readonly ISchedulerFactory SchedulerFactory = null;
private readonly IScheduler Scheduler = null;
QuartzScheduler()
{
this.SchedulerFactory = new StdSchedulerFactory();
this.Scheduler = this.SchedulerFactory.GetScheduler();
}
public static IScheduler Instance
{
get
{
lock (padlock)
{
if (instance == null)
{
instance = new QuartzScheduler();
}
return instance.Scheduler;
}
}
}
}
如果你想read更多信息,您可以在 Jon Skeet 的博客上找到很多有用的信息。
注意:我使用的是第三个版本。
现在您可以在 Windows 窗体应用程序中简单地使用该对象:
QuartzScheduler.Instance.ScheduleJob(postbagjob, postbagJobTrigger);
仅此而已。
如果你查看我的github repo你可以找到一个可行的解决方案。
我已经在 app.config
文件中移动了客户端配置;我想自定义更容易:
<quartz>
<add key="quartz.threadPool.type" value="Quartz.Simpl.ZeroSizeThreadPool, Quartz" />
<add key="quartz.scheduler.instanceName" value="RemoteClient"/>
<add key="quartz.threadPool.threadCount" value="0"/>
<add key="quartz.scheduler.proxy" value="true"/>
<add key="quartz.scheduler.proxy.address" value="tcp://127.0.0.1:555/QuartzScheduler"/>
</quartz>
要记住的另一件事是您的客户端正在调度作业,而不是真正运行调度程序,因此您应该将线程池配置为 ZeroSizeThreadPool
。
关于c# - "Scheduler already exists issue"仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26524667/
我在 SQL 查询中使用了一个简单的 IF NOT EXISTS/WHERE NOT EXISTS 语句(我都尝试过),但我总是收到 mysql 错误,不知道为什么。尝试使用不同的引号,检查我的 My
我有 2 个表:tbl1 和 tbl2。我想从 tbl1 返回一行,其中包含以下列:col1、col2、col3、can_be_deleted 、有重要项目。这个想法是,can_be_deleted
如果您是 "t1".persona_1_id = 2,则预期结果应返回 persona_id = 4。 like --- id persona_1_id persona_2_id liked 1 2
我遇到了这个用于执行幂等插入的 github SQL 代码示例。完全按照我想要的方式工作。我不想使用 EXISTS,因为我觉得它有点困惑。可以使用联接对相同的操作进行编码吗? 下面是我在 github
public bool CheckTblExist(string TblName) { try { string cmTxt = "s
表1 Id Name DemoID 1 a 33 2 b 44 3 c 33 4 d 33 5 e 44 表2 Id DemoID IsT
我对 SQL 非常陌生。我想知道当我使用“IF EXISTS”或“IF NOT EXISTS”时会发生什么。例如:以下两个语句有什么区别: 语句 1:(存在) IF EXISTS( SELECT OR
我正在更新 exist-db 集合中的 XML 文件,我必须检查是否存在 id 以决定是否必须在我的文档中替换或插入某些内容。 我注意到随着文件的增长,查询执行时间显着恶化,我决定为我的文件添加一个索
我有一个正在尝试更新的数据库,但我不明白为什么会收到有关不存在的列的奇怪错误。当我使用“heroku pg:psql”访问数据库时,我完全可以看到该列。我找到了couple其他questions遇到类
我有一个这样的查询 SELECT ... FROM ... WHERE (SELECT EXISTS (SELECT...)) which did not return anything th
我有一个可以对数据库执行插入和更新的程序,我从 API 获取数据。这是我得到的示例数据: $uname = $get['userName']; $oname = $get['offerNa
我的批处理文件中有这个脚本 -- if not exist "%JAVA_HOME%" ( echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) -
有没有办法让 Directory.Exists/File.Existssince 区分大小写 Directory.Exists(folderPath) 和 Directory.Exists(folde
考虑使用这两个表和以下查询: SELECT Product. * FROM Product WHERE EXISTS ( SELECT * FROM Codes
我正在使用 Subclipse 1.6.18 使用 Eclipse 3.72 (Indigo) 来处理 SVN 1.6 存储库。这一切都在 Ubuntu 下运行。 我有一个项目,在我更新我的 Ecli
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
我有兴趣为需要使用 NOT EXISTS 的应用程序编写查询。子句来检查一行是否存在。 我正在使用 Sybase,但我想知道一般 SQL 中是否有一个示例,您可以在其中编写具有 NOT EXISTS
我正在尝试使用 Terraform 配置 Azure 存储帐户和文件共享: resource "random_pet" "prefix" {} provider "azurerm" { versi
下面是代码示例: CREATE TABLE #titles( title_id varchar(20), title varchar(80)
我曾经这样编写 EXISTS 检查: IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET
我是一名优秀的程序员,十分优秀!