当前位置: 首页 > 知识库问答 >
问题:

将oracle db配置为Quartz时出错。网络调度器

鲜于勇
2023-03-14

我是新来的论坛,也学习建立石英。Net的一个业务需求。要求Quartz作为windows服务运行,并通过与Asp交互的WCF服务进行调度。Net网站。所有与工作相关的内部管理活动将通过此WCF服务处理,并致电quartz windows服务。我所取得的成果是,当我使用RAMJobStore时,这个模型工作得非常好,但是当我使用OracleDB的AdoJobStore时,我看不到相关的表使用作业详细信息和触发器进行更新。我已经下载了石英。net服务器,并将其作为windows服务安装,而无需对其代码进行任何更改。

我已经按照建议更改了实现,但现在我得到的错误如下:

无法从数据源“QuartzDB”获取数据库连接:系统。ArgumentException:““数据源”是无效的连接字符串属性

【编辑】:石英服务器的编辑配置如下:

quartz.scheduler.instanceName = ServerScheduler
    quartz.scheduler.instanceId = "AUTO

    # configure thread pool info
    quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
    quartz.threadPool.threadCount = 10
    quartz.threadPool.threadPriority = Normal

    quartz.jobStore.misfireThreshold = 60000
    quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz
    quartz.jobStore.tablePrefix = QRTZ_
    quartz.jobStore.clustered = true
    quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.OracleDelegate, Quartz
    quartz.jobStore.dataSource = QuartzDB
    quartz.jobStore.useProperties = true
    quartz.dataSource.QuartzDB.connectionString = "Data Source=quartzdb;User Id=XXXX;Password=YYYY";
    quartz.dataSource.QuartzDB.provider = OracleODP-20

    # export this server to remoting context
    quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
    quartz.scheduler.exporter.port = 555
    quartz.scheduler.exporter.bindName = QuartzScheduler
    quartz.scheduler.exporter.channelType = tcp
    quartz.scheduler.exporter.channelName = httpQuartz

下面是WCF服务级别的[编辑]GetScheduler实现:

私有静态ISScheduler GetScheduler(){try{var properties=new NameValueCollection();

         properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
         properties["quartz.threadPool.threadCount"] = "0"; 
         properties["quartz.scheduler.proxy"] = "true";
         properties["quartz.scheduler.proxy.address"] = string.Format("tcp://{0}:{1}/{2}", "localhost", "555",
                                                                             "QuartzScheduler");
                // Get a reference to the scheduler
                var sf = new StdSchedulerFactory(properties);

                return sf.GetScheduler();

}

在WCF服务中定义的CreateJobs和Trigger如下:

public string ScheduleJob<T>(string jobName, string jobGroup, string triggerName, string triggerGroup) where T : IJob
        {
            try
            {
                var scheduler = GetScheduler();
                if (scheduler != null)
                {
                    var jobKey = new JobKey(jobName, jobGroup);
                    var job = JobBuilder.Create<T>()
                        .WithIdentity(jobKey)
                        //.StoreDurably()
                        //.RequestRecovery(true)
                        .Build();

                    ICronTrigger triggerObject = CreateCronTrigger(triggerName, triggerGroup);
                    if (triggerObject != null)
                    {
                        // Validate that the job doesn't already exists
                        //if (scheduler.CheckExists(new JobKey(jobKey)))
                        //{
                        //    scheduler.ScheduleJob(job, triggerObject);
                        //}
                        scheduler.ScheduleJob(job, triggerObject);
                        //scheduler.Start();

                        return "SUCCESS";
                    }
                    _log.FatalFormat("{0}Trigger could not be instantiated", Environment.NewLine);
                    return "FAILURE";
                }
                _log.FatalFormat("{0}Scheduler could not be instantiated", Environment.NewLine);
                return "FAILURE";
            }

            catch (Exception ex)
            {
                _log.FatalFormat("{0}Job could not be scheduled", Environment.NewLine);
                return "FAILURE";
            }
        }

        public ICronTrigger CreateCronTrigger(string triggerName, string triggerGroup)
        {
            try
            {
                var trigger = (ICronTrigger)TriggerBuilder.Create()
                    .WithIdentity(triggerName, triggerGroup)
                    .WithCronSchedule("0 0/1 * 1/1 * ? *") // Queues the job every minute
                    .StartAt(DateTime.UtcNow)
                    .WithPriority(1)
                    .Build();

                return trigger;
            }

            catch (Exception ex)
            {
                _log.FatalFormat("{0}Cron trigger could not be created", Environment.NewLine);
                return null;
            }
        }

任何想法,为什么我不能连接到甲骨文。当我通过sqlplus连接时,相同的凭据工作正常。

请帮忙!

共有1个答案

孟安民
2023-03-14

您真正需要在WCF服务上设置的是以下属性:

properties["quartz.scheduler.instanceName"] = "RemoteClient"; 
properties["quartz.scheduler.proxy"] = "true"; 
properties["quartz.threadPool.threadCount"] = "0"; 
properties["quartz.scheduler.proxy.address"] = address;

从“客户端”中删除所有其他的。

 类似资料:
  • 相关: 我觉得我错过了什么?

  • TL;DR(原文的这些个符号,几个意思?) Dockers启动后,会在宿主机上创建名为docker0的虚拟网卡,并给docker0随机分配一个宿主机没有使用,且满足RFC 1918定义的私有网络地址和子网段。举例来说,在我做这个步骤时,Docker分配的子网段是172.17.42.1/16,(最后那个16是掩码,表示该子网段可以会为宿主机和容器提供65534个地址)。容器的MAC地址根据IP地址生

  • 使用 nmcli 配置网络 本部分使用 nmcli 命令配置网络,将默认的 DHCP 连接配置修改为静态配置。1 - 显示所有连接 $ nmcli connection show NAME UUID TYPE DEVICE eth0 9e02ed35-21b1-4edc-bc51-9cde226e0

  • 我很困惑,是我错过了一些设置还是有石英的错误。请为我提供一个解决方案。 实例化并启动调度程序的类(servlet)。我没有使用quartz.properties文件,因为根据说明,我不应该在hibernate.cfg.xml和quartz.properties中多次指定db凭据。

  • 我使用CalendarTriggerImpl每3天触发我的作业。我的开始时间是2012-12-10 15:00:00,结束时间是2013-12-10。但是当我在2012-12-11 11:00:00执行我的计划程序时,作业会执行。如何解决这个问题。我没有使用cron触发器,因为它会在每个月重置。所以请帮助我在2012-12-10 15:00:00、2012-12-13 15:00:00、2012-

  • Linux网络配置方法简介。 配置IP地址 # 使用ifconfig ifconfig eth0 192.168.1.3 netmask 255.255.255.0 # 使用用ip命令增加一个IP ip addr add 192.168.1.4/24 dev eth0 # 使用ifconfig增加网卡别名 ifconfig eth0:0 192.168.1.10 这样配置的IP地址重启机器后会丢失