代码之家  ›  专栏  ›  技术社区  ›  Carl Bergquist

在特定时间更改配置值

  •  4
  • Carl Bergquist  · 技术社区  · 15 年前

    我刚收到一封邮件,说我必须在2009-09-01(新税)更改配置值。我们通常的方法是在2009-08-31 23:59醒来,然后手动更改该值。这不是一个大问题,因为这不经常发生。但这让我想知道其他人是如何处理这样的问题的。

    所以!如何处理特定于日期的配置更改?

    (我们在ASP.NET中工作,但我认为这不一定是特定于语言的)


    卡尔·伯格奎斯特

    9 回复  |  直到 15 年前
        1
  •  18
  •   pjp    15 年前

    我通常将这种数据存储在这样的数据库表中

    Key,  Value,  EffectiveFrom,  EffectiveTo
    -----------------------------------------
    VAT,    15.0,      20081201,     20091231
    VAT,    17.5,      20100101,         NULL
    

    然后我会用 EffectiveFrom EffectiveTo 选择在给定时间生效的值的日期。如果利率是开放式的,那么有效到可以为空或99991231。

    这还允许您返回而不必更改配置。例如,如果有人要求您在税率更改前重新计算上个月的税款。

        2
  •  2
  •   sud03r    15 年前

    在Linux中,有一个命令” at “用于批量执行。
    见“ man at 详情请见。

        3
  •  2
  •   Tollo    15 年前

    老实说,在接近时间的时候醒来并改变它似乎是最简单和最便宜的方法。所有的技术解决方案都很好,但这取决于你在哪里工作。

    在我们的环境中,让某人醒来并做出改变要比重新开发已经工作的软件的功能要便宜和简单。它当然需要较少的测试、开发开销和成本,这意味着我们会像您一样,手动解决问题。

        4
  •  1
  •   StampedeXV    15 年前

    这完全取决于形势和技术。

    PJP的想法是好的,如果您从数据库中获取配置,或者作为元数据来定义整个配置集/文件的有效时间。

    另一种可能是:只需用新条目准备一个新的配置文件,并在午夜交换它们(可能需要重新启动服务/程序)。 将它们与AT(如Bei Neeraj所述)交换是可能的……

    如果定时是一个问题,您应该处理更改,或者至少在正在运行的服务器上处理更改的定时(以避免时间不同步的问题)。

        5
  •  1
  •   RameshVel    15 年前

    我们以前也遇到过类似的问题,并用以下方法处理。 如果您对组织配置更改的源非常熟悉,那么这是合适的。

    在我们的例子中,源代码公开了一个WebService(实际上是第三方),它将返回一个修改过的配置详细信息。我们的服务器上运行着一个Windows服务,它不断地轮询WebService,如果有任何更改,它将更新配置文件。

    在我们的情况下,这非常有效。

    您可以通过将polling-webservice部分更改为配置更改源(比如从某个磁盘路径读取更改)来使用这种方法。但我不确定如何从电子邮件中读取配置更改。

        6
  •  1
  •   Phill Pafford    15 年前

    为什么不制作一个shell脚本来交换文件呢?在cron中运行它,并在一分钟前切换文件,如果不成功则发送警告文本,如果成功则发送电子邮件。

    这是Linux设备上的一个例子,但我认为您已经明白了这一点,并且可以在Windows设备上实现。

    脚本:

    cp /path/to/old/config /path/to/backup/dir/config.timestamp
    cp /path/to/new/config
    
    if(/path/to/new/config exsits) {
     sendSuccessEmail();
    } else {
     sendPanicTextAlert();
    }
    

    克罗恩:

    59 23 31 8 *  /path/to/script.sh
    

    您也可以在手之前测试这个,只需指向一些虚拟目录和文件。

        7
  •  0
  •   User1    15 年前

    我看过混合方法。不要实际更改数据模型以包含有效日期/结束日期,也不要自己手动更改值,而是计划脚本自动更改值。另外,确保有一个可靠的测试计划来验证所有的更改。

    但是,这种类型的手动更改可能会对报告产生重大影响。如果以前的事务直接连接到要更改的表,历史报告中的数字可能会以非常糟糕的方式更改。真的没有“正确”的答案。

        8
  •  0
  •   MartW    15 年前

    如果我不能做PJP的解决方案,我将使用计划任务或服务器作业在正确的时间自动更新它。 但是……我可能还没睡,检查一下它是否起作用了。

        9
  •  0
  •   Gineer    15 年前

    最好的解决方案是参数化您的配置文件,并添加一些东西,比如什么时候应该使用某个条目。这样就不需要复制或交换任何文件,您的应用程序只需处理它。(这适用于配置文件方法或数据库)

    如果您无法更改当前系统,并且必须交换配置文件,那么您还有两个选项:

    1. 使用计划任务来启动批处理作业,甚至是vbscript或powershell脚本(只要您觉得合适),确保您设置了正确的凭据,以便能够在午夜执行此操作,并且还可以在该方法中添加一些检查和缓解措施。
    2. 为您编写一个Windows服务。这里有你所需要的所有灵活性。编码它来做它需要做的任何事情,做你需要做的所有检查(这样你可以保持睡眠而不是确保它实际工作)等等。然后你的服务甚至会照顾到调度方面,一切都会很好。在这里,您可以使用XMLDOM对象和xpath,而不是替换文件,而是根据需要简单地更新特定的条目。

    请记住,对配置文件的任何更改都会导致站点重新启动,因此请确保您处理了可能导致此问题的所有其他维护工作。(不过,如果你在半夜坐在那里复制文件,情况会完全一样)