java 程序迁移后oracle 数字溢出_Spring Boot 应用迁移到 Java 11
你的Spring Boot App需要遷移到Java 11 嗎?
最近,我們開始將應(yīng)用程序從Java 8遷移到Java 11;在此之前,Oracle宣布將從2019年初開始停止為Java 8提供商業(yè)支持。
我想限制這個主題的范圍 ,因?yàn)槲也粫敿?xì)討論Java 11及其特性,但是,我將嘗試在遷移到Java的最新版本的過程中,對遷移步驟提供一個深入的說明。
Java發(fā)布周期
首先,我已經(jīng)注意到為什么我們決定從Java 8遷移到Java 11。之后我們了解到Java 8支持將停止在2019年初結(jié)束,并將公共更新,最好是搬到最新版本的Java和演變的新特性和安全更新,然后是哪個版本的Java遷移的討論。
回顧Oracle的發(fā)布周期,每六個月發(fā)布一個新版本,每三年發(fā)布一次LTS,我們認(rèn)為最好是遷移到Java 11,并對商業(yè)生產(chǎn)版本提供三年的長期支持
商業(yè) vs OpenJDK
在遷移之前有幾個問題:
OpenJDK
第三方公司有許多開源JDK實(shí)現(xiàn),如IBM、RedHat和Azul,它們都正式支持JDK發(fā)行版。而且,Oracle支持OpenJDK,它可以在GNU通用公共許可證下免費(fèi)使用。OpenJDK還有許多組件,如JVM Hotspot、JCL(Java類庫)、javac等。
有什么新的支持嗎?商業(yè)支持嗎?
在Oracle決定遷移到一個新的破壞性版本cadence和許可之后,一個特性版本的生命周期將是6個月。六個月后的版本更新將不會提供,我們應(yīng)該提供一個LTS版本三年,只能用于購買商業(yè)支持的人。
我們可以將OpenJDK用于生產(chǎn)環(huán)境嗎?
您可以免費(fèi)在生產(chǎn)環(huán)境中使用OpenJDK,費(fèi)用由您自己承擔(dān)。與您經(jīng)常獲得更新或補(bǔ)丁的商業(yè)版本相比,OpenJDK的更新取決于實(shí)現(xiàn)者以及他們何時發(fā)布它。
訂閱與傳統(tǒng)的Oracle永久授權(quán)產(chǎn)品(如Java SE Advanced)有何不同?
永久許可的軟件有一個預(yù)先的成本加上額外的年度支持和維護(hù)費(fèi)用。訂閱以單一價格提供許可證、更新、升級和支持。您只需要為您需要的內(nèi)容和所需的時間框架付費(fèi)(個人、非商業(yè)用途仍然是免費(fèi)的,不需要訂閱),
使用容器平臺或云是否會影響我?
每個用戶(桌面)或處理器(服務(wù)器和/或云)都可以訂閱Java SE。您可以查看定價模型來準(zhǔn)確地理解和評估影響。
甲骨文許可定價
以下是Oracle發(fā)布的價格表。如果組織不準(zhǔn)備按照Oracle六個月的發(fā)布計劃頻繁更新,則應(yīng)該根據(jù)這些定價模型調(diào)整預(yù)算。使用這種許可模型,在多核處理器上運(yùn)行JDK可能會變得更加昂貴
甲骨文產(chǎn)品價格的完整列表可以在這里找到。
此外,您還可以使用使用Usage Tracker跟蹤Java使用情況。這將有助于評估您的組織對Java的使用情況,并在此基礎(chǔ)上決定使用許可的或免費(fèi)的Java版本。
或者,您可以免費(fèi)使用第三方j(luò)dk,甚至Oracle的OpenJDK版本。
Spring 對JDK11的支持
在2018年9月的某個時候,在SpringOne平臺上,宣布了Spring Framework 5.1對Java 11的支持。Spring Framework 4.3將支持最多Java 8, 5.0將支持Java 9, 5.1將正式支持Java 11。
如果您正在使用SpringBoot,那么從Spring Boot 2.1.X開始就支持Java 11。計劃從Spring Boot 2.2開始正式支持Java 12。我們已經(jīng)從Spring Boot 1.5.x遷移應(yīng)用程序到Spring Boot 2.1.1,使用Java 11編譯的代碼。這是順利的,在建設(shè)項(xiàng)目的一些小變化。
此外,如果您正在為PaaS解決方案使用Pivotal或Cloud Foundry,那么在Spring Boot 2.X.X部署的版本中還必須注意一些額外的措施。
Spring Boot 2.1使用Spring Framework 5.1,將Spring更新為所有依賴項(xiàng)的穩(wěn)定版本。因此,您可以在Spring Boot 2.1.1中正式使用Spring Starter并使用Java 11編譯。
此外,如果使用Maven構(gòu)建源代碼,則需要將Maven編譯器插件升級到> 3.5版本。
如果您使用Gradle構(gòu)建源代碼,您需要將Gradle發(fā)行版升級到5.X版本。
附加依賴項(xiàng),項(xiàng)目變更
由于Java 11已經(jīng)外部化了許多庫和依賴項(xiàng),所以我們必須顯式地向POM添加一些依賴項(xiàng)。使用JAXB、JAX-WS、JTA、JAVAX注釋等J2EE模塊的項(xiàng)目應(yīng)該顯式地添加依賴項(xiàng)和重新構(gòu)建。J2EE的所有獨(dú)立版本都可以在Maven repo或第三方站點(diǎn)中輕松獲得,因此,Java SE將它們排除在外。
為了從Spring Boot 1.5遷移,我們必須做的一些顯著更改。X to Java 11 Spring Boot 2.1項(xiàng)目:
如果您正在使用Eclipse IDE,請下載Eclipse photon或4.9
從市場上為Eclipse IDE安裝Java 11插件。
將Maven的POM< java.version>更新到11,或gradle構(gòu)建的項(xiàng)目的sourceCompatibility 更新到1.11。
使用ASM (Java字節(jié)碼庫)將Maven編譯器插件升級到3.8.0,或者下載Gradle項(xiàng)目的grade -5.0發(fā)行版。
對于Coverage ,從Cobertura遷移到Jacoco,因?yàn)镃obertura不再受支持。
更新Maven Surefire插件和故障安全插件。
如果在項(xiàng)目中構(gòu)建了單元測試(SureFire)和集成測試(FailSafe),則更新這些插件。由于Maven有不同的生命周期階段,Failsafe插件有助于在集成測試階段構(gòu)建崩潰
此外,對于Maven項(xiàng)目,您可以在命令行上設(shè)置系統(tǒng)JVM選項(xiàng),如“非法訪問-許可證”
由于Java中的強(qiáng)封裝(這使得遷移非常困難),因此自Java 9以來,默認(rèn)情況下允許從類路徑上的代碼進(jìn)行非法反射訪問。您可以使用更多選項(xiàng)來啟用反射訪問,如“permit”、“warn”、“debug”和“deny”。
Java 11支持TLS 1.3,它提供了顯著的安全性和性能改進(jìn)。
類文件錯誤——任何操作字節(jié)碼的錯誤,如cglib(3.2.8)、ASM(7.0)、Byte Buddy(1.9.0)或Javassist (3.23.1-GA)。自從Java 9以來,字節(jié)碼級別每六個月增加一次,所以您必須定期更新這些庫。您可能會收到如下警告,最好將Java 11更新為Byte Buddy。
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by j9ms.internal.JPEG (file:...) to field com.sun.imageio.plugins.jpeg.JPEG.TEM
WARNING: Please consider reporting this to the maintainers of j9ms.internal.JPEG
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
# here's the reflective access to the static field com.sun.imageio.plugins.jpeg.JPEG.TEM
模塊化:您還可以為您的應(yīng)用程序創(chuàng)建JRE映像。我們對應(yīng)用程序進(jìn)行了模塊化,從而減少了內(nèi)存占用,并在更大程度上優(yōu)化了應(yīng)用程序。
?org.apache.maven.plugins
?maven-compiler-plugin
?3.8.0
?11
? ?org.ow2.asm
? ?asm
? ?6.2
?org.apache.maven.plugins
?maven-surefire-plugin
? ?--illegal-access=permit
?org.apache.maven.plugins
?maven-failsafe-plugin
? ?--illegal-access=permit
Java 11已經(jīng)引入了許多特性,我希望限制這個主題的范圍,但是最好是探索、掌握這些特性,而不是為了使用最新版本的Java而遷移。
結(jié)論
Oracle希望加快Java的開發(fā),而應(yīng)用程序開發(fā)人員也期待著頻繁的更新。為了滿足這些需求,Oracle建議將Java轉(zhuǎn)換為嚴(yán)格的、基于時間的發(fā)布模式。這意味著Java仍然可以在OpenJDK的生產(chǎn)環(huán)境中自由使用,但是如果您使用的框架或產(chǎn)品不支持Java 9+,那么它可能不是使用OpenJDK 9或更高版本的合適的、可用于生產(chǎn)的解決方案。
正如標(biāo)題所說,我只關(guān)注于將Spring引導(dǎo)Maven項(xiàng)目遷移到Java 11。遷移中可能還有許多其他方面,比如安全性、JVM性能、證書、云就緒程度等等。請隨意對您的發(fā)現(xiàn)發(fā)表評論!
附加資源
https://www.oracle.com/technetwork/java/java-se-support-roadmap.html
https://www.oracle.com/technetwork/java/javaseproducts/overview/javasesubscriptionfaq-4891443.html
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9-and-above
https://www.oracle.com/technetwork/java/javase/javaclientroadmapupdate2018mar-4414431.pdf
沒想到!2018微信年度數(shù)據(jù)報告顯示使用最多的表情竟是...
·END·
?近期熱文:
Spring Cloud Stream 學(xué)習(xí)小清單
為自己搭建一個分布式 IM(即時通訊) 系統(tǒng)
重磅!Github 開放無數(shù)量限制的免費(fèi)私有倉庫!
百度面試題:求數(shù)組最大值
我說分布式事務(wù)之消息最終一致性事務(wù)(一):原理及實(shí)現(xiàn)
疑案追蹤:Spring Boot內(nèi)存泄露排查記
了解Java中的內(nèi)存泄漏
Git 常用命令清單,掌握這些,輕松駕馭版本管理
優(yōu)先級隊(duì)列(頭條面試題)
來談下高并發(fā)和分布式中的冪等處理
你應(yīng)該知道的7個寫出更好的 Java 代碼的技巧
百億數(shù)據(jù)量下,掌握這些Redis技巧你就能Hold全場
看完,趕緊點(diǎn)個“好看”鴨
點(diǎn)鴨點(diǎn)鴨
↓↓↓↓
總結(jié)
以上是生活随笔為你收集整理的java 程序迁移后oracle 数字溢出_Spring Boot 应用迁移到 Java 11的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 语言 练习 聊天室 01
- 下一篇: java打字游戏代码_牛逼啊!一个随时随