0

我需要创建一个由调度程序定期运行的应用程序。

从运行到运行,我需要记住以前操作的结果——它们是否成功完成,电子邮件是否发送等等。

只能保存最后一次操作发生的计数器和日期。

临:

  • 它可以很容易地被人类阅读。

反对:

  • 它需要额外的努力来转换为类结构。

我认为可以使用序列化——在这种情况下,我已经收到了课程,所以如果将来需要保留一些额外的信息,我只需要重新制作课程,而不是保存系统。

是否可以结合这两个系统的优点?

4

5 回答 5

2

它需要额外的努力来转换为类结构。


这不应该增加真正的开销。所以如果你的系统足够小,我会推荐这个版本。
如果它真的很复杂,请使用带有 ORM(或 NoSQL 或您喜欢的任何东西)的数据库。我认为这将结合这两个选项的优点。

于 2013-05-27T08:38:07.240 回答
1

如果您可以将先前操作的结果包装到一个对象中,我建议您使用XStream将其序列化为 XML(或 JSON) 。这是迄今为止我用过的将 Java 对象序列化为平面文件的最简单方法。特别是如果您使用注释:http: //x-stream.github.io/annotations-tutorial.html

于 2013-05-27T08:55:58.223 回答
1

根据用例,如果 ORM 仅用于计划任务的持久性,则它可能是一种过度杀伤力。我认为当使用外部调度时,Java 序列化应该足以满足您的情况。请记住二进制兼容性以允许模型中的未来更改,例如定义 serialVersionUID 等。请参阅建议

您还可以尝试一些简单的 XML 序列化,例如XStream

于 2013-05-27T09:00:17.637 回答
1

只能保存最后一次操作发生的计数器和日期。

应该很容易从文件中读取这两个并用它们实例化一个对象。如果你序列化,你应该记住,如果你的类已经改变,你不能反序列化。因此,您应该使用 xml。您还可以使用这些信息转储和读取 json 文件,这也是可读的并且开销较小。

我会看一下我最了解的解决方案,但我不会使用普通的 Java 序列化。

于 2013-05-27T09:07:20.543 回答
1

取决于您对结果对象的要求:

  1. 如果您将其转换为包含 JSON 或 XML 的文件,那么您可以与非基于 Java 的应用程序共享此对象,并且可以轻松地通过网络传输它们。

  2. 如果您使用 java 序列化来序列化结果对象,那么它的客户端只能是基于 java 的应用程序,但它们将比第一个选项更容易共享和传输并且速度更快。

    当然,这两种方法都有其权衡,因此您需要根据应用程序的要求进行选择。

于 2013-05-27T09:15:55.337 回答