使用springboot遇到的的異常


  • Unregistering JMX-exposed beans on shutdown
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<!--<scope>provided</scope>-->
		</dependency>

把scope刪掉就可以了。

  • MainApplication.java必須位於某個包下
  • 對springboot的依賴必須放在最前面!否則Springboot的內嵌tomcat無法啟動!
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
	... 24 common frames omitted 
  • 在進行mvn package之前,最好mvn clean一下,這樣就能夠刪除target目錄下的多余jar包。如果不刪除多余jar包,有可能會出錯。
    比如我配置了mybatis,但是沒有設置datasource,這樣這個應用就啟動不了。而mybatis已經下載下來了,這時即便在pom中去掉mybatis,這時運行mvn package得到的war包中還是會包含mybatis,從而導致應用無法啟動。
  • 初始化問題
    一般情況下,部署在服務器上要使用tomcat,本地調試直接用SpringBoot自帶的tomcat
    這就需要如下寫法
public class MyApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MyApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

ServletInitializer是Servlet初始化器,意思是當本應用作為tomcat的一個webapp時,就調用configure函數,這是tomcat容器調用的,這時整個應用就相當於Servlet。
當作為SpringApplication運行時,會執行main函數,但是不會執行上面的configure函數。


免責聲明!

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



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