欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot項(xiàng)目啟動報錯踩坑實(shí)戰(zhàn)記錄

 更新時間:2023年02月08日 08:57:39   作者:一宿君  
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動報錯踩坑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一、redis和jedis版本不匹配

報錯日志如下:

Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.DefaultJedisClientConfig
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 127 common frames omitted

原因就是SpringBoot和jedis版本不匹配導(dǎo)致的,項(xiàng)目中引入redis默認(rèn)版本為2.7.0

<!-- spring redis session 默認(rèn)2.7.0 -->
<dependency>
     <groupId>org.springframework.session</groupId>
     <artifactId>spring-session-data-redis</artifactId>
</dependency>

通過https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis查看對應(yīng)jedis版本應(yīng)該為3.8.0,而項(xiàng)目中是3.0.0,修改為3.8.0即可

<dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>3.8.0</version>
</dependency>

二、spring循環(huán)依賴

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   projectRelatedController (field private cn......EstimateServiceImpl cn......ProjectRelatedController.estimateService)
┌─────┐
|  estimateServiceImpl (field cn...FillDataAlarmService cn......fillDataAlarmService)
↑     ↓
|  fillDataAlarmServiceImpl (field cn......EstimateServiceImpl cn......FillDataAlarmServiceImpl.estimateService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

Disconnected from the target VM, address: '127.0.0.1:1499', transport: 'socket'

Process finished with exit code 1

可以看到estimateServiceImpl 依賴了fillDataAlarmServiceImpl fillDataAlarmServiceImpl 又循環(huán)依賴了estimateServiceImpl ,這在代碼層面是可以的,但在邏輯上是不允許的。

2.1、方法1

最簡單粗暴的方法是在全局配置文件中允許循環(huán)引用存在,此屬性默認(rèn)值為false,顯示聲明為true,可回避項(xiàng)目啟動時控制臺循環(huán)引用異常。

spring.main.allow-circular-references=true

2.2、方法2

spring的核心是控制反轉(zhuǎn)依賴注入,循環(huán)依賴就是在依賴注入這一步造成的,也就是說AB相互依賴的時候,初始化A必須要初始化B,初始化B必須也要初始化A,所以就會有死循環(huán)。

Spring2.6之前的版本會自動處理循環(huán)依賴,通過提前暴露出bean的注入方式,將實(shí)例化和初始化分開做,2.6之后的版本不會自動處理了。

那如果業(yè)務(wù)場景實(shí)在需要循環(huán)依賴調(diào)用,有一個優(yōu)雅的方式:控制反轉(zhuǎn),我們把控制權(quán)轉(zhuǎn)到自己手上,使用方法的返回值獲取實(shí)例對象,替換調(diào)通過成員變量注入實(shí)例對象,等我們用到的時候再去獲取bean實(shí)例,不在初始化的時候注入,這樣就優(yōu)雅的避免了項(xiàng)目初始化的時候循環(huán)依賴導(dǎo)致的死循環(huán)。

示例如下:

A依賴B

@Service
@RequiredArgsConstructor
public class AServiceImpl implements AService {

    private final ConfigurableListableBeanFactory beanFactory;

    @Override
    public BService getBService() {
        return beanFactory.getBean(BService.class);
    }
}

B依賴A

@Service
@RequiredArgsConstructor
public class BServiceImpl implements BService {

    private final ConfigurableListableBeanFactory beanFactory;

    @Override
    public AService getAService() {
        return beanFactory.getBean(AService.class);
    }

}

三、允許DefaultServlet默認(rèn)注冊

Caused by: java.lang.IllegalStateException: Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.
	at org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler.setServletContext(DefaultServletHttpRequestHandler.java:111)
	at org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.enable(DefaultServletHandlerConfigurer.java:85)
	at org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer.enable(DefaultServletHandlerConfigurer.java:71)
	at cn.sto.financial.estimate.interceptor.WebMvcConfig.configureDefaultServletHandling(WebMvcConfig.java:44)
	at org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.defaultServletHandlerMapping(WebMvcConfigurationSupport.java:644)
	at 
Disconnected from the target VM, address: '127.0.0.1:8711', transport: 'socket'

Process finished with exit code 1

Spring嵌入式Servlet容器提供的DefaultServlet不再注冊,如果應(yīng)用程序需要要它,需要進(jìn)行一定的配置。

3.1、方法1

server.servlet.register-default-servlet=true

3.2、方法2

@SpringBootApplication
public class StarterApplication {
    
    @Bean
    WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() {
        return factory -> factory.setRegisterDefaultServlet(true);
    }
    
    public static void main(String[] args) {
        SpringApplication.run(StarterApplication.class,args);
    }
}

四、debug運(yùn)行報錯

項(xiàng)目debug報錯如下:

Error running ‘MallTest.testRun’: Command line is too long. Shorten command line for MallTest.testRun.

出現(xiàn)這個的原因一般是因?yàn)轫?xiàng)目需要打印的環(huán)境變量太長,超過了限制,需要你縮短命令行來解決問題。

