我刚收到一封邮件说我必须在2009-09-01(新税)更改配置值。我们的正常方法是在2009-08-31 23:59醒来,然后手动更改值。这不是一个大问题,因为这不经常发生。但它让我想知道其他人如何处理这样的问题。
原来如此!如何处理特定于日期的配置更改?
(我们在asp.net工作,但我不认为这必须是语言特定的)
溴
Carl Bergquist
答案 0 :(得分:18)
我通常将这种数据存储在像这样的数据库表中
Key, Value, EffectiveFrom, EffectiveTo
-----------------------------------------
VAT, 15.0, 20081201, 20091231
VAT, 17.5, 20100101, NULL
然后我会使用EffectiveFrom
和EffectiveTo
日期来选择在给定时间有效的值。如果利率是开放式的,则有效期可以是NULL或99991231。
这也允许您返回而无需更改配置。例如。如果有人要求您重新计算费率变化前一个月的税款。
答案 1 :(得分:2)
在linux中,有一个命令“at
”用于批量执行
有关详细信息,请参阅“man at
”。
答案 2 :(得分:2)
说实话,近乎醒来并改变它似乎是最简单和最便宜的方法。所有的技术解决方案都很好,但这取决于你的工作地点。
在我们的环境中,让某人醒来并做出改变比重新开发已经运行的软件的功能更便宜,更简单。它肯定涉及较少的测试,开发开销和成本,这意味着我们倾向于像您一样手动解决问题。
答案 3 :(得分:1)
这完全取决于情况和技术。
pjp的想法很好,如果从数据库获取配置,或者作为元数据来定义整个配置集/文件的有效时间。
另一个可能是:只需准备一个带有新条目的新配置文件,并在午夜(可能重启服务/程序)交换它们。 交换它们是可能的(如给予bei Neeraj)......
如果时间有问题,您应该处理更改,或者至少是正在运行的服务器上的更改时间(以避免时间不同步问题)。
答案 4 :(得分:1)
我们之前遇到过同样的问题,并使用以下方法处理。 如果您熟悉配置更改的来源,这是合适的。
在我们的案例中,源代码公开了一个webservice(实际上是第三方),它将返回修改后的配置详细信息。并且我们的服务器上运行了一个Windows服务,它继续轮询Web服务,如果有任何更改,将更新配置文件。
这在我们的案例中完美地运作..
您可以通过将轮询Web服务部分更改为配置更改源(例如,从某个磁盘路径读取更改)来使用此方法。但我不确定如何从电子邮件中读取配置更改。
答案 5 :(得分:1)
为什么不制作一个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();
}
的cron:
59 23 31 8 * /path/to/script.sh
你可以在手前测试这个,只需指向一些虚拟目录和文件
答案 6 :(得分:0)
我见过混合方法。而不是实际更改数据模型以包括EffectiveDate / EndDate或自己手动更改值,而是安排脚本自动更改值。此外,请确保有一个可靠的测试计划来验证所有更改。
但是,此类手动更改可能会对报告产生巨大影响。如果以前的事务直接连接到要更改的表,则历史报告中的数字可能会以非常糟糕的方式更改。确实没有“正确”的答案。
答案 7 :(得分:0)
如果我无法执行pjp的解决方案,我会使用计划任务或服务器作业在适当的时候自动更新它。 但是......我可能仍然清醒地检查它是否有效。
答案 8 :(得分:0)
看看最好的解决方案是参数化你的配置文件并添加类似于应该使用某个条目的内容。这样就无需复制或交换文件,您的应用程序只会处理它。 (这适用于配置文件方法或数据库)
如果您无法更改当前系统,并且必须更换配置文件,那么您还有两个选择:
请记住,对配置文件的任何更改都会导致您的网站重新启动,因此请务必注意可能导致的所有其他内务处理事务。 (虽然如果你坐在那里半夜复制文件的话那就完全一样了)