springboot和tomcat jar包沖突


問題

使用外部tomcat啟動springboot項目失敗,報錯:

ERROR: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManager' defined in com.zgglyun.dfdts.config.manager.AppConfig: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
....
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
....
Caused by: org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration

原因

springboot本身提供了內置tomcat,如果引入外部tomcat的話lib文件夾下的jar包會沖突。需要解決沖突。

方法

方法1.移除內置的tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
 </dependency>   

方法2. 將scop置為provided

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

springboot啟動項目和外部tomcat啟動有什么區別

springboot內置tomcat 訪問項目不需要加項目名 http://localhost:8080/test001

外部的tomcat 訪問需要加項目名 http://localhost:8080/myPro/test001

ps:

scop是限制dependendy的作用范圍分為五個等級
1)compile:也是默認值適用於所有階段(編譯,運行,測試,發布
2)provided:在編譯測試時有效,在運行時無效
3)runtime:在運行,測試時有效,在編譯代碼時無效
3)test:只在測試時有效
4)system:在編譯,測試時有效,在運行時無效。(一般和systemPath一起使用,謹慎使用)

ps ps :

maven常用命令

命令 說明
mvn clean 清理項目產生的臨時文件,一般在target下面
mvn compile 編譯源代碼,一般是src/main/java
mvn package 項目打包生成jar或者war,一般在target下
mvn test 測試命令,一般是執行src/test/java下的junit
mvn install 將打包的文件安裝到本地倉庫中
mvn depoly 將打包的文件部署到遠程倉庫
mvn site 生成項目相關網站
mvn temcat:run 用tomcat容器運行項目
mvn jetty:run 用jetty運行項目

maven的生命周期:

1)clean:清理上一次構建生成的文件
2)validate:驗證
3)compile:編譯
4)test:測試
5)package:打包
6)varify:檢查
7)install:安裝到本地倉庫
8)deploly:部署


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM