protected override void PreInitComponent(params string[] arguments) { if (Entities == null || Entities.Count == 0) { throw new SpiderException("Count of entity is zero."); } if (EntityPipelines == null || EntityPipelines.Count == 0) { throw new SpiderException("Need at least one entity pipeline."); } foreach (var entity in Entities) { var pipelines = new List <BaseEntityPipeline>(); foreach (var pipeline in EntityPipelines) { BaseEntityPipeline newPipeline = pipeline.Clone(); newPipeline.InitEntity(entity); if (newPipeline.IsEnabled) { pipelines.Add(newPipeline); } } if (pipelines.Count > 0) { AddPipeline(new EntityPipeline(entity.Entity.Name, pipelines)); } } bool needInitStartRequest = true; var redisConnectString = Configuration.GetValue("redis.connectString"); if (!string.IsNullOrEmpty(redisConnectString)) { RedisConnection = Cache.Instance.Get(redisConnectString); if (RedisConnection == null) { RedisConnection = new Infrastructure.RedisConnection(redisConnectString); Cache.Instance.Set(redisConnectString, RedisConnection); } } if (RedisConnection != null) { while (!RedisConnection.Database.LockTake(InitLockKey, "0", TimeSpan.FromMinutes(10))) { Thread.Sleep(1000); } var lockerValue = RedisConnection.Database.HashGet(InitStatusSetKey, Identity); needInitStartRequest = lockerValue != "init finished"; } if (arguments.Contains("rerun")) { Scheduler.Init(this); Scheduler.Dispose(); if (RedisConnection != null) { RedisConnection.Database.HashDelete(ValidateStatusKey, Identity); } needInitStartRequest = true; } if (needInitStartRequest && PrepareStartUrls != null) { for (int i = 0; i < PrepareStartUrls.Length; ++i) { var prepareStartUrl = PrepareStartUrls[i]; this.Log($"[步骤 {i + 2}] 添加链接到调度中心.", LogLevel.Info); prepareStartUrl.Build(this, null); } } RegisterControl(this); base.PreInitComponent(); }