Java生态系统拥有庞大而多样化的开源项目,旨在满足几乎所有想象得到的需求。很容易错过其中一些伟大的项目。以下是七个开源Java项目,涵盖从全栈应用程序开发到微服务、Wasm和JVM替代方案的所有内容。 ▌Vaadin’s Hilla Hilla是一个全栈框架,具有基于Java的后端和JavaScript前端。它支持响应式前端框架React和Lit。Hilla让您使用一个简单的命令来构建一个新的全栈项目:npx @vaadin/cli init --hilla foundry-hilla。这是一个NPM命令,但它将部署一个标准的Maven布局,带有一个使用Vite构建的前端目录,一切都准备好与./mvnw脚本一起运行。 Hilla在两个应用程序部分之间强制执行类型,这意味着您的IDE可以检测并传播Java API和消耗它的TypeScript前端之间的更改。在这个框架中,自动完成和重构都可以正常工作。这个功能在全TypeScript世界中的感觉类似于tRPC。 Hilla还通过JPA(在Hibernate上)集成了一些SQL数据库,如MySQL和PostgreSQL。 它有点像jHipster,但更有见解。这意味着Hilla在可以将技术粘合在一起方面不太灵活,但它为您提供了更平滑的道路。Hilla得到了良好的维护和文档支持。如果您需要使用Java构建全栈应用程序,并且如果您喜欢React或Lit作为前端,那么Hilla是一个值得考虑的优秀框架。 ▌jHipster 继续全栈框架的主题,我们有jHipster。jHipster采用非常灵活的方法,可以将多种不同的技术统一到一个使用Java作为API中间件的协同堆栈中。您可以选择几个响应式前端和各种SQL和NoSQL数据存储。 与Hilla类似,jHipster首先通过NPM包jhipster-generator工具生成应用程序。生成器将引导您完成一个问卷调查,让您对其功能有一个很好的了解。 jHipster首先让您选择单片应用程序、微服务架构或网关,让您对该框架的范围有一些了解。如果您选择单片,您就可以使用Spring WebFlux将其变成响应式样式的应用程序。接下来,您可以选择不同的身份验证样式,如JWT或Oauth 2。然后,您可以从几个数据存储中选择,如SQL、MongoDB和Cassandra,然后是第二级应用程序缓存,如Ehcache、Memcached或Redis。 jHipster生成器接下来允许添加一些其他技术:Elasticsearch用于搜索引擎,使用Spring WebSocket的WebSockets,作为异步消息代理的Apache Kafka,以及使用OpenAPI-generator的API-first开发。接下来,您可以从几个前端框架中选择,并在需要时生成管理UI,以及几个主题。 jHipster还具有国际化和测试功能,并支持Maven和Gradle。 这是相当强大的。还可以生成域模型、数据结构和与之配套的UI。jHipster是构建许多类型的Java应用程序的绝佳选择。 ▌GraalVM GraalVM项目始于2018年3月,旨在提供更广泛的虚拟机实现。GraalVM可以做到JVM所能做的一切,甚至更多:它允许消耗各种语言,并输出到各种目标执行环境。它还包括几种编译器样式,包括可以增强性能的JIT(即时)编译器。 GraalVM可以运行任何编译为LLVM的语言,包括C、C++、Rust、Swift等。它还处理字节码语言,如Java、Scala、Kotlin和Groovy。它还支持JavaScript、Python、Ruby和R语言。(未来,我们可以希望看到GraalVM支持Zig。) 这意味着我们可以获得JVM的所有一次编写,随处运行的好处,适用于各种语言。例如,GraalVM可以接受使用GCC编译为LLVM字节码的C程序,并使用lli命令运行它。或者,GraalVM可以使用clang将C代码直接编译为可执行文件。GraalVM为许多(但不是所有)语言和平台输出独立的执行版本。 它还包括对许多目标二进制文件的支持,如Wasm、Linux变体、macOS、Windows、iOS和Android。对于许多目标,GraalVM支持无需安装GraalVM即可运行的本机映像。它还允许开发人员选择执行模式,如JIT编译、AOT编译和解释,以微调性能配置文件。 GraalVM得到了良好的维护和文档支持,并拥有一个活跃的社区。总的来说,它是一个引人注目的项目,正在逐渐成为一种通用语言工具。请访问GraalVM项目主页以了解更多信息。 ▌Micronaut Micronaut是Java开发的一种新方法,旨在面向现代云和无服务器环境。它具有丰富的功能,如用于脚手架、构建、执行和测试具有一系列集成技术的项目的命令行工具。也许最重要的是,Micronaut是围绕一个启用AOT的控制反转(IOC)框架设计的,可以在面对大型代码库时保持启动时间。 此外,它还支持面向微服务的功能,如服务发现、跟踪和容器化部署,因此Micronaut是现代Java开发的一个经过深思熟虑和引人注目的选择。 Micronaut提供了一个基于Web的项目设计工具,您可以使用它来了解可以插入Micronaut核心的工具范围。这个工具在精神上类似于Spring Initializr或jHipster的在线生成器,但它采用了自己的方式。Micronaut在其核心是反应式的,支持像RxJava和Reactor这样的反应式实现,其他所有内容都建立在这个中心支柱之上。Micronaut包括自己的反应式HTTP客户端。 Micronaut中的每个节点都是一个反应式组件,可以组合成更大的微服务架构,使用像ZooKeeper或Eureka这样的中央服务代理。 Micronaut使得采用最佳实践变得容易,它是一个类似于Spring的一站式框架,但更加专注于具体的实现细节。对于在基于Java的云和无服务器环境中工作的开发人员来说,这是一个令人心动的选择。 ▌MicroStream 在基于Java的面向对象持久性的演变中,MicroStream可能代表了最终的概念精炼。它以原样接受您的运行时对象图,并允许将其以面向对象编程语义持久化到任意数量的底层数据存储中。 MicroStream允许您保持在对象和属性的思维领域中,而框架则完成了大部分保存和恢复工作。作为开发人员,您仍然需要考虑元关注点,如获取策略和持久性边界,但这些定义简单,大部分不会干扰应用程序代码,应用程序代码的工作方式与不考虑持久性时一样。 MicroStream包括根的概念,它定义了持久化树的根。一个应用程序可以有多个根,如表1所示。 列表1. MicroStream保存和恢复数据 ini 复制代码
1 2 3 4 5 6 7 8 |
<span class="code-block-extension-codeLine" data-line-num="1">// Saving</span> <span class="code-block-extension-codeLine" data-line-num="2">EmbeddedStorageManager <span class="hljs-attr">manager</span> =EmbeddedStorage.start()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="3">manager.setRoot(myObject)<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="4">manager.storeRoot()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="5">//Restoring</span> <span class="code-block-extension-codeLine" data-line-num="6">EmbeddedStorageManager <span class="hljs-attr">storageEngine</span> =EmbeddedStorage.start()<span class="hljs-comment">;</span></span> <span class="code-block-extension-codeLine" data-line-num="7"><span class="hljs-attr">myObject</span> =(MyClass) storageEngine.root()<span class="hljs-comment">;</span></span> |
MicroStream是Java中有趣的新的面向对象持久性方法,对于任何新项目来说都值得一看。 ▌TeaVM 将Java编译为Wasm(WebAssembly)仍然是一项前沿技术,但是TeaVM使得这一点成为可能。TeaVM支持将Java字节码转换为JavaScript(类似于Google Web Toolkit)和Wasm。这些可以用于创建使用浏览器内部的Java代码和库的Web应用程序。 TeaVM的工作原理是首先将代码编译为低级中间表示形式,然后进一步优化并将其转换为WebAssembly指令。生成的代码非常高效,可以在支持WebAssembly的任何现代浏览器中运行。 TeaVM的主要优点之一是它对流行的Java框架(如Spring和Hibernate)的支持。开发人员可以使用这些框架构建复杂的全栈Web应用程序,然后将代码编译为Wasm以进行Web部署。 尽管TeaVM仍然是一个新兴的项目——创建者在日常工作中使用它,然后将修复和改进推送到开源存储库——但它似乎是目前从Java到Wasm的最佳路径。 总的来说,TeaVM是一个强大而灵活的工具,用于在Java中开发Web应用程序,并为在浏览器和其他Wasm环境中使用Java提供了一个有趣的途径。 ▌Apache Flink Flink于2011年开始,已经成长为领先的事件处理框架。许多知名公司如Airbnb和Netflix都在实时处理中使用它,并在相对容易管理的包中提供了很多强大的功能。 Apache Flink将容错和状态管理融入到分布式、容器友好的形式中。它可以自动缩放以处理动态负载。 虽然在Kubernetes中使用Docker运行Flink是典型的,但Flink也可以使用像Apache Beam这样的框架在AWS Lambda、Azure Functions和Google Cloud Functions等无服务器基础设施上运行。这提供了只支付处理期间使用的计算资源的好处,并允许更轻松、更高效的扩展。 Flink在内部具有很多功能,但简单的东西相当容易理解。例如,在表2中,Flink监视端口9999上的套接字,并计算接收到的文本中的单词,将数据输出到控制台。 列表2. 使用Flink进行简单文本处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
DataStream<String> text = env.socketTextStream("localhost",9999); DataStream<Tuple2<String,Integer>> wordCounts = text .flatMap(newFlatMapFunction<String,Tuple2<String,Integer>>(){ publicvoid flatMap(String value,Collector<Tuple2<String,Integer>>out){ for(String word : value.split(" ")){ out.collect(newTuple2<String,Integer>(word,1)); } } }) .keyBy(0) .sum(1); wordCounts.print(); |
您可以看到Flink使用函数式风格,平台本身以可扩展、容错的方式将功能扩展到云基础设施中。总的来说,这是一个处理实时事件处理的令人印象深刻的项目。 作者:Matthew Tyson 更多技术干货请关注公号“云原生数据库” squids.cn,基于公有云基础资源,提供云上 RDS,云备份,云迁移,SQL 窗口门户企业功能, 帮助企业快速构建云上数据库融合生态。 作者:Squids数据库云服务提供商 链接:https://juejin.cn/post/7236021829000871995 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details前言 Idea 是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展,可以根据开发人员的需要进行定制和扩展,从而提高开发效率,今天我们就来介绍一款国产的代码编辑增强工具-Alibaba Cloud AI Coding Assistant。 什么是Alibaba Cloud AI Coding Assistant? Alibaba Cloud AI Coding Assistant 是一款在IntelliJ IDEA编辑器中的插件,这款插件是Alibaba的团队开发的,其官方介绍是:是一款AI编程手提供代码智能补全和代码示例搜索能力,帮你更快更高效地写出高质量代码。 为什么要使用它? 使用 Alibaba Cloud AI Coding Assistant 其主要有以下几个功能: 代码智能补全 通过学习海量优质的开源代码,代码智能补全让你编码如行云流水般自然高效,事半功倍地完成编码工作。 正如官网介绍的一样,它不仅可以联想到对应的类,更能给出更多的代码提示,比如这里。 海量代码示例搜索 提供代码示例搜索功能,当你需要实现不熟悉的功能时,无需跳出到浏览器中,在IDE内仅需通过简单的语言描述,即可参考海量高质量的开源代码示例,为你打造沉浸式编码体验。 我们可以点击右边的的插件图标按钮,在搜索框里面点击搜索。在code snippest选项卡中即可给你搜索到开源的相关代码示例或者相关的问题解答。 优质技术文档搜索 集成多种高质量中英文技术文档数据源,当遇到错误日志或技术难点时,在IDE内便可以轻松查阅技术文档,官方辅助伴你同行。 同样,点击右侧的 document 就能看到各个网站对这个问题的相关回答。可以说是非常方便了,不需要在浏览器和idea之间互相切换了。 其他特性 通过深度学习模型和语法分析相结合,提供更精准的代码推荐能力,让你的开发过程专注又轻松。 仅需轻量的系统资源消耗,即可享受强大的AI引擎带来的智能编码体验。 用户的隐私高于一切,代码智能补全基于离线模式,不会分享或向其它设备上传你的代码及个人信息。 如何安装…插件 windows用户打开IntelliJ IDEA编辑器,在菜单栏中选择“File” -> “Settings”;mac用户点击 “IntelliJ IDEA” -> “Settings” 。 在“Settings”窗口中,选择“Plugins”选项卡,然后点击“Marketplace”按钮。 在搜索框中输入“alibaba”,然后点击“Search”按钮,第三个既是我们需要的那个。 找到 Alibaba Cloud AI Coding Assistant ****插件后,点击“Install”按钮进行安装。 心得体会 目前关于GPT的代码提示插件,几乎都需要帐号登陆或者无法访问。可以说这款插件就显的很香了,无需注册即可使用。完全本地化,没有代码泄漏的风险。而且以后不排除这款插件会集成自己的AI大模型-「通义千问 」。 还在等什么,赶紧下载使用起来吧。 最后 本文主要介绍了Alibaba Cloud AI Coding Assistant 插件,希望对大家有所帮助,以上内容就到这里,感谢各位看官老爷们的观看,如果觉得写得好,给个赞支持一下哈!!! 作者:Aqoo 链接:https://juejin.cn/post/7226301946839023675 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
View Details1.单节点安装 官方镜像:https://registry.hub.docker.com/_/zookeeper/tags
1 2 3 4 5 6 7 8 9 10 |
docker pull zookeeper:3.6.4 # 创建卷 docker volume create zookeeper ; docker volume ls docker run -d \ -e TZ="Asia/Shanghai" \ -p 2181:2181 \ -v zookeeper:/data \ --name zookeeper \ --restart always zookeeper:3.6.4 docker run -it --rm --link zookeeper:zookeeper zookeeper:3.6.4 zkCli.sh -server zookeeper |
2.集群安装 2.1.docker-compose命令安装 Github:https://github.com/docker/compose/tree/v2.17.3
1 2 3 |
curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version |
2.2.配置docker-compose
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
cat > docker-compose.yml <<EOF version: '2' services: zoo1: image: zookeeper:3.6.4 restart: always container_name: zoo1 ports: - "2181:2181" environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo2: image: zookeeper:3.6.4 restart: always container_name: zoo2 ports: - "2182:2181" environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo3: image: zookeeper:3.6.4 restart: always container_name: zoo3 ports: - "2183:2181" environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 networks: default: driver: bridge EOF |
ZOO_MY_ID:zk服务的ID,取值为1-255之间的整数。 ZOO_SERVERS:表示zk集群的主机列表 注:这里3.5之后,ZOO_SERVERS后面要加上;2181,客户端端口。 启动:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
docker-compose up -d # 查看集群状态 docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS zoo1 zookeeper:3.6.4 "/docker-entrypoint.…" zoo1 6 minutes ago Up 6 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp zoo2 zookeeper:3.6.4 "/docker-entrypoint.…" zoo2 6 minutes ago Up 6 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp zoo3 zookeeper:3.6.4 "/docker-entrypoint.…" zoo3 6 minutes ago Up 6 minutes 2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp docker exec -it zoo1 /bin/bash # 查看选举 zkServer.sh status ps -ef | grep zookeeper netstat -lntup | grep 2181 zkCli.sh -server zoo1:2181 zkCli.sh -server zoo2:2181 zkCli.sh -server zoo3:2181 |
其他:
1 2 3 4 5 6 |
# 停止docker-compose服务 docker-compose stop # 启动docker-compose服务 docker-compose start # 重启docker-compose服务 docker-compose restart |
3.可视化工具 https://github.com/vran-dev/PrettyZoo/blob/master/README_CN.md 点击connect。 from:https://www.cnblogs.com/-k8s/p/17399169.html
View DetailsWebpack 会为打包后的代码生成 Source Map 文件,以便在运行时可以调试源代码。然而,如果开发人员在生产环境中没有正确地配置 SourceMap,攻击者就可能获得敏感信息,例如源代码和服务器配置等。
攻击者可以通过发送 HTTP 请求来获取 Source Map 文件,并从中获取敏感信息。
View Details