将win下的java项目迁移至linux

  总算放假了,前一阵比较忙,都没有写博客总结。事情做了很多,但是没有整理,那和没做也没什么分别了——忙忙碌碌大多现在回想起来也都不知道做了些什么。先将有点印象的写出来,其他的想到了再整理吧。
  公司的有个老JAVA项目,还是跑在windows2008r2上,浪费性能就算了,最关键是总有各种弹窗广告不胜其烦,甚至前一阵子还中了挖矿病毒。终于下定决定将这些少有人维护的项目都弄到linux下,方便我这里统一自动化管理。
  虽说JAVA不依赖底层环境,不过当全套业务都弄到linux下,倒也不是一个轻松的事——直接把war包jar包弄过来还真跑不起来。得一步一步来啊。

注意事项

梳理业务流程

  因为不是分布式也不是微服务,这单独的项目用到的服务还不少,想使用一台linux机器完全代替之前的win,短期内不太现实,只能先把其中java项目还有缓存中间件及数据库业务都先迁至linux,至于他还有得流媒体和视频转换等功能服务,在linux下还没找到很好的完美替代解决方案,就先放那不动,等之后有了好的解决方案,再拿他们开刀。
  原业务流程为前端使用apache为后端tomcat做反向代理,实现动静分离,tomcat通过memcached做了session共享,而且需要调用mysql、mongodb、sqlserver中的数据,得到返回信息,查到得业务数据,返回用户结果的同时在redis做了一个缓存,提高响应速度。对某些特殊功能需要调用到视频转换以及文档处理工具。
  我初步计划,将除了特殊功能需要调用的视频转换服务和文档处理服务以外的其他业务,都迁移至几个linux服务器中,方便日后自动化管理。
  业务架构图如下所示
将win下的java项目迁移至linux_第1张图片
  因业务规模不大,数据库及redis都未配置集群、主从和独写分离。除文件共享服务器(数据量较大,不方便迁移)、视频文档数据库及负载均衡以外,其他服务器均使用CentOS7系统。

部署对应服务

  所谓对应服务,并非是原封不动照搬之前,能提供相同功能的即可,如我这里使用了nginx而非之前的apache。对应也不单是指功能,有的服务如tomcat及JDK还要对应版本,不过或许别的版本也可能可行,这个需要多多尝试。
  例如我们之前业务使用的tomca6,我尝试了tomcat8,也尝试了tomcat7,发现也都可以跑起来,不过在tomat8上连接memcached有一些小问题,总是报An invalid character [34] was present in the Cookie value,据说是cookie里有",不过换成tomcat7就没有报错了。JDK发现还是不能变,还是用之前的7,不过这都是后话了。
  对于我这个业务,比较费劲的是修改apache的反向代理配置文件为nginx的,之前写的转发规则,是排除部分不转发的目录,剩余的全部转发,而换到nginx下,我打算还是沿用正常的转发规则,设置默认不转发,需要的在转发给后端tomcat处理,减少后端tomcat的压力。所以就需要挨个测试一下,看看业务功能哪些需要后端来处理的。
也可以对nginx编译一下,可以改变nginx服务名及版本的显示,改完源码记得在配置文件中http栏目下面加上server_tokens off;,否则看不到效果的。
  redis,mongodb倒是没有什么版本区别,随便选了版本都能用。
  不过mysql对版本还有有点要求的,版本不一致,我都没法直接从原数据库中导入数据。不过找到对应linux版本的mysql-server端还是很好解决的。
  遇到的问题就是当时sqlserver纠结好久要不要弄到linux下。不过尝试了下linux的sqlserver2017,sqlserver里面10多个G的数据成功从sqlserver2008上复制到了2017的linux版本上,目前还没发现什么问题。

修改配置文件

  JAVA项目迁移除了版本问题,其他需要注意的就是配置文件里的编码问题和路径问题,这俩要是搞定了,一般在linux上跑起来就问题不大了。
  改配置文件编码有个简单的方法,就是使用命令dos2unix,可以将win下的配置文件快速转换为linux下可用的编码格式。具体用法可以百度。

jdbc驱动

  程序跑起来后,要么mysql报错,要么sqlserver报错连不上,猜测java里win下的jdbc驱动和linux下不能通用,又重新找了对应版本的linux驱动jar包,放到lib目录里,果然可以顺利连接了。此外,那会还遇到一个报错总提示密码错误,检查了很多遍,密码是对的,不知道问题在哪里。后来终于发现,密码还是用户名那里后面多了一个空格,这用vim不一行一行看还真发现不了。。设置的时候确实要小心注意一些啊。

总结

  java确实是不依赖底层系统的,一般来说只要配套应用服务没问题,JAVA都可以跑的起来。关键要注意版本、编码、路径还有驱动的问题就都可以的。

你可能感兴趣的:(linux进阶,经验分享)