4.1、方法1

修改運(yùn)行配置Configurations,將默認(rèn)的Shorten command line的值user-local default 改為 JAR mainifest 或者 classpath file,這種辦法每次需要對每個類單獨(dú)設(shè)置。

4.2、方法2

想一步到位,在項(xiàng)目的.idea/workspace.xml文件中添加配置,找到

<component name="PropertiesComponent"></component>

在內(nèi)部最下面添加一行

<property name="dynamic.classpath" value="true" />

這種方式一次設(shè)置就行。

總結(jié)

到此這篇關(guān)于SpringBoot項(xiàng)目啟動報錯踩坑的文章就介紹到這了,更多相關(guān)SpringBoot項(xiàng)目啟動報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中Bean注入源碼示例解析

    Spring中Bean注入源碼示例解析

    這篇文章主要為大家介紹了Spring中Bean注入源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 深入講解SPI?在?Spring?中的應(yīng)用

    深入講解SPI?在?Spring?中的應(yīng)用

    這篇文章主要介紹了深入講解SPI在Spring中的應(yīng)用,SPI是Java內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機(jī)制,可以用來提高框架的擴(kuò)展性,主要用于框架的開發(fā)中
    2022-06-06
  • Java設(shè)計(jì)模式之觀察者模式原理與用法詳解

    Java設(shè)計(jì)模式之觀察者模式原理與用法詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式,結(jié)合實(shí)例形式詳細(xì)分析了Java設(shè)計(jì)模式之觀察者模式基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-06-06
  • SpringMVC @RequestMapping注解應(yīng)用方法示例講解

    SpringMVC @RequestMapping注解應(yīng)用方法示例講解

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • java io讀取文件操作代碼實(shí)例

    java io讀取文件操作代碼實(shí)例

    這篇文章主要介紹了java io讀取文件操作代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式

    Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式

    這篇文章主要介紹了Java查詢時間段(startTime--endTime)間的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java?9中的"菱形"語法詳解

    Java?9中的"菱形"語法詳解

    Java?9?再次增強(qiáng)了“菱形”語法,它甚至允許在創(chuàng)建匿名內(nèi)部類時使用菱形語法,Java?可根據(jù)上下文來推斷匿名內(nèi)部類中泛型的類型,下面程序示范了在匿名內(nèi)部類中使用菱形語法,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • 解決idea中maven項(xiàng)目打包成jar報錯:沒有主清單屬性的問題

    解決idea中maven項(xiàng)目打包成jar報錯:沒有主清單屬性的問題

    這篇文章主要給大家分享了idea中maven項(xiàng)目打包成jar,報錯沒有主清單屬性解決方法,文中有詳細(xì)的解決方法,如果又遇到同樣問題的朋友可以參考一下本文
    2023-09-09
  • 詳解Java關(guān)于時間格式化的方法

    詳解Java關(guān)于時間格式化的方法

    這篇文章主要介紹了詳解Java關(guān)于時間格式化的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談springboot如何保證多線程安全

    淺談springboot如何保證多線程安全

    這篇文章主要介紹了springboot如何保證多線程安全,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論