成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Native 可以正式使用了么?

開發 架構
對 Graalvm 和 Spring native 我們一直都有關注,并且已經發表過多篇公眾號文章。對于 demo 級別的使用這里不做過多介紹,感興趣的可以查看冷神(pig 冷冷)之前的文章 Spring Native 入門實戰。

[[398344]]

本文轉載自微信公眾號「JAVA架構日記」,作者如夢技術。轉載本文請聯系JAVA架構日記公眾號。

一、前言

hello 大家好,我是如夢技術(春哥 L.cm),大家可能在很多開源項目里看到過我的身影。今天我帶領大家實戰一下spring-native。內容偏硬核,建議大家坐穩扶好(關注、收藏)。

對 Graalvm 和 Spring native 我們一直都有關注,并且已經發表過多篇公眾號文章。對于 demo 級別的使用這里不做過多介紹,感興趣的可以查看冷神(pig 冷冷)之前的文章 Spring Native 入門實戰。

二、spring native

2.1 graalvm native image 配置生成

在spring native項目(mica-native-test)編譯之后會生成下面的這些 graalvm native image 配置。

可以對動態代理、反射、資源文件和序列化進行配置。

2.2 spring native hints

spring native開放了很多的hints,用于對native image不支持的動態代理、反射、資源文件等進行配置。主要的hints如下圖:

這些 hits 會將我們自定義的配置生成到proxy-config.json、reflect-config.json、resource-config.json、serialization-config.json中。

三、mica 的適配

本節文章拿mica的部分組件作為示例,來介紹spring native hints的使用。

3.1 mica-ip2region

mica-ip2region中涉及到一個 ip 地址信息的ip2region.db文件,所以我們需要自定義資源文件的配置。

首先給mica-ip2region添加spring-native依賴。

  1. <dependency> 
  2.     <groupId>org.springframework.experimental</groupId> 
  3.     <artifactId>spring-native</artifactId> 
  4.     <version>${spring-native.version}</version> 
  5.     <scope>provided</scope> 
  6. </dependency> 

 

然后在Ip2regionConfiguration代碼中添加NativeHint注解配置ip2region.db資源文件。

  1. @Configuration(proxyBeanMethods = false
  2. @EnableConfigurationProperties(Ip2regionProperties.class) 
  3. @NativeHint(resources = @ResourceHint(patterns = "^ip2region/ip2region.db")) 
  4. public class Ip2regionConfiguration { 
  5.    @Bean 
  6.    public Ip2regionSearcher ip2regionSearcher(ResourceLoader resourceLoader, 
  7.                                     Ip2regionProperties properties) { 
  8.       return new Ip2regionSearcherImpl(resourceLoader, properties); 
  9.    } 

再次編譯spring native項目(mica-native-test)我們可以看見ip2region.db文件已經添加進resource-config.json。

最后運行項目:

測試mica-ip2region(完美):

3.2 mica-captcha

mica-captcha主要是幾個字體文件需要添加下面的配置,具體過程同上這里不做過多描述。

  1. @NativeHint(resources = @ResourceHint(patterns = "^fonts/.*.ttf")) 

注意:由于驗證碼涉及到字體和 awt 會涉及到下面2個問題。

  • 以docker編譯運行native image會遇到字體問題需要安裝字體:
  1. yum install fontconfig -y && fc-cache --force 

更多詳見:https://github.com/oracle/graal/issues/817

  • java.lang.UnsatisfiedLinkError: no awt in java.library.path異常目前graalvm 21.1.0mac 上還是有問題。

具體詳見:https://github.com/oracle/graal/issues/2842

3.3 mica-caffeine

由于caffeine中使用了不少的unsafe,所以添加了 mica-caffeine 依賴之后,mica-native-test能啟動成功都折騰了我很長時間。各種報錯,不過都有提示,我們可以按照提示添加Hints,如下圖:

image.png

在添加下面這么多Hints之后終于可以啟動成功了!!!

  1. @NativeHint(types = { 
  2.    @TypeHint(types = CaffeineAutoCacheManager.class, access = AccessBits.ALL), 
  3.    @TypeHint(types = CaffeineCacheManager.class, access = AccessBits.ALL), 
  4.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.UnsafeAccess"
  5.       fields = @FieldHint(name = "UNSAFE", allowUnsafeAccess = true), 
  6.       access = AccessBits.PUBLIC_METHODS 
  7.    ), 
  8.    @TypeHint(types = Thread.class, access = AccessBits.DECLARED_FIELDS), 
  9.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.PS"
  10.       fields = { 
  11.          @FieldHint(name = "key", allowUnsafeAccess = true), 
  12.          @FieldHint(name = "value", allowUnsafeAccess = true
  13.       }, 
  14.       access = AccessBits.DECLARED_CONSTRUCTORS 
  15.    ), 
  16.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.PSA"
  17.       fields = @FieldHint(name = "accessTime", allowUnsafeAccess = true), 
  18.       access = AccessBits.DECLARED_CONSTRUCTORS 
  19.    ), 
  20.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.PSW"
  21.       fields = @FieldHint(name = "writeTime", allowUnsafeAccess = true), 
  22.       access = AccessBits.DECLARED_CONSTRUCTORS 
  23.    ), 
  24.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.StripedBuffer"
  25.       fields = {@FieldHint(name = "tableBusy", allowUnsafeAccess = true)}, 
  26.       access = AccessBits.ALL 
  27.    ), 
  28.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.PSWMS", access = AccessBits.DECLARED_CONSTRUCTORS), 
  29.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.SSA", access = AccessBits.ALL), 
  30.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.SSLA", access = AccessBits.DECLARED_CONSTRUCTORS), 
  31.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.SSLMSW", access = AccessBits.DECLARED_CONSTRUCTORS), 
  32.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.SSMSW", access = AccessBits.DECLARED_CONSTRUCTORS), 
  33.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.BoundedBuffer", access = AccessBits.ALL), 
  34.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.BoundedBuffer$RingBuffer", access = AccessBits.ALL), 
  35.    @TypeHint(typeNames = "com.github.benmanes.caffeine.cache.BLCHeader$DrainStatusRef"
  36.       fields = @FieldHint(name = "drainStatus", allowUnsafeAccess = true), 
  37.       access = AccessBits.ALL 
  38.    ) 
  39. }) 

