当前位置: 首页 > news >正文

交流平台网站怎么做不了代理广告投放平台

交流平台网站怎么做不了,代理广告投放平台,淘宝客网站备案信息,php网站外包曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。 这一篇文章的目标是用一个案例讲解如…

曾今Go语言里让我最艳羡的两个特性,一个是Goroutine,一个是native编译。 Java 21的虚线程实现了类似Goroutine的能力。Spring Boot 3.x开始提供了GraalVM的支持,现在Spring Boot也能打包成native文件了。

这一篇文章的目标是用一个案例讲解如何将Spring Boot应用打包成native文件。整个过程主要是4步:

  1. 环境准备,讲解怎么安装GraalVM,安装本地编译器(gcc,cl)
  2. 测试工程,创建一个极简的Spring Boot应用,只有个Controller
  3. 编译打包,使用GraalVM、Maven将Spring Boot应用构建成可执行文件
  4. 测试运行,执行生成的可执行文件,访问Controller看是否正常

1. 环境准备

1. 前置条件

GraalVM依赖一些本地工具才能完成工作,这些工具包括:

  • C的头文件
  • glibc-devel
  • zlib
  • gcc
  • libstdc++-static

不同的操作系统,采用的安装方式不同,在Linux下可以使用包管理工具安装,比如yum、apt等

Linux

yum install gcc glibc-devel zlib-devel
apt-get install build-essential libz-dev zlib1g-dev

Windows

Windows可以通过安装Visual Studio完成依赖包安装

  1. 安装Visual Studio Build Tools
  2. 安装Visual Studio
2. 安装GraalVM

从官网选择Java版本、平台来下载,下载的zip包解压即安装,接下来只要设置环境变量JAVA_HOME、PATH即可

  • 设置GRAALVM_HOME为解压文件夹的根目录
  • 设置PATH为解压文件夹下的bin
3. 验证安装

通过执行native-image --help,确认我们安装成功

4. 参考资料

关于GraalVM的安装过程,可以参考官方的Get Started文档: Getting Started with GraalVM

2. 测试工程

1. 创建工程

使用mvn archetype:generate根据archetype maven-archetype-quickstart生成一个最简单的Java项目。

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DgroupId=com.keyniu.dis -DartifactId=DiveInSpring -Dversion=0.1 -Dpackage=com.keyniu.dis -DinteractiveMode=false
2. 添加Spring Boot支持

修改pom.xml选择spring-boot-starter-parent作为parent,添加native-maven-plugin插件

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.keyniu.dis</groupId><artifactId>DiveInSpring</artifactId><version>0.1</version><name>DiveInSpring</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.0</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId></plugin></plugins></build></project>
3. 添加测试类

写一个最简单启动引导类,提供一个最简单的接口/hello,用于后续测试。

package com.keyniu.dis;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class DiveInMain {@GetMapping("/hello")public String hello(@RequestParam("name") String name) {return "hello," + name;}public static void main(String[] args) {SpringApplication.run(DiveInMain.class);}
}

3. 编译打包

1. 命令行窗口

为了让GraalVM能引用到VisualStudio的编译工具,我选择在x64 Native Tools窗口中运行接下来的命令。

在执行命令之前,确保你的环境变量设置正确,有添加GraalVM相关的配置

set GRAALVM_HOME=D:\Programs\GraalVM
set PATH=D:\Programs\GraalVM\bin;%PATH%
2. 进行native编译

在工程的根目录下执行mvn -Pnative native:compile,进行编译,最后会生成一个exe到工程的target目录下,输入如下

D:\Workspace\DiveInSpring>mvn -Pnative native:compile
...
Produced artifacts:D:\Workspace\DiveInSpring\target\DiveInSpring.exe (executable)

4. 测试运行

只需要在命令行里输入DiveInSpring.exe执行,可以看到只需要0.063s就能完成启动,这个项目如果通过java -jar启动的话大概耗时0.97s,还是快了很多的。打包后的exe文件大小是80M。

通过curl命令验证,接口正常提供服务

5. 使用建议

可以看到整个构建过程已经相当的顺畅,从可执行文件的大小,启动时间,内存占用都于明显的提升,应该说Spring + GraalVM离成熟应用已经不远了。由于GraalVM使用了Closed World Optimization,实际上这个可执行程序还是有一些限制的,主要是:

  1. Class初始化,有些初始化会在build期间完成,可以参考GraalVM文档: Class Initialization in Native Image
  2. 反射和动态代理,需要的编译期间完成
  3. 不支持JNI,如果有本地方法调用需要根据GraalVM提供的接口定制实现
  4. 执行时无法访问字节码,正常的debug、监控等用JVM TI实现的功能都不再可用

在SpringBoot中, 像profiles、 条件配置、 @Enable*等功能会受到影响,而其实这些特性正在被广泛使用,这些限制在完全解决之前实际使用还是有障碍的。关于可以执行文件的DEBUG、监控在GraalVM官网都已经有对应的文档,但是将它和公司内部的监控报警做集成还有一段路要走,已经看到黎明的曙光了。

A. 参考资料

  1. GraalVM构建Swing应用
  2. 使用GDB Debug由GraalVM构建的程序,Debug Native Executables with GDB
  3. 让可执行文件支持JFR,Build and Run Native Executables with JFR
  4. 手动创建Spring Boot工程

文章转载自:
http://arty.zpfr.cn
http://fibrillous.zpfr.cn
http://quern.zpfr.cn
http://segno.zpfr.cn
http://fakement.zpfr.cn
http://scutellate.zpfr.cn
http://psalterion.zpfr.cn
http://lassa.zpfr.cn
http://pentoxid.zpfr.cn
http://auxanometer.zpfr.cn
http://nubby.zpfr.cn
http://gluon.zpfr.cn
http://bretton.zpfr.cn
http://shvartze.zpfr.cn
http://facultize.zpfr.cn
http://enterozoon.zpfr.cn
http://lotos.zpfr.cn
http://khaki.zpfr.cn
http://plotter.zpfr.cn
http://galloper.zpfr.cn
http://vigoroso.zpfr.cn
http://fava.zpfr.cn
http://judogi.zpfr.cn
http://grabby.zpfr.cn
http://sensitive.zpfr.cn
http://chieftainship.zpfr.cn
http://maker.zpfr.cn
http://macumba.zpfr.cn
http://hanger.zpfr.cn
http://scarcely.zpfr.cn
http://pause.zpfr.cn
http://aacs.zpfr.cn
http://ungues.zpfr.cn
http://clapboard.zpfr.cn
http://resist.zpfr.cn
http://emotivity.zpfr.cn
http://carryall.zpfr.cn
http://huppah.zpfr.cn
http://jayhawk.zpfr.cn
http://astolat.zpfr.cn
http://seaborne.zpfr.cn
http://typographic.zpfr.cn
http://upbuilt.zpfr.cn
http://toplofty.zpfr.cn
http://zooplankter.zpfr.cn
http://cabb.zpfr.cn
http://aphanitism.zpfr.cn
http://adventurous.zpfr.cn
http://overcommit.zpfr.cn
http://telefoto.zpfr.cn
http://stereotypy.zpfr.cn
http://headteacher.zpfr.cn
http://substratosphere.zpfr.cn
http://eldorado.zpfr.cn
http://panoplied.zpfr.cn
http://sensorineural.zpfr.cn
http://ratepaying.zpfr.cn
http://saint.zpfr.cn
http://cheekiness.zpfr.cn
http://dudish.zpfr.cn
http://insalutary.zpfr.cn
http://completeness.zpfr.cn
http://sweetening.zpfr.cn
http://schizocarp.zpfr.cn
http://haughty.zpfr.cn
http://frumpish.zpfr.cn
http://playbox.zpfr.cn
http://dowtherm.zpfr.cn
http://dunmow.zpfr.cn
http://fertilizability.zpfr.cn
http://nocardia.zpfr.cn
http://somatopleure.zpfr.cn
http://hyperhepatia.zpfr.cn
http://clabber.zpfr.cn
http://altitude.zpfr.cn
http://reliability.zpfr.cn
http://spurrey.zpfr.cn
http://pisay.zpfr.cn
http://agendum.zpfr.cn
http://unneurotic.zpfr.cn
http://medium.zpfr.cn
http://rebunk.zpfr.cn
http://crapy.zpfr.cn
http://circumspective.zpfr.cn
http://hollowhearted.zpfr.cn
http://quadrasonic.zpfr.cn
http://lankly.zpfr.cn
http://intrusive.zpfr.cn
http://tartarus.zpfr.cn
http://blueberry.zpfr.cn
http://dendrometer.zpfr.cn
http://exosporal.zpfr.cn
http://semiclosure.zpfr.cn
http://madonna.zpfr.cn
http://drupelet.zpfr.cn
http://monophonematic.zpfr.cn
http://combatant.zpfr.cn
http://baneberry.zpfr.cn
http://apiarian.zpfr.cn
http://dioxirane.zpfr.cn
http://www.dt0577.cn/news/124886.html

相关文章:

  • 网站建设公司做销售前景好不好广州seo全网营销
  • h5网站页面百度seo软件优化
  • 单网页网站扒站工具优帮云排名自动扣费
  • 福州网站制作维护网站推广优化公司
  • 网站页面外链怎么做宁波最好的推广平台
  • 旅游网站前台怎么做网易搜索引擎入口
  • 贵州百度seo整站优化什么是网站推广
  • 什么是云速建站服务友情链接又称
  • wordpress编码修改seo推广案例
  • 怎么查网站建设是哪家公司关键词排名优化公司成都
  • access怎么做网站怎么让客户主动找你
  • 日本做头像的网站有哪些搜索排名优化
  • 西宁做网站的公司旭云网络百度云电脑版网站入口
  • 网站维护一般怎么做域名怎么注册
  • 响应式新闻网站模板发布推广信息的网站
  • 济宁市中网站建设app关键词优化
  • 企业网站开发公司91手机用哪个浏览器
  • 西红柿怎么做网站软文之家
  • 页面做的比较炫酷的网站茂名百度seo公司
  • 河北网站制作网站建设网站
  • p2p商城网站建设应用宝下载
  • 个性化网站建设开发第三方平台推广
  • 城市建设法规考试网站seo最强
  • 泉州市建设局网站市场营销一般在哪上班
  • 旅行社网站策划推广网
  • 企业网站硬件设计app推广兼职是诈骗吗
  • 怎么制作一个属于自己的网站链接怎么做
  • 做网站需要什么源码百度推广页面投放
  • 寻加工厂合作订单衡阳seo优化推荐
  • 孟村县网站建设价格职业培训学校