【问题标题】:repetetively write to db or text file重复写入数据库或文本文件
【发布时间】:2012-06-13 13:16:43
【问题描述】:

短版: 如果你必须每分钟保存当前日期和时间,覆盖现有条目你会怎么做?

将其写入文本文件、数据库或第三个选项?并且可能会被认为是最佳实践。

我的情况是我想知道,在应用程序启动时,应用程序最后一次运行是什么时候。

长版:

我有一个性能问题,也许还有正确的编码风格。

我有一个应用程序可以跟踪食物库存,当有些东西变得陈旧并且必须删除时。 每分钟都有一个 timertask 运行,检查库存中的当前项目,以及它们是否超过了它们被认为是陈旧的日期和时间。

问题是,如果应用程序关闭并重新启动,则不会检查在停机期间过时的项目。

重复方法的代码

runeveryminute = new TimerTask() {

        @Override
        public void run() {

                for (Item i : lager.getAllItems) {

                    if (i.getMinutesTillStale == 0) {
                    JOptionPane.showConfirmDialog(MainFrame.this,"WARNING",
                    "Alarm",
                    JOptionPane.OK_CANCEL_OPTION);
                    }
                }
            }
        }
    };

我真的不同意这种检查是否过时的方式,但这是一个学校项目,所以它并不那么重要。

我向大型机添加了一个窗口侦听器,但我不确定是否可以依靠它来捕获意外崩溃,例如电源故障。

【问题讨论】:

  • 为什么不检查启动?
  • 我认为 JavaFX 可以为您节省大量工作和时间。戴夫是对的!检查启动,或放一个按钮来完成所有更新!
  • 您是否考虑过不是每分钟都写入文件,而是作为程序关闭的一部分?所以你在关机的时候写一次。
  • 我的想法是检查启动时间,但启动时我必须知道应用程序何时崩溃。有没有我应该知道的“简单”方法?
  • @Thomas 我用窗口监听器来做这件事,但据我所知,在意外崩溃期间我无法捕捉到关闭过程

标签: java database crash


【解决方案1】:

这取决于i.getMinutesTillStale 的定义方式。 如果项目在停机期间过时,getMinutesTillStale 会给出负值吗? 然后可以将条件改为i.getMinutesTillStale <= 0

建议: 您是否将项目信息存储在数据库中? 例如,itemIddatestoredexpiryperiod(or dateofExpiry) 等记录 然后您可以编写存储过程或以计时器时间为输入的查询。 它将检查所有过期的项目并将这些项目的列表发送给您。

如果这有帮助,请告诉我。

【讨论】:

  • 是的,如果它们已经过时,它将返回一个负值。但是我要避免的是为已经引起警报的项目创建警报。如果我只使用 minutestillstale 方法,我会报警所有过时的产品,不管之前的报警。
  • @user744610 是否可以将项目标记为“已经报警”?怎么说你总是会在过期时抓住每一个过期的物品?如果您只是每分钟检查一次,我看不出== 0 是准确的。一个项目可能在计时器执行前 30 秒过期——该项目是否会 getMinutesTillStale == 0
  • 如果无法确切知道程序何时崩溃,那将是下一个最好的事情,我想。
猜你喜欢
  • 2018-02-02
  • 2019-12-20
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多