喜大普奔,可以了???真的嗎???caffeinecache 讀取緩存又開始報異常了!!!

至此再也不想折騰了,周末的上午全在折騰這玩意了。

四、總結

 

spring-native目前還是處于孵化階段,如果是未使用第三方組件簡單的項目大家可以試試,稍大型建議大家還是再等等。我們也會持續關注并輸出相關文章。

【責任編輯:武曉燕 TEL:(010)68476606】

 

責任編輯:武曉燕 來源: JAVA架構日記
相關推薦

2021-07-25 21:36:24

Windows操作系統功能

2023-06-24 17:09:06

React前端

2023-09-07 10:31:27

2020-07-16 10:30:03

iOS 13.6iPhone車鑰匙

2021-10-21 22:01:54

GNOME桌面主題桌面應用

2020-12-02 11:06:25

Windows 10Android

2022-12-09 09:46:55

插件Lombok

2019-12-18 15:11:42

數組集合數據

2022-08-11 17:14:37

Java

2021-08-18 10:36:43

Sping社區實驗項目服務器

2013-03-01 14:11:34

谷歌眼鏡

2025-05-23 08:11:22

2018-06-28 09:06:27

DNS技術CDN

2025-02-24 10:36:15

2017-03-21 21:37:06

組件UI測試架構

2023-12-15 14:57:39

ReactNativeFabric

2011-04-25 10:21:00

2011-03-03 17:03:04

零缺陷系統

2010-03-01 17:18:33

Fedora skin

2024-05-30 07:37:30

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区高清不卡 | www.国产精| 国产成人高清视频 | 久久国产精品视频 | 2019天天干夜夜操 | 国产精产国品一二三产区视频 | 成人av免费网站 | 国产视频中文字幕 | 国产高清视频一区二区 | 国产极品粉嫩美女呻吟在线看人 | 天天射网站 | 91精产国品一二三区 | 伦理一区二区 | 天天干夜夜操 | 先锋资源站| 在线视频第一页 | 欧美片网站免费 | 91视频大全 | 欧美一区二区三区 | 久久久久无码国产精品一区 | 啪一啪| 一区二区三区四区免费在线观看 | 日本高清视频网站 | 久久精品国产精品青草 | 欧美一区二区三区在线观看 | 日韩久久久久久久久久久 | 欧美日韩a| 国产成人精品a视频一区www | 日韩一区欧美一区 | 久久在线视频 | 天堂资源视频 | av天天看 | 国产探花在线精品一区二区 | 亚洲人a | 欧美日韩亚 | 国产999精品久久久 日本视频一区二区三区 | 中文字幕第一页在线 | 粉嫩粉嫩芽的虎白女18在线视频 | 凹凸日日摸日日碰夜夜 | 99色视频| 国产最新视频在线 |