Java 关于morphium的几个问题

Java 关于morphium的几个问题,java,mongodb,orm,Java,Mongodb,Orm,我是morphium的新手,已经通过了文档和测试,对此没有什么问题 1:Morphium对象是线程安全的吗?我们能保持对它的静态引用(只创建一次)并在所有线程中使用吗?如果是,有什么需要注意的吗?否则我们应该保留对MorphimConfig对象的静态引用,并在每次需要时从中创建Morphium对象吗 创建Morphium对象是否也会创建到mongo DB的新连接?一旦GC启动,它会自动关闭/释放连接吗 下一个问题是关于生命周期回调方法,即prestore、poststore等。这些方法应该放在实

我是morphium的新手,已经通过了文档和测试,对此没有什么问题

1:Morphium对象是线程安全的吗?我们能保持对它的静态引用(只创建一次)并在所有线程中使用吗?如果是,有什么需要注意的吗?否则我们应该保留对MorphimConfig对象的静态引用,并在每次需要时从中创建Morphium对象吗

  • 创建Morphium对象是否也会创建到mongo DB的新连接?一旦GC启动,它会自动关闭/释放连接吗

  • 下一个问题是关于生命周期回调方法,即prestore、poststore等。这些方法应该放在实体类中,并带有适当的注释。是否可以在其他地方定义它们,以使我的实体类受到最少的污染和对morphium的依赖?也就是说,如果POJO中只剩下注释,以后可能很容易切换到另一个提供者

  • 我的许多POJO都有很长的id字段(我在每个集合中不会有太多文档,所以这应该不是问题),并尝试将SequenceGenerator与PreStore()一起使用。SeqGen需要一个morphium实例,这意味着我需要在PreStore()中再创建一个morphium对象,即使一个morphium已经在处理该实体。是否无法获取触发回调的同一个morphium实例的句柄?还是将morphium实例等传递到回调中

  • 或者,我建议再提供一个类似“AutoIncrement”的注释,当它放在一个长类型ID字段上并且字段中没有值时,morphium可以在内部使用SeqGen将适当的值放入字段,并返回新的值/实体。这将使它完全透明

  • 我还想用“morphium”标记它,但无法创建新标记。如果有人能创造并标记这个问题,那就太好了

    谢谢。

    这里有一些答案:

  • Morphium是100%线程安全的。我们在几个项目中使用它作为singleton。甚至Morphium中的内置缓存也是线程安全的。 Morphium本身保留对配置对象的引用

  • Morphium使用连接池(取决于配置和使用的驱动程序)。在Morphium对象上调用close时,它将关闭所有连接并关闭池(也使用线程池)。如果您忘记关闭,则会有一个关机挂钩,在退出时要小心

  • 是和否。回调类本身只在实体类中可用。这是为了预先计算值或其他东西

  • 如果您想集中处理,还可以注册几个侦听器(StorageListener等)。这些可以按类型或全局注册

  • 不知道我是否理解正确。如果您将ID字段定义为MorphiumID,它将为您生成。如果您需要一个长的as-If,您可以使用序列生成器。这些是线程安全的,您可以将它们用作单例。如果您有多个Morphium对象,那么当序列通过mongo同步时,这也会起作用。(有一种锁定、监视算法正在进行,它确保即使是多个客户端或morphium也能获得正确的数字。)

  • 可以实现,但我看不到使用Morphium ID的区别。它将在内部转换为ObjectId,并可转换为Long和Long


  • 希望有帮助

    不管是谁把它标记为否定的:你也愿意给出一个理由吗?