1.前言

计划将之前在Windows系统上练手做的项目部署到云服务器上,想先在本地虚拟机上测试一下是否可行,过程中发现很多问题,特此记录。还有问题未能解决,希望后面能有思路。

突然想到是否和数据库有关,可以在同一台虚拟机上安装mysql和应用,测试看看,是DB问题还是应用本身问题

感觉这个项目本身应该没有考虑上线到Linux服务器,加之我之前在做这个项目的时候对其加了修改,主要是对图片文件的地址进行了修改,因此可能有错误。先记录下来

环境:

  • Linux版本:CentOS Linux release 7.9.2009
  • apache-tomcat-9.0.41
  • openjdk version "1.8.0_292"

2.问题

2.1 缺少 tomcat-native

启动Tomcat之后,在浏览器输入IP后显示503,查看catalina.log发现报错:

就是说 缺少Tomcat Native librayr的支持,具体原因可以参考 因此需要安装 Tomcat Native library。

安装参考 Tomcat-APR/tomcat-native-1.2.23-src源码安装和配置The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path

二者都是参考官网 来安装 tomcat-native库:

安装tomcat-native 步骤

  1. 确认gcc、apr、apr-devel、apr-util 以及 JDK是否已经安装过,没有就需要安装
# 1.确认 gcc, 若已安装就会显示安装的版本
rpm -qa gcc
# gcc-4.8.5-28.el7_5.1.x86_64
#没有就安装 yum install gcc
# 2.确认 apr, 没有就 yum install gcc
rpm -qa apr
# 3.确认 apr-devel,没有就 yum install apr-devel
rpm -qa apr-devel
# 4.确认 apr-util, 没有就 yum install apr-util
rpm -qa apr-util
# 5. 确认 JDK,没有就 yum install -y java-1.8.0-openjdk
which java
java -version
  1. 源码安装tomcat-native-1.2.23

    下载地址:官网

下载到 /opt 目录下,tar zxvf tomcat-native-1.2.23-src.tar.gz 解压 ,进入 tomcat-native-1.2.23-src/native ,然后参考官方给的模板执行:

./configure --with-apr=/usr/bin/apr-1-config \
--with-java-home=/home/jfclere/JAVA/jdk1.7.0_80/ \
--with-ssl=yes \
--prefix=$CATALINA_HOME
  • --with-java-home:jdk的安装目录,笔者是 yum install -y java-1.8.0-openjdk 安装的,因此是 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64
  • --prefix:Tomcat安装目录
## 笔者的命令
./configure --with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64 \
--with-ssl=yes \
--prefix=/usr/local/apache-tomcat-9.0.41

然后 编译安装 make && make install 成功后会看到如下的内容:

Libraries have been installed in:
/usr/local/apache-tomcat-9.0.41/lib If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

即库已经安装到之前 --prefix指定目录下的 lib子目录中,同时还需要以下操作:

修改 /usr/local/apache-tomcat-9.0.41/bin/catalina.sh ,在 文件末尾添加

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apache-tomcat-9.0.41/lib
export LD_LIBRARY_PATH

再在 /usr/local/apache-tomcat-9.0.41/conf/server.xml 配置 Tomcat Connector,将 protocol修改成如下内容:

<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />

重启Tomcat服务器 问题就解决了

2.2 无法访问自己的应用

发现自己的应用无法访问, 能访问 192.168.48.101,默认是Tomcat介绍页面,但是自己的应用 192.168.48.101:80/imooc_reader 就无法访问,报错为 500-内容服务器错误

javax.servlet.ServletException: Servlet.init() for servlet [springmvc] threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)
根本原因。 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'categoryService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'categoryMapper' defined in file [/usr/local/apache-tomcat-9.0.41/webapps/imooc_reader/WEB-INF/classes/com/imooc/reader/mapper/CategoryMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in file [/usr/local/apache-tomcat-9.0.41/webapps/imooc_reader/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.session.Configuration.setShrinkWhitespacesInSql(Z)V
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:895)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:668)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:591)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:888)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1597)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:748)

上面的错误是说:问题可能在 与数据库连接 的配置或者没有得到结果导致 依赖注入失败 ,可以从 Error creating bean with name 'sessionFactory' defined in file defined in [applicationContext.xml]中猜测

个人怀疑原因:

  1. 这个教学项目在编写的时候可能就没有考虑到上线Linux服务器,因此在Windows环境下开发没有考虑到两个系统的差别,比如文件分隔符等;
  2. 自己在编写的时候将在线图片资源全部修改为本地,可能导致读写有问题;

以后有时间再研究一下。

SpringMVC项目部署到CentOS7虚拟机问题及解决办法记录的更多相关文章

  1. 转《Angular4项目部署到服务器上刷新404解决办法》

    刚遇到Angular4项目npm run build 后部署到服务器可以访问,但是刷新页面会出现404的错误!转载一大神的操作 解决angular2页面刷新后报404错误办法: 配置app.modul ...

  2. SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;

    情况一: ajax中传值时是乱码(后台可以获取到中文字符,但用@ResponseBody返回时前台为乱码) 情况二: Controller 中 request.getParameter()获取到的是乱 ...

  3. 推送本地项目至Github遇到的问题以及解决办法记录

    在把本地新项目推送至GitHub仓库时的大致流程和步骤,首先现在GitHub上面新建一个项目,复制该项目的 带.git 后缀的地址,比如 git@github.com:XXX/XXX.git 然后在本 ...

  4. MVC3在IIS7.5发布(部署)报403.14错误的解决办法

    MVC3在IIS7.5发布(部署)报403.14错误的解决办法     错误现象: 报403.14 forbidden错误 web服务器被配置为不列出此目录的内容. 解决办法: 检查站点的处理程序映射 ...

  5. eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法

    eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法 当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Serv ...

  6. centos7.2中文乱码解决办法

    centos7.2 中文乱码解决办法 1.查看安装中文包: 查看系统是否安装中文语言包 (列出所有可用的公共语言环境的名称,包含有zh_CN) # locale -a |grep "zh_C ...

  7. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法

    树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...

  8. Jenkins+tomcat自动发布的热部署/重启及遇到的坑解决办法

    一.背景 公司的项目一直手动maven打包.上传服务器.关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动 ...

  9. Apache2.4部署django出现403 Forbidden错误解决办法

    前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...

随机推荐

  1. 暑假自学java第十天

    1,声明数组:声明一维数组的格式有两种 一:数组元素类型 数组名字 [ ]:例如: float score [ ]; 二:数组元素类型 [ ] 数组名字: 例如: float [ ]  score; ...

  2. Maven:Maven的project标签报错红线

    作者在外网完成demo项目,把Maven的本地库打成压缩包放进内网时,Maven的project标签报错红线,且别的依赖不报错,同时Maven不引入本地仓库的依赖包. 解决方法: 进入自己的Maven ...

  3. sublime最全笔记

    sublime骨架建立 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8&quo ...

  4. 每日英语——the rest of my life

    <the rest of My life> 词面意思:我的余生 实际意思:我的余生 1.  歌曲:<The Rest of My life> Less Than Jake 歌词 ...

  5. makedown语法小记

    1.标题,支持六级 # 这是一级标题 ## 这是二级标题 ### 这是三级标题 2.斜体 *这是斜体* 3.加粗 **这是加粗** 4.斜体加粗 ***这是斜体加粗*** 5.删除线 ~~这是删除线~ ...

  6. JUnit5依赖注入与测试接口

    依赖注入 以前的JUnit的类构造方法和测试方法都是不能有参数的,JUnit Jupiter有一个颠覆性的改进,就是允许它们有入参,这样就能做依赖注入了. 如果你对pytest的fixture有了解的 ...

  7. python 15篇 面向对象

    1.面向对象编程概念 面向对象是包含面向过程 面向过程编程 买车: 1.4s看车,买车 2.上保险 保险公司 3.交税 地税局 4.交管所 上牌面向对象编程 卖车处: 1.4s 2.保险 3.交税 4 ...

  8. java使用IO读写文件

    https://www.cnblogs.com/qiaoyeye/p/5383723.html java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:In ...

  9. windows系统显示文字编码的CMD命令

    chcp命令,显示.设置系统文字编码格式.

  10. PAT乙级:1069 微博转发抽奖 (20分)

    PAT乙级:1069 微博转发抽奖 (20分) 题干 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入 ...