Configuration 在特定时间更改配置值

Configuration 在特定时间更改配置值,configuration,runtimemodification,Configuration,Runtimemodification,我刚收到一封邮件,说我必须在2009-09-01(新税)更改配置值。我们通常的方法是在2009年8月31日23:59醒来,然后手动更改值。这不是一个大问题,因为这种情况并不经常发生。但这让我想知道其他人是如何处理这样的问题的 所以!如何处理特定于日期的配置更改 (我们正在asp.net中工作,但我不认为这必须是特定于语言的) Br Carl Bergquist在linux中,在处有一个用于批处理执行的命令“。 有关详细信息,请参见“man at”。我通常会将此类数据存储在这样的数据库表中 Key

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

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

(我们正在asp.net中工作,但我不认为这必须是特定于语言的)

Br

Carl Bergquist

在linux中,在处有一个用于批处理执行的命令“


有关详细信息,请参见“
man at
”。

我通常会将此类数据存储在这样的数据库表中

Key,  Value,  EffectiveFrom,  EffectiveTo
-----------------------------------------
VAT,    15.0,      20081201,     20091231
VAT,    17.5,      20100101,         NULL
然后,我将使用
EffectiveFrom
EffectiveTo
日期来选择在给定时间有效的值。如果速率是开放式的,则对的影响可能为NULL或99991231


这还允许您无需更改配置即可返回。例如,如果有人要求您重新计算税率变化前一个月的税费。

这完全取决于情况和技术

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

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


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

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


在我们的环境中,让某人醒来并做出改变比重新开发一个已经运行的软件的功能更便宜、更简单。它当然涉及较少的测试、开发开销和成本,这意味着我们将倾向于像您那样手动解决问题。

我已经看到了混合方法。与其实际更改数据模型以包含EffectiveDate/EndDate,或者自己手动更改值,不如安排一个脚本来自动更改值。另外,确保有一个可靠的测试计划来验证所有的更改


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

我们以前遇到过同样的问题,并使用以下方法处理。 如果您对引起配置更改的源非常熟悉,那么这是合适的

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

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


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

如果我无法执行pjp的解决方案,我会使用计划任务或服务器作业在正确的时间自动更新它。
但是…我可能仍然醒着检查它是否工作。

为什么不制作一个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();
}
克朗:


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

看起来,最好的解决方案是对配置文件进行参数化,并添加一些内容,例如何时应该从中使用某个条目。这将消除任何文件复制或交换的需要,您的应用程序将简单地处理它。(这适用于配置文件方法或数据库)

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

  • 使用计划任务启动批处理作业,甚至是VBScript或PowerShell脚本(您可以随意使用),确保您设置了正确的凭据,以便能够在半夜执行此操作,并且您还可以在此方法中添加一些检查和缓解措施
  • 编写一个windows服务来为您执行此操作。这里有你需要的所有灵活性。编写代码,让它做任何需要做的事情,做所有需要做的检查(这样你就可以保持睡眠,而不是确保它实际工作)等等。然后,你的服务甚至可以处理调度方面的问题,一切都会很好。在这里,您可以使用XMLDOM对象和xPath,而不是替换文件,只需根据需要更新特定条目即可

  • 请记住,对配置文件的任何更改都会导致站点重新启动,因此请确保处理好所有其他可能导致的内务管理工作。(虽然如果你在半夜里坐在那里复制文件,但这完全相同)

    在Windows上,调度命令的名称是相同的。不过,有一个调度服务供您使用并不是问题的全部解决方案。我已经考虑过这个解决方案。我们不会将数据库用于所有服务,因此不会将数据库用作通用解决方案。您可以使用文件实现类似的功能。问题是,您必须
    59 23 31 8 *  /path/to/script.sh