2016-08-19 44 views
0

所以,創建通過註釋從對象類型緩存

我想轉換我們現有的緩存(的Ehcache)點燃緩存,並遷移到Spring註解。我遇到了一些困難,使註解與我們現有的緩存一樣工作 - 我們現有的緩存是自動創建的,只要我們緩存某個新類的某些內容,並且新緩存與對象的類名稱相同。

所有當前的緩存邏輯(以及大多數正常的CRUD操作邏輯)都位於抽象類中,該類爲所有持久對象進行了擴展。然而,在研究Spring註釋時,似乎需要在方法上定義緩存名稱 - 這顯然不適用於抽象類,除非我想讓所有的對象都在同一個緩存中(可能但絕對不會理想)。理想情況下,我會將緩存名稱指定爲「#this.class.toString」,但不允許在緩存名稱中使用SPEL,就像它在密鑰中一樣。

似乎動態解析緩存的唯一方法是創建自己的緩存解析器,但出於某種原因,IgniteCache並未擴展springframework緩存,而是javax緩存,並且緩存解析器必須返回前者。所以我甚至不清楚Ignite緩存如何與Spring註釋一起工作?

這對我來說似乎是一個非常簡單的用例,所以它似乎很奇怪,春天的註釋迫使我提供一個明確的名字的方法,當我假設大多數應用程序的任何顯着大小抽象其持久性方法,我覺得我一定錯過了一些關鍵的文檔,但我肯定找不到它。有沒有一種方法可以在具體實現中指定緩存的名稱,但在抽象方法上保留緩存註釋?

謝謝!

+0

你使用Spring註釋與EhCache?如果是的話,它是如何工作的?如果不是,首先使用它們的原因是什麼?爲什麼不直接使用Ignite API? –

回答

1

你的問題是相當密集的,它不是很清楚你想要做什麼。什麼是「您現有的緩存」開始?您需要某種方式來標記您實際緩存我想要的東西的地方。我假設你已經理解你需要在那裏放置緩存註釋。至於自動創建緩存,我不會切換到不同的緩存系統試圖實現這一點。嘗試首先將您的現有緩存基礎結構遷移到緩存註釋,然後遷移到點火。

讓我們假裝你還是這樣做。你是對的CacheResolver是要走的路,它可以適應規則org.springframework.cache.Cachejavax.cache.Cache。一旦你有一個可行的設置,我會做到以下幾點:

  • 在你CacheResolver實施,注入已配置
  • 基於方法調用緩存管理器,找出緩存名稱使用(獲取方法的返回類型,提取FQN)
  • 檢查緩存管理器是否有這樣的緩存。如果有,請返回。如果不創建一個新的緩存,並添加它,然後返回

如果您使用JCacheCacheManager,你可以調用addCache創建一個新的緩存,然後包裹結果JCacheCache遵守簽名的CacheResolver

最後一點:基於FQN自動創建緩存對我來說似乎有點脆弱,特別是如果你有子類。您需要對您創建的緩存和應用於它們的設置(過期,大小等)進行一些控制。