tomcat在呼叫shared lib遇到的問題--gradle
eclipse 在本地啟動tomcat跑專案,完全沒有問題,當打包部署伺服器時,發現報錯。
當時我們遇到的問題直接顯示是
org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [DispatcherServlet] in context with path [/robot] threw exception [Request processing failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined] with root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:371)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:331)
at org.springframework.transaction.interceptor.TransactionAspectSupport.determineTransactionManager(TransactionAspectSupport.java:370)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:271)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy61.findOneDebtorNameAudio(Unknown Source)
at com.squ.robot.service.impl.NameCutServiceImpl.dealWavFile(NameCutServiceImpl.java:127)
at com.squ.robot.controller.WavCheckController.uploadFile(WavCheckController.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
各種找問題,查資料,網上大部分都是說JPA的使用問題,矛頭指向@Transactional 的使用上,這裡也mark一下吧,@Transactional 在jpa的使用中,對於update和delete必須宣告;
後面不管怎麼除錯都不成功,然後發現本地可以,但是部署到測試的包上就不行,於是我就只能用最笨的方法,對比通過gradle命令打出來的war包和本地部署的tomcat下的webapps下的war是否有區別;
對比發現gradle打包的war中缺少很大部分的jar,然後發現這部分缺少的jar放在來伺服器的tomcat的shared中,通過tomcat的conf中catalina.properties 載入,這裡包含了tomcat的jar和class的載入順序,省略1000字,mark一下;
然後發現shared裡面的jar和部署war中有jar包的重疊,這就是產生問題的根本所在,於是就將所有重複的jar刪除後,重新打包就ok了。
後續研究發現,報錯的重複的jar主要是spring-jms引起的,也就是gradle打包的時候將
providedCompile('org.springframework:spring-jms:4.1.4.RELEASE')
錯誤的寫成了
compile('org.springframework:spring-jms:4.1.4.RELEASE')
這樣就導致了war包重複打了這些包,一步步導致了上面的問題。
知識點三:gradle中:compile,providedCompile,runtime 的區別:
僅在執行的時候需要,但是在編譯時不需要依賴,就用runtime ;前提:apply plugin: 'java';
如果你的jar包/依賴程式碼 僅在編譯的時候需要,但是在執行時不需要依賴,就用providedCompile ;前提:
apply plugin: 'war';
如果你的jar包/依賴程式碼 在編譯的時候需要依賴,在執行的時候也需要,那麼就用compile ;前提:
apply plugin: 'war'
或者apply plugin: 'java'
mark 一下。
相關文章
- [求助]..新手!遇到struts呼叫sessionbean問題?SessionBean
- 編譯libodb-mysql.lib時遇到的一個問題編譯MySql
- 從json-lib轉成jackson的遇到的問題JSON
- jdon在tomcat的安裝問題Tomcat
- 用的是tomcat伺服器,在java類裡呼叫本地方法的問題?Tomcat伺服器Java
- 解決在使用Amoeba遇到的問題
- SQL在shared pool中的解析過程問題SQL
- windows安裝tomcat遇到問題及解決方案WindowsTomcat
- 在釋出war包時遇到的問題
- 狀態模式中迴圈呼叫子元件時遇到的問題模式元件
- [提問交流]請問如何呼叫thinkphp裡lib的storage類呢?PHP
- 在遊戲中播放cg視訊遇到的問題遊戲
- 在騰訊雲上安裝mysql遇到的問題MySql
- 我在jsp中遇到的亂碼問題!JS
- 工作遇到的問題
- mysql 遇到的問題MySql
- 【線上等】Tomcat問題高手或者版主或遇到內似問題的大哥大姐來看我這個問題Tomcat
- laravel 在配置nginx代理時遇到的連結問題LaravelNginx
- Gradle 技巧與問題Gradle
- linux遇到的問題Linux
- 使用git遇到的問題Git
- AndroidJNI遇到的問題Android
- 面試中遇到的問題面試
- ueditor使用遇到的問題
- JSP遇到的問題....JS
- WangEditor遇到的問題
- 裝10gRAC遇到的libpthread.so.0: cannot open shared object file問題threadObject
- air在go的其他版本上執行可能遇到的問題AIGo
- 在android上使用opencv的ocl模組遇到的問題(一)AndroidOpenCV
- Spring的問題,還是Tomcat的問題SpringTomcat
- Tomcat 中的JVM問題TomcatJVM
- 關於tomcat在idea上的中文編碼問題TomcatIdea
- javaweb中自己遇到的問題JavaWeb
- Go mod 使用遇到的問題Go
- Laravel 安裝遇到的問題Laravel
- Laravel-pay 遇到的問題Laravel
- 多語言遇到的問題
- laravel使用中遇到的問題Laravel