Java:Speedment 3.2的发布–现在启用轻量级数据库微服务
幾種傳統(tǒng)的ORM不能完全遵循Java模塊封裝(JPMS)。 這通常意味著在部署微服務(wù)時(shí)會(huì)使用很多不必要的文件和類。 最新的主要版本3.2的開源
Speedance通過引入模塊系統(tǒng)支持來解決此問題,該模塊支持對(duì)云應(yīng)用程序進(jìn)行有效部署并提供更嚴(yán)格的API。
在本文中,您將學(xué)習(xí)Speedment 3.2的新增功能以及如何部署體積縮小10倍且使用更少內(nèi)存的云數(shù)據(jù)庫應(yīng)用程序。
支持Java平臺(tái)模塊系統(tǒng)(JPMS)
Speedment 3.2的最大功能無疑是對(duì)JPMS的本地支持。 現(xiàn)在,Speedment中的每個(gè)模塊都包含自己的模塊
module-info.java文件,并采用嚴(yán)格的封裝。
作為開發(fā)人員,使用模塊系統(tǒng)完全是可選的,并且由于其多版本的JAR,Speedment仍然可以在Java 8下運(yùn)行。您可以選擇現(xiàn)在,以后或從不遷移到JPMS。
其他ORM,例如Hibernate,可能支持JPMS的某些部分,但不遵循嚴(yán)格的封裝(例如,要求
--add-opens手動(dòng)添加,從而繞過保護(hù)措施以防止訪問內(nèi)部/受保護(hù)的類)。
可選模塊允許較小的微服務(wù)
Speedment模塊已在內(nèi)部進(jìn)行了重組,以減少模塊之間的耦合。 結(jié)果,某些模塊現(xiàn)在是可選的,從而允許部署甚至更小的微服務(wù)。 例如,現(xiàn)在可以分別選擇各種數(shù)據(jù)庫連接器,并且
JoinComponent也是可選的。
縮小尺寸
不再需要多個(gè)內(nèi)部模塊(例如“惰性”和“可變流”),并且對(duì)其他一些內(nèi)部模塊進(jìn)行了優(yōu)化并減小了尺寸。
強(qiáng)封裝
由于有了模塊系統(tǒng),內(nèi)部類現(xiàn)在被完全隱藏,甚至受到保護(hù),免于深度反射。 這會(huì)增強(qiáng)API(因?yàn)閮H可以訪問故意可見的類和方法),因此可以在不影響公共API的情況下將來遷移內(nèi)部類。
云部署示例
與在標(biāo)準(zhǔn)JDK下運(yùn)行應(yīng)用程序相比,可以創(chuàng)建一個(gè)自定義JRE +應(yīng)用程序+加速庫,該庫小10倍,并且使用的內(nèi)存減少了25%。 如果您在云中運(yùn)行大量微服務(wù),那么這將帶來巨大的差異。
我的文章“
Java:如何創(chuàng)建輕量級(jí)數(shù)據(jù)庫微服務(wù) ”。 數(shù)據(jù)庫應(yīng)用程序連接到帶有電影,演員等的“ Sakila”數(shù)據(jù)庫的公共MySQL云實(shí)例。它檢索十個(gè)最長的電影,并按長度順序?qū)⑺鼈兇蛴≡诳刂婆_(tái)上。
定制的JRE仍然具有真正的JVM的所有優(yōu)點(diǎn),例如垃圾收集,JIT編譯器等。只是已刪除的未使用模塊和工具。
final Speedment app = new SakilaApplicationBuilder() .withPassword( "sakila" ) .build(); final FilmManager films = app.getOrThrow(FilmManager. class ); System.out.println( "These are the ten longest films rated as PG-13:" ); films.stream() .filter(Film.RATING.equal( "PG-13" )) .sorted(Film.LENGTH.reversed()) .limit( 10 ) .map(film -> String.format( "%-18s %d min" , film.getTitle(), film.getLength().orElse( 0 )) ) .forEach(System.out::println);該應(yīng)用程序?qū)a(chǎn)生以下輸出:
These are the ten longest films rated as PG- 13 : GANGS PRIDE 185 min CHICAGO NORTH 185 min POND SEATTLE 185 min THEORY MERMAID 184 min CONSPIRACY SPIRIT 184 min FRONTIER CABIN 183 min REDS POCUS 182 min HOTEL HAPPINESS 181 min JACKET FRISCO 181 min MIXED DOORS 180 min 事實(shí)證明,與僅占用30 MB(甚至包括應(yīng)用程序和Speedment運(yùn)行時(shí))的定制JRE相比,標(biāo)準(zhǔn)開放JDK 11的存儲(chǔ)要求為300 MB。 因此,可以將存儲(chǔ)需求減少大約90%。 在檢查堆使用情況時(shí)
jmap結(jié)論是,RAM使用量也減少了約25%。
如何獲得速度3.2
新用戶可以使用以下工具下載Speedment 3.2
初始化器 。
現(xiàn)有用戶只能在其用戶中更新速度版本
pom.xml文件,并通過發(fā)出以下命令來重新生成域模型:
而已。 現(xiàn)在,您的舊Speedment應(yīng)用程序?qū)⒃谛掳姹鞠逻\(yùn)行。
如果要使用模塊系統(tǒng),請(qǐng)?zhí)砑右韵聝?nèi)容
module-info.java文件到Java 8+應(yīng)用程序的根目錄:
(*)根據(jù)數(shù)據(jù)庫類型,您必須將MySQL模塊替換為數(shù)據(jù)庫的相應(yīng)模塊。 閱讀有關(guān)各種數(shù)據(jù)庫連接器模塊的所有信息
在這里 。
資源資源
JPMS模塊的基礎(chǔ)知識(shí)
完整的Speedment版本說明歷史記錄可以在這里找到 在GitHub上加速 Speedment Initializer能夠生成項(xiàng)目模板
翻譯自: https://www.javacodegeeks.com/2019/11/java-release-of-speedment-3-2-now-enabling-lightweight-database-microservices.html
總結(jié)
以上是生活随笔為你收集整理的Java:Speedment 3.2的发布–现在启用轻量级数据库微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 半夜鸡叫周扒皮的故事(睡前故事半夜鸡叫完
- 下一篇: file.getpath_Java中Fi