亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring-native的介紹及應用

發布時間:2021-06-23 14:36:40 來源:億速云 閱讀:2758 作者:chen 欄目:編程語言

本篇內容主要講解“spring-native的介紹及應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“spring-native的介紹及應用”吧!

<謹供參考>

  • 官方介紹

Spring Native提供了使用GraalVM 本機圖像編譯器將Spring應用程序編譯為本機可執行文件的支持。
與Java虛擬機相比,本機映像可以為許多類型的工作負載提供更便宜,更可持續的托管。這些包括微服務,功能工作負載,非常適合容器和Kubernetes
使用本機映像具有關鍵優勢,例如即時啟動,即時峰值性能和減少的內存消耗。
GraalVM本機項目希望隨著時間的推移會改善一些缺點和折衷方案。構建本機映像是一個繁重的過程,比常規應用程序要慢。預熱后,本機映像具有較少的運行時優化。最后,它比具有某些不同行為的JVM還不成熟。
常規JVM和此本機映像平臺之間的主要區別是:
	- 在構建時將未使用的零件刪除。
	- 反射,資源和動態代理需要配置。
	- 類路徑在構建時是固定的。
	- 沒有類延遲加載:可執行文件中附帶的所有內容都將在啟動時加載到內存中。
	- 一些代碼將在構建時運行。
	- 圍繞Java應用程序的某些方面存在一些局限性,這些局限性未得到完全支持。

簡單來說,就是更快.更短,更小

  • 更快的啟動速度

  • 更短的響應時間

  • 更小的內存消耗

十分適用于目前互聯網環境的快捷開發和微服務架構的項目

而Spring Native的基礎則是Graalvm,一個由oracle開發維護的多語言編譯/運行時平臺. 它的官方說法是高性能JDK發行版,目前已支持到7種語言,包括不僅限于java.ruby.node等 基于graalvm開發的java框架還有一個國內目前還不算太火的Quarkus,在一些油管up的測評視頻中,證明quarkus(1.13)要比spring native(0.7x)更快更小,我也寫了quarkus快一年了,即使拋棄graalvm本身,也確實比springboot要更快,更短

我用的是0.92,僅支持springboot2.4.5 還有,機器的內存最好備到8個G,因為我測試時候memory in use一度飆升到5個多G,這可能也是graalvm為了更快產生的代價把

  • pom

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>org.xiaowu</groupId>
	<artifactId>behappy-springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>behappy-springboot</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
		<spring-native.version>0.9.2</spring-native.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-webflux</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.experimental</groupId>
			<artifactId>spring-native</artifactId>
			<version>${spring-native.version}</version>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.projectreactor</groupId>
			<artifactId>reactor-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<classifier>exec</classifier>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
					<image>
						<builder>paketobuildpacks/builder:tiny</builder>
						<env>
							<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
						</env>
					</image>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.experimental</groupId>
				<artifactId>spring-aot-maven-plugin</artifactId>
				<version>${spring-native.version}</version>
				<executions>
					<execution>
						<id>test-generate</id>
						<goals>
							<goal>test-generate</goal>
						</goals>
					</execution>
					<execution>
						<id>generate</id>
						<goals>
							<goal>generate</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<profiles>
		<profile>
			<id>native-image</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.graalvm.nativeimage</groupId>
						<artifactId>native-image-maven-plugin</artifactId>
						<version>21.0.0.2</version>
						<configuration>
							<!-- The native image build needs to know the entry point to your application -->
							<mainClass>org.xiaowu.behappy.BehappySpringbootApplication</mainClass>
							<!--https://blog.csdn.net/u013794093/article/details/100094871?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs-->
							<buildArgs>
								<!--https://blog.csdn.net/thomasyuang/article/details/84318184-->
								<arg>--static</arg><!--解決standard_init_linux.go:178: exec user process caused "no such file or directory"-->
								<!--<arg>libc=musl</arg>gcc編譯過程中會有些許問題,這個參數僅jdk11支持-->
							</buildArgs>
						</configuration>
						<executions>
							<execution>
								<goals>
									<goal>native-image</goal>
								</goals>
								<phase>package</phase>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
	<repositories>
		<repository>
			<id>spring-releases</id>
			<name>Spring Releases</name>
			<url>https://repo.spring.io/release</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-releases</id>
			<name>Spring Releases</name>
			<url>https://repo.spring.io/release</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
</project>
  • 測試Controller

/**
 * 小五
 */
[@RestController](https://my.oschina.net/u/4486326)
public class TestController {

    @GetMapping("/")
    public String test() {
        return "TestController";
    }
}

linux環境下安裝各種環境(windows需要安裝各種c的運行庫,安完還是缺...linux和mac要好很多)

  • graalvm

使用SDKMan安裝適當的SDK和GraalVM插件,SDKMan是Java SDK管理工具,可讓輕松安裝和配置GraalVM所需的依賴項(截至當日,支持8和11)
curl -s "https://get.sdkman.io" | bash
sdk install java 21.0.0.r8-grl
sdk use java 21.0.0.r8-grl
gu install native-image
  • gcc,unzip,zip,glibc-static,zlib

yum install -y glibc-static zlib zlib-devel zip unzip
sudo yum group install "Development Tools"
該命令安裝了一堆新的軟件包,包括gcc,g++和make。
gcc --version

然后spring native提供了兩種構建方式

  1. 將Spring Native應用程序構建到Docker映像中

運行以下命令以構建Docker映像文件,并將編譯后的代碼包裝在構建包中。
mvn spring-boot:build-image
使用Docker運行映像:
docker run -p 8080:8080 docker.io/xxx
  1. 將Spring Native應用程序構建到可執行文件中

運行以下命令編譯Spring Boot應用程序的本機二進制可執行文件:
mvn clean -Pnative-image package
通過運行以下命令來執行本機應用程序:
target/spring-native-example
  • 這里我用是第二種方式

spring-native的介紹及應用

速度可以說是相當快了
接下來給他做成docker容器再看下
FROM scratch
COPY target/org.xiaowu.behappy.behappyspringbootapplication /app
ENTRYPOINT ["/app"]

docker build -f Dockerfile -t behappy:1.0 .
docker run -p 8080:8080 --name springnative -d behappy:1.0

spring-native的介紹及應用

再貼兩張youtube上某up做的對比圖

spring-native的介紹及應用

項目僅加了一個webflux
前者是native的,后者是非native的,
可以看到size是有明顯縮小的

spring-native的介紹及應用

上圖的啟動時間是3秒
下圖可以看到0.1秒多,spring native官方介紹過,正常的一般啟動都不會超過100毫秒,可以看出啟動時間上的差距是巨大的
右面是兩者的cpu消耗,io占用等信息,也能看出兩者有著明顯的差距

到此,相信大家對“spring-native的介紹及應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大港区| 奉化市| 合肥市| 洛川县| 如皋市| 高青县| 双鸭山市| 交口县| 砀山县| 阿拉善盟| 介休市| 康乐县| 虞城县| 鸡西市| 仁怀市| 西丰县| 独山县| 肥乡县| 义马市| 凤山市| 冀州市| 开封市| 东阿县| 威宁| 游戏| 乐清市| 潜山县| 巢湖市| 东海县| 平顺县| 澎湖县| 会泽县| 玉环县| 深州市| 恩施市| 莲花县| 密云县| 天峨县| 金华市| 盐城市| 南川市|