如何在两个应用程序

时间:2017-06-26 06:03:04

标签: java spring

我有一个HashMap<String,Wallet>Wallet是一类bitcoinj。我试图使用redisson RMap在redis数据库中保存钱包对象,我得到了stackOverflow错误。那么有没有办法在不同服务器上运行的两个应用程序之间共享HashMap

以下是例外:

  

org.redisson.client.RedisException:意外的异常   在处理命令时   org.redisson.command.CommandAsyncService.convertException(CommandAsyncService.java:321)     在   org.redisson.command.CommandAsyncService.get(CommandAsyncService.java:164)     at org.redisson.RedissonObject.get(RedissonObject.java:70)at   org.redisson.RedissonMap.put(RedissonMap.java:197)at   com.examples.redis.RedissonedBitcoin.main(RedissonedBitcoin.java:27)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.codehaus.mojo.exec.ExecJavaMojo $ 1.run(ExecJavaMojo.java:282)at at   java.lang.Thread.run(Thread.java:748)

     

引起:   com.fasterxml.jackson.databind.JsonMappingException:无限   递归(StackOverflowError)(通过引用链:   org.bitcoinj.params.TestNet3Params [&#34; genesisBlock&#34;] - &GT; org.bitcoinj.core.Block [&#34; PARAMS&#34;] - &GT; org.bitcoinj.params.TestNet3Params [&# 34; genesisBlock&#34;] -

3 个答案:

答案 0 :(得分:1)

我认为到目前为止你能得到的最佳建议(因为根描述非常模糊)是开发一个简单的服务,它将为客户提供获取功能。当然你也应该考虑安全性来避免中间人攻击等等。

如果您绝对不想这样做,可以使用Chronicle-Map来保存硬盘上的数据。此外,如果您没有环境限制,您可以使用您已选择的任何内存数据库EhcacheHazelcast,Reddis准备特殊服务器。

希望它有所帮助!

答案 1 :(得分:0)

您仍然可以使用Redis共享此数据。 Redis用于会话存储。

你在杰克逊面临的问题是循环参考。

Here是一篇关于如何解决杰克逊循环引用的文章。

我还会考虑不在Redis中存储地图,而只是将钱包对象存储在redis键下,以便您可以获取单个钱包。

答案 2 :(得分:0)

您可以使用Apache Zookeeper和Github上的KeptCollections项目执行此操作。它不仅解决了通信协议,还解决了并发访问资源可能遇到的问题。