站酷高高手,wordpress图片页,大连市建设厅网站,wordpress爬虫采集项目从jdk8升级到jdk17#xff0c;我不是为了追求java 17的新特性#xff08;准确来说也还没有去了解有什么新特性#xff09;#xff0c;也不是为了准确与时俱进#xff0c;永远走在java行列的最前端#xff0c;纯粹因为项目需要#xff0c;因为我们都知道#xff0c;… 项目从jdk8升级到jdk17我不是为了追求java 17的新特性准确来说也还没有去了解有什么新特性也不是为了准确与时俱进永远走在java行列的最前端纯粹因为项目需要因为我们都知道只要项目能跑你就不要动它 目录 背景目标环境安装Java 17下载方式一方式二 配置环境变量与java8共存 SpringBoot3.0.0Maven 3.6.3Idea 2022.2.1下载安装 配置IDEA和项目 java17环境IDEA中Maven设置IDEA环境配置Setting设置Project Structure设置 问题处理运行项目出现 无效的源发行版: 17hibernate unknownERROR StatusLogger Unable to create Lookup for ctxjava.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not presentswagger替换为openapi后会有报错flyway问题动态数据源问题 最后 背景 Java 程序员应该都熟悉下面这句话 版本任他发我用 Java 8 。自从 2014 年 3 月 Java SE 8.0(1.8.0)发布到现在已经是第九年21 年 9 月 Java SE 17(LTS)也已经发布但绝大部分 Java 开发人员依然使用 1.8 版本。懒惰是其中的一方面原因生产环境稳定大于一切的压力之下既然 Java8 已经表现很好没有什么问题那么也就没有必要冒险去做版本升级了毕竟“升级”在很多情况下都意味着工作量和风险。 不过在今年之后这个情况发生了变化。由于厂商纷纷宣布即将停止 1.8 版本的更新维护Oracle 于 2019 年 1 月停止商用用途中的更新2020 年 12 月停止非商用版本更新AdoptOpenJDK 于 2023 年 9 月或之前停止更新Amazon Corretto 于 2023 年 6 月或之前停止更新。意味着 23 年 9 月之后将不再有厂商继续更新 Java 8。
2014年发布的java SE 8和2017年发布的java EE 8至今还是使用最广泛的java版本大部分java开发者对于java 8之后的升级总是敬而远之这跟java 9以后的破坏性升级和oracle的商用协议有关但随着9月java 17的发布我们有更多理由去升级和在新项目中使用更新的java了。 目标
本次操作是mac版本下的
Java 8 应用升级到 Java 17SpringBoot 版本升级到 SpringBoot3.0.0推荐的 Java 17 开发环境包括Maven 3.6.3、Idea 2022.2.1 环境安装
Java 17
下载
方式一
下载链接JDK开发工具包17.0.9下载 要选择对应的版本去下载比如我mac在左上角的苹果标志直接点击弹出菜单点击“关于本机”确认一下本机电脑的CPU是Intel还是ARM。
如果是Intel点击“x64 DMG Installer”的右边网址或者选择 macOS 下的 ARM64 DMG适用于苹果芯片如 M1、M2 等 我的是M2所以如上图
按照步骤直接默认选项安装即可。
方式二
在 mac 下也可以使用 sdkman 来安装 jdk 和 maven 其实我一开始是使用的此方法但是由于那会网络一直不稳定最后还是使用的方法一
命令行执行下面操作即可sdk 相关命令可以使用 sdk help 查看
curl -s https://get.sdkman.io | bashsdk install java 22.3.r17-grl
sdk install maven 3.8.2下载中截图
由于我网络不稳定出现如下报错
Installing script cli archive...
* Downloading...
curl: (28) Failed to connect to github.com port 443 after 75015 ms: Couldnt connect to servercurl --fail --location --progress-bar ${SDKMAN_SERVICE}/broker/download/sdkman/install/${SDKMAN_VERSION}/${SDKMAN_PLATFORM} $sdkman_zip_file: command failed with exit code 28.然后我就再次执行命令
curl -s https://get.sdkman.io | bash结果提示已经存在可以强制更新
算了我还是卸载重新安装吧
rm -rf $HOME/.sdkman再次执行上面的安装命令 继续有报错出来
touch: /Users/myName/.bash_profile: Permission denied
touch $sdkman_bash_profile: command failed with exit code 1.可以看到上面报错是要修改.bash_profile文件我们可以自己修改
vim ~/.bash_profile在.bash_profile文件最后一行加上下面内容
export SDKMAN_CANDIDATES_APIhttps://api.sdkman.io/2
[[ -s $HOME/.sdkman/bin/sdkman-init.sh ]] source $HOME/.sdkman/bin/sdkman-init.sh然后执行
source ~/.bash_profile下载jdk17
sdk install java 22.3.r17-grl下载中 我到这里又出现了下载超时的问题了心里一万只跑过啊于是我果断去用了方式一 配置环境变量与java8共存
由于之前也是一直使用java8所以下载安装完java17后可以看下java版本是否有变
还是java8因为我们的环境还是没有变我的是.bash_profile文件
先看看下载的jdk17在不在默认下载的目录/Library/Java/JavaVirtualMachines 接下来就是更换环境变量使用jdk17了如下
vim ~/.bash_profile增加如下内容
export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
#export JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home
export PATH$JAVA_HOME/bin:$PATH:.
export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.然后执行保存再查看版本
source ~/.bash_profile
java -version可以发现已经是java17了
不同Java版本间的切换 若要将Java17切换到Java其他版本只需要将.bash_profile文件中的JAVA_HOME改成Java其他版本的目录即可修改的过程和之前配置JAVA_HOME环境变量类似。 SpringBoot3.0.0
查看springBoot版本 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.5/versionrelativePath/ !-- lookup parent from repository --/parent这里只要更换版本即可
version3.0.0/version然后reload maven一定会有报错这个我在下面也会有提到 Maven 3.6.3
这里需要注意下载的版本是否是你的IDEA版本支持的Maven版本 Maven官网 点击 Download 拉到最底下下载历史版本 下载解压更新系统变量就不说了 Idea 2022.2.1
下载
因为社区版免费使用所以下载社区版安装就好。下载的版本是Idea 2022.2.1就可以不做过多阐述。下载地址https://www.jetbrains.com/idea/download/#sectionmac
安装
mac 下ideaIC-2023.1.2-aarch64.dmg 直接双击安装按照说明完成操作即可。接下来就是启动。配置IDEA和项目 java17环境
IDEA中Maven设置
进入Idea File-settings…-Build,Execution,Deployment-Build Tools-Maven 还需要配置另两个地方Runner和Importing内选择Java17
IDEA环境配置
Setting设置 Project Structure设置
File - Project Structure… ⚠️如果编译项目出现 java: 无效的源发行版: 17则需要设置
全部配置完毕就可以启动项目了这就会遇到下面一堆的问题了但是不要慌我们一个个解决 问题处理
从这里开始就是本篇的重点了一个接一个地处理问题。运行项目出现 无效的源发行版: 17
这个可能性是有两种 环境变量配置后没有成功保存 打开shell执行java -version命令如果出现的是jdk17则说明环境变量正确反之再去修改环境变量 idea在更换jdk后没有重启
如果没问题查看项目目录 External Libraries 外部库中使用的应该就是Java17如下
hibernate unknown
maven中Dependencies引入的hibernate报错
其实就是版本兼容的问题 需要删除原来的依赖然后升级版本6.1.7.Final dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-core/artifactIdversion6.1.7.Final/version/dependency依赖默认情况下都在如下路径后面的删除依赖也是同样的
ERROR StatusLogger Unable to create Lookup for ctx
启动报错
ERROR StatusLogger Unable to create Lookup for ctxjava.lang.NoClassDefFoundError: org/apache/logging/log4j/util/ServiceLoaderUtil
Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.ServiceLoaderUtilat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)这个可以看官方发行版本log4j版本2.22.0 其实也是版本兼容的问题需要删除原来的依赖然后升级版本2.22.0
dependencygroupIdorg.apache.mvnging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.22.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion2.22.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-jul/artifactIdversion2.22.0/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.22.0/version/dependencyjava.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
启动报错
java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest这个问题让我找了好半天的解决办法 参考链接
Springfox Type javax.servlet.http.HttpServletRequest not presentSpring Boot3.0(六)整合swaggerType javax.servlet.http.HttpServletRequest not present #4061
原因是SpringFox 和 Spring Boot 3 的组合将无法工作。这里就需要替换了
解决 需要删除原来的依赖
删除SpringFox的引用并且对于spring-boot和swagger-ui之间的集成 dependencygroupIdio.springfox/groupIdartifactIdspringfox-boot-starter/artifactIdversion${springfox.version}/version/dependency将库添加到项目依赖项列表中无需额外配置
dependencygroupIdorg.springdoc/groupIdartifactIdspringdoc-openapi-starter-webmvc-ui/artifactIdversion2.2.0/version
/dependencyswagger替换为openapi后会有报错
这里替换为如下类即可 更多内容可以查看springfox迁移指南
flyway问题
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration and org.flywaydb.core.api.configuration.FluentConfiguration
***************************APPLICATION FAILED TO START***************************Description:An attempt was made to call a method that does not exist. The attempt was made from the following location:org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration.configureProperties(FlywayAutoConfiguration.java:234)The following method did not exist: org.flywaydb.core.api.configuration.FluentConfiguration org.flywaydb.core.api.configuration.FluentConfiguration.oracleSqlplus(boolean)The calling methods class, org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration, was loaded from the following location:Action:Correct the classpath of your application so that it contains compatible versions of the classes org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration and org.flywaydb.core.api.configuration.FluentConfiguration解决 升级版本 dependencygroupIdorg.flywaydb/groupIdartifactIdflyway-core/artifactIdversion7.14.0/version/dependency并且将属性设置为spring.flyway.enabled来禁用 Flyway 的自动配置
参考链接Spring-boot 3.0不支持flyway 7.15
动态数据源问题
***************************
APPLICATION FAILED TO START
***************************Description:Parameter 0 of constructor in com.axiomesh.bt.common.BTInitializer required a bean of type com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator that could not be found.Action:Consider defining a bean of type com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator in your configuration.解决
升版本改配置dynamic-datasource-spring-boot-starter—》dynamic-datasource-spring-boot3-starter删除依赖重新下载
dependencygroupIdcom.baomidou/groupIdartifactIddynamic-datasource-spring-boot3-starter/artifactIdversion4.2.0/version
/dependency然后再次启动项目如果你还有别的问题那就一一解决大部分都是版本兼容问题、旧的依赖未清除问题加油 最后 好看的灵魂千篇一律有趣的鲲志一百六七如果觉得文章还不错的话可以点赞收藏关注 支持一下鲲志的主页 还有很多有趣的文章欢迎小伙伴们前去点评如果有什么需要改进的地方还请大佬指出❌