JDK6升级JDK8踩雷
简介
此次升级借助于公司项目,现公司项目为JDK6,出于种种原因的考虑,需要将现有版本升级为JDK8。整个项目的环境非常的乱,没有用maven做jar管理,所以升级过程中也遇到了一些小麻烦,编码更是惨不忍睹,虽然步步艰辛,但是我也都一一克服了。
之前项目开发过程中不太关注JDK版本与版本之间的差异,以及JDK版本和spring之间的异同,通过这次升级也能够了解一些其中的关系。比如spring4以上的版本才能够兼容JDK8的、还有FtpClient
到JDK7开始就已经被重写了等等问题
博客的记录过程会直接复刻解决问题的过程,一方面便于记录,另一方面便于读者理解。
升级参数
- IntelliJ IDEA 2017.1.5
原项目配置
- JDK6
- Tomcat 6
- Spring 3.2.8
- Mybatis 3.2.6
现项目配置
- JDK8
- Tomcat8
- Spring 4.2.5
- Mybatis 3.2.6
- jackson-core 2.8.4
- quartz 2.2.2
踩雷过程
1、FtpClient 报错
此功能主要用于将文件上传至FTP文件服务器操作,原本JDK6版本 FtpClient
需要new实现,但是至JDK7之后重写了相关方法,所以想要从JDK6升级到JDK8首先得重写FTP文件上传相关功能。 具体实现可以Google,或者使用我有提供好。
FtpUtil.java
2、spring4.x 支持 JDK8
原本项目spring是基于3.x的,但是spring对于JDK8的支持只有4.x才开始。所以为了能够成功升级JDK8,必须要先更换之前spring相关的jar。
替换jar之后还需要将所有xml配置文件中基于3.x的引用全部替换成4.x。
3、配置json解析
spring4.x下对于Jackson的配置发生了些许变化,原先的配置org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
现已替换为org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
,所以参考以下配置即可完成从spring3.x到spring4.x的转化。
配置Jackson的同时,也需要升级Jackson相关的jarjackson-annotations
、jackson-databind
、jackson-core
4、重写Quartz在spring4.x下的配置
Quartz和spring的整合,在spring4.x中有两点区别。
spring4.x开始使用
ref
,由local
变为bean
属性
<ref local="imageDeleteTrigger"/>
变为<ref bean="closeOrderTrigger"/>
org.springframework.scheduling.quartz.CronTriggerBean
类在spring4.x中被弃用,现变更为org.springframework.scheduling.quartz.CronTriggerFactoryBean
类
具体重写可以参考 Quartz - Spring4.x 环境下的使用
5、Spring Security 4.x 默认开启CSRF保护功能
CSRF保护功能在Spring Security 3.x中是默认关闭的,所有3.x中并不需要过多关注,如果有必要用到防御,需要开启后再加入部分配置。
开启CSRF保护之后如何使用可以参数Spring Boot与Spring Security整合后post数据不了,403拒绝访问
参考资料
Quartz - Spring 环境下的使用
Spring 3.x 升级到Spring 4.x 注意事项和步骤,错误解决方法
Spring3 升级Spring 4
JDK6升级JDK8踩雷相关推荐
- 升级JDK8的坎坷之路
为更好的适应JAVA技术的发展,使用更先进及前沿的技术.所以推出将我们现在使用的JDK1.6(1.7)及tomcat6(7)升级至JDK1.8及tomcat8,使我们的系统获得更好的性能,更好适应未来 ...
- 升级JDK8的坑--base64
概述 Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,"+"和"/"这64个字符来编码原始字符(还有垫字符"=").一个字符 ...
- 2018年 每日分享一个技术贴
一月份 推荐五个非常实用的软件---(编辑器和日常) 2016-02-0 ...
- java 8和jdk区别_java-8 – JDK 6和JDK8之间的Java Collection差异
您没有理由期望JDK6或JDK8中的[BLA,TEST]输出,因为Javadoc不会向您承诺将根据插入顺序(或任何顺序)打印HashSet的元素.允许不同的实现产生不同的顺序. 如果要确保两个JDK中 ...
- 重塑云上的 Java 语言
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 Photo @ Toa Heftiba 文 |郁磊 音乐无国界, ...
- 拼不过 GO?阿里如何重塑云上的 Java
阿里妹导读:Java 诞生于20年前,拥有大量优秀的企业级框架,践行 OOP 理念,更多体现的是严谨以及在长时间运行条件下的稳定性和高性能.反观如今,在要求快速迭代交付的云场景下,语言的简单性似乎成了 ...
- 2021年2月社招面经分享_Java资深/高级开发
2021-3-18 V1.0:是10家左右一线和二线互联网企业的面试题集合.这次只是把题目挂上来,有些捎带了不完善的答复,答案仅供参考,既不完善也不权威哈.后面我再逐个完善答案上来. 2021-4-2 ...
- java面向对象编程基础
java面向对象编程基础 前言:什么是java 是咖啡飘香的清晨 - 是斯坦福校园意浓情深 - 是James的思想睿智 是剁手党双十一挥舞的利刃 是大数据云计算驰骋的平台 - 是ATM上吐出的钞票 - ...
- mac 多个java 版本下载_MacOS 下安装多个版本的 JDK 并统一管理
现在的 MacOS 都不自带 JDK 了,如果你在未安装 JDK 的 MacOS 中执行 Java 命令会出现如下提示: AigeStudio@aige$ java -versionNoJava ru ...
- macOSLinux设置JDK版本
MacOS 下安装多个版本的 JDK 并统一管理 现在的 MacOS 都不自带 JDK 了,如果你在未安装 JDK 的 MacOS 中执行 Java 命令会出现如下提示: AigeStudio@aig ...
最新文章
- vue.js 初体验— Chrome 插件开发实录
- 单件模式Singleton Pattern
- STM32 进阶教程 4 - 软件实现高精度延时 2
- Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
- Linux如何将文件中内容放到粘贴板上
- python print格式化输出类型_第一讲:Python print() 格式化输出
- python seaborn boxplot_seaborn.boxplot
- 脚本制作Minilinux
- C++/Qt文件写入读取速度比较
- [转万一] 不使用标题栏拖动窗体
- 从0教你用Python写网络爬虫,内容详细代码清晰,适合入门学习
- 性能优化大牛 Brendan Gregg 的新书要来了
- ydui滚动加载:TypeError: Cannot read property '$emit' of undefined
- 基于Ziegler-Nichols法的PID参数整定
- ip地址冲突该如何解决?
- 悉尼大学计算机录取要求,悉尼大学录取要求
- python 如何调试uc浏览器_UC浏览器开发者工具
- C++ 模板的显示具体化
- Android系统字体加载流程
- python怎么编写流氓软件_Python恶意软件分析入门