問題
使用外部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:部署