/// <summary>
        /// Create a instance of the class <see cref="ConnectionStringFactory"/>.
        /// </summary>
        /// <param name="connStringCreator">a instance of the interface <see cref="IConnectionStringCreator"/></param>
        /// <returns>return a instance of the class <see cref="ConnectionStringFactory"/>.</returns>
        public static ConnectionStringFactory Create(IConnectionStringCreator connStringCreator)
        {
            AssertUtils.ArgumentNotNull(connStringCreator, "connStringCreator");

            var connStringFactory = new ConnectionStringFactory();

            logger.InfoFormat("[ConnectionStringFactory] Create ConnectionStrings by Creator:{0}", connStringCreator);
            connStringFactory.lstConnStrings = connStringCreator.CreateConnStrings();

            return(connStringFactory);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 初始连接字符串
        /// </summary>
        public static void InitConnList()
        {
            lock (obj)//对象同步 许亚修改2014.3.14
            {
                //获取连接字符串是否成功
                bool getConnectionSuccess = false;
                //获取连接字符串次数
                int getConnectionCounter = 0;

                while (!getConnectionSuccess && getConnectionCounter <= RETRY_COUNT)
                {
                    try
                    {
                        Logger.InfoFormat("第{0}次获取连接字符串开始...", getConnectionCounter + 1);
                        lock (DbListObj)
                        {
                            _lstConnStrings = ConnectionStringFactory.Create(ConfigConnStringCreator.Create())
                                              .GetConnectionStrings();

                            if (_lstConnStrings.Count == 0)
                            {
                                throw new Exception("没有要使用的字符串.请检查配置文件");
                            }
                            //日志
                            if (Logger.IsInfoEnabled)
                            {
                                var stringBuilder = new StringBuilder();
                                stringBuilder.Append(string.Format("ConnectionString初始化完成,共有数据库连接字符串:{0}个",
                                                                   _lstConnStrings.Count));
                                foreach (IConnectionString databaseModel in _lstConnStrings)
                                {
                                    stringBuilder.AppendLine(databaseModel.ToString());
                                }
                                Logger.Info(stringBuilder.ToString());
                            }
                        }
                        getConnectionSuccess = true;
                    }
                    catch (Exception ex)
                    {
                        Logger.Error(ex.Message, ex);
                        Thread.Sleep(500);
                        getConnectionCounter++;
                    }
                }
                foreach (IConnectionString connString in _lstConnStrings)
                {
                    try
                    {
                        if (!IsPlainText(connString.ConnectionString))
                        {
                            connString.ConnectionString = DES.Decrypt3DES(connString.ConnectionString);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Error("解密连接串失败:name:" + connString.Name + "  message:" + ex.Message, ex);
                    }
                    if (!ConnStringCache.ContainsKey(connString.Name))
                    {
                        ConnStringCache.Add(connString.Name, connString.ConnectionString);
                    }
                    if (!ProviderNameCache.ContainsKey(connString.Name))
                    {
                        ProviderNameCache.Add(connString.Name, connString.ProviderName);
                    }
                }
            }
        }