Java:Speedment 3.2的发布–现在启用轻量级数据库微服务

几种传统的ORM不能完全遵循Java模块封装(JPMS)。 这通常意味着在部署微服务时会使用很多不必要的文件和类。 最新的主要版本3.2的开源
Speedance通过引入模块系统支持来解决此问题,该模块支持对云应用程序进行有效部署并提供更严格的API。

在本文中,您将学习Speedment 3.2的新增功能以及如何部署体积缩小10倍且使用更少内存的云数据库应用程序。

支持Java平台模块系统(JPMS)

Speedment 3.2的最大功能无疑是对JPMS的本地支持。 现在,Speedment中的每个模块都包含自己的模块
module-info.java文件,并采用严格的封装。

作为开发人员,使用模块系统完全是可选的,并且由于其多版本的JAR,Speedment仍然可以在Java 8下运行。您可以选择现在,以后或从不迁移到JPMS。

其他ORM,例如Hibernate,可能支持JPMS的某些部分,但不遵循严格的封装(例如,要求
--add-opens手动添加,从而绕过保护措施以防止访问内部/受保护的类)。

可选模块允许较小的微服务

Speedment模块已在内部进行了重组,以减少模块之间的耦合。 结果,某些模块现在是可选的,从而允许部署甚至更小的微服务。 例如,现在可以分别选择各种数据库连接器,并且
JoinComponent也是可选的。

缩小尺寸

不再需要多个内部模块(例如“惰性”和“可变流”),并且对其他一些内部模块进行了优化并减小了尺寸。

强封装

由于有了模块系统,内部类现在被完全隐藏,甚至受到保护,免于深度反射。 这会增强API(因为仅可以访问故意可见的类和方法),因此可以在不影响公共API的情况下将来迁移内部类。

云部署示例

与在标准JDK下运行应用程序相比,可以创建一个自定义JRE +应用程序+加速库,该库小10倍,并且使用的内存减少了25%。 如果您在云中运行大量微服务,那么这将带来巨大的差异。

我的文章“
Java:如何创建轻量级数据库微服务 ”。 数据库应用程序连接到带有电影,演员等的“ Sakila”数据库的公共MySQL云实例。它检索十个最长的电影,并按长度顺序将它们打印在控制台上。

定制的JRE仍然具有真正的JVM的所有优点,例如垃圾收集,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); 

该应用程序将产生以下输出:

 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 

事实证明,与仅占用30 MB(甚至包括应用程序和Speedment运行时)的定制JRE相比,标准开放JDK 11的存储要求为300 MB。 因此,可以将存储需求减少大约90%。 在检查堆使用情况时
jmap结论是,RAM使用量也减少了约25%。

如何获得速度3.2

新用户可以使用以下工具下载Speedment 3.2
初始化器 。

现有用户只能在其用户中更新速度版本
pom.xml文件,并通过发出以下命令来重新生成域模型:

 mvn speedment:generate 

而已。 现在,您的旧Speedment应用程序将在新版本下运行。

如果要使用模块系统,请添加以下内容
module-info.java文件到Java 8+应用程序的根目录:

 module your.module.name { requires com.speedment.runtime.application; requires com.speedment.runtime.connector.mysql; // (*)  } 

(*)根据数据库类型,您必须将MySQL模块替换为数据库的相应模块。 阅读有关各种数据库连接器模块的所有信息
在这里 。

资源资源

JPMS模块的基础知识

完整的Speedment版本说明历史记录可以在这里找到 在GitHub上加速 Speedment Initializer能够生成项目模板

翻译自: https://www.javacodegeeks.com/2019/11/java-release-of-speedment-3-2-now-enabling-lightweight-database-microservices.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件系统为,浅析Linux文件系统

原标题:浅析Linux文件系统一、文件系统层次分析由上而下主要分为用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层用户层最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。VFS层我…

求解出n以内所有能被5整除的正整数的乘积_所有最常见最经典的算法题都在这里了...

1、一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到…

怎样使set现程变得安全_使不安全变得更加安全

怎样使set现程变得安全总览 如果直接使用Unsafe,则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG(如果访问页面0)或SIGBUS(如果您访问另一个未映射的页面)时,会发生这种情况。…

linux lvm 系统快照,系统运维|在 LVM中 录制逻辑卷快照并恢复(第三部分)

LVM快照是以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小…

Spring Annotations我从没有机会使用第2部分:@ConfigurationProperties

几天前,我在检查其他内容时不小心偶然发现了Spring Boot项目中的Spring注释。 我们都知道如何将带有“ Value”的属性值绑定到类,并且我们都知道如果要绑定多个属性,这可能会很麻烦。 Spring Boot可以为您提供帮助。 您可以使用“ Configura…

python语言变量随时声明_2. Go语言五种变量创建的方法

对于只有 Python 语言经验的朋友,也许会不太理解声明这个词,在 Python 中直接拿来就用,也不用声明类型啥的。 Go 语言是静态类型语言,由于编译时,编译器会检查变量的类型,所以要求所有的变量都要有明确的类…

linux netty udp服务端,Netty实现UDP服务端

### 前言在之前的文章我已经讲过了利用Netty实现UDP客户端,大家有兴趣的话,可以参看下面文章:[Netty实现UDP客户端](https://www.jianshu.com/p/5dbc6b3c9d94)今天就让我们来学习下利用Netty实现UDP服务端吧,这里我经过整合封装&a…

会java需要多久能学会python_java好学吗?零基础学java要多久?

java好学吗?零基础学java要多久? 时间:2019-05-21 来源:华清远见 2019年3月,tiOBE 公布了编程语言排行榜,正如官方所说,本月的排名几乎没有任何有趣的变化,排名前十的依然是&…

linux memcached 运行,linux下查看Memcached运行状态

查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT…

jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第二部分)

jboss架构(文章来宾与北美红帽公司高级中间件顾问约翰赫洛克 ( John Hurlocker)合着) 在这周的技巧中,我们将放慢速度,并仔细研究可能的Red Hat JBoss BRMS部署体系结构。 在谈论部署体系结构时&#xff…

linux 关于休眠得脚本,linux – 如果条件为true,请将cron作业休眠5分钟

你有两个选择来获得这个.通常,cron与前一个作业实例是否仍在运行无关.选项1:在脚本的开头写一个锁文件,并在完成后将其删除.然后在脚本开头检查文件是否存在,如果是,则脚本结束而不做任何事情.例如,这可能是这样的:# if the file exists (-e) end the sc…

TestNG中的参数化– DataProvider和TestNG XML(带有示例)

测试自动化,或所谓的自动化测试,并不像听起来那样容易。 必须考虑所有可能的用户交互的所有排列和组合,并且在此基础上,您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序。 这就是参数化在Selenium自动化测试中起关…

java与python多态的区别_如果未调用父构造函数(与Java不同),多态性在Python中如何工作? - java...

因此,父类构造函数是在Java中调用的,而在Python中则不是。如果这意味着未创建父对象,那么如何在Python中成功调用def function-这是怎么回事? Python代码 class Parent: def __new__(self): print(f"I am the real parent co…

linux中统计java数量,linux 统计当前目录下文件数

查看当前目录下文件的个数ls -l | grep "^-" | wc -l查看当前目录下文件的个数,包括子目录里的。ls -lR| grep "^-" | wc -l查看某目录下文件夹(目录)的个数,包括子目录里的。ls -lR| grep "^d" | wc -l某目录下以.js结尾…

zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?

想从事游戏行业的建模的话,模型和贴图的知识都得学,MAYA和3DMAX只能说是基本要学的,Zbrush能够提升个人价值,之后能给你建好的模型做出好看的贴图,才能算是一个游戏建模方面能干活的合格从业人员。新手入门的话&#x…

linux 连接wifi不稳定,rtl8188ce 无线网不稳定终极解决方案 - 哆啦比猫的技术瞎扯 - Arch Linux · ドラえもん · 实时绘制...

先容我废话据说 realtek 的无线网卡就这个系列问题多多。以前连接不太稳定,但不会频繁掉线就凑活用了。自从不知哪次升级以来,掉线越来越频繁,最后已经发展到 10秒必掉 了,以至于要上网就得拼命到终端里重连网络。网上也有各种解决…

file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...

file.getpathFile API在Java中非常重要,因为它使文件系统可以访问Java程序。 尽管Java的文件API丰富,但是使用它们时仍需要了解很多细节。 关于文件路径的常见查询程序员之一是getPath() , getCanonicalPath()和getAbsolutePath()方法之间的区…

为什么python代码运行不了_为什么Python代码能运行但是PyCharm给我画红线?

PyCharm在遇到模块找不到时,会使用红色波浪线提醒开发者。这本来是一个非常好的功能,但却由于另外一个问题,会给一些Python初学者造成困扰。 这一篇文章,我们讲讲工作区导致的这个问题。 首先我们创建一个login.py文件&#xff0c…

linux 在线帮助,linux获取在线帮助

Linux系统的帮助文档非常丰富。帮助手册提供命令的使用说明。比如你若是想了解ls命令的用法,只需运行:$ man ls帮助手册旨在提供基础知识和参考信息,有时会有一些实例和交叉索引,但是基本没有那种教程式的文档。帮助手册会按系统排…

python的计算_python 计算方位角实例(根据两点的坐标计算)

知道两点坐标,怎么计算两点方向的方位角? 答:首先计算坐标增量dx,dy(两个对应坐标分量相减,终点的减始点的)。 若dx,dy中有一个为零时,根据另一个的正负决定方位角(0,90,…