国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot2.7升級項目到Springboot3.1踩坑指南(jdk17/jdk21)

這篇具有很好參考價值的文章主要介紹了SpringBoot2.7升級項目到Springboot3.1踩坑指南(jdk17/jdk21)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

概要

由于SpringBoot3.x全面擁抱JDK17,兼容jdk21,jdk17乃是大勢所趨。這里是從SpringBoot2.7-->SpringBoot3.1踩坑指南。
提前閱讀:jdk8升級JDK17避坑指南(適用于SpringBoot2.3—SpringBoot2.7升級)

國內(nèi)頂級開源項目升級情況

國內(nèi)頂級開源項目升級到springBoot3情況,可以作為升級SpringBoot3的風(fēng)向標(biāo)。僅對比國內(nèi)規(guī)模使用,落地過萬企業(yè)的開源項目
參考:國內(nèi)頂級開源項目:芋道、ruoyi、JeecgBoot、pig、SpringBlade功能對比

評價項/項目名 yudao-cloud Ruoyi-Cloud RuoYi-Cloud-Plus Dante Cloud pig bladex JeecgBoot
官網(wǎng) 芋道yudao-cloud 開發(fā)指南 若依 plus-doc.dromara.org Dante Cloud pig4cloud bladex.cn、看云-SpringBlade開發(fā)手冊 JeecgBoot
源碼收費 免費 免費 免費 免費 免費 + 收費(3999) 免費 + 收費(5000) 免費 + 收費(100000)
文檔收費 文檔收費 免費、視頻收費 文檔免費、視頻收費 免費 免費、授權(quán)收費 文檔收費 文檔免費、授權(quán)收費
github yudao-cloud RuoYi RuoYi-Vue-Plus Dante Cloud pig SpringBlade jeecg-boot
gitee yudao-cloud RuoYi RuoYi-Vue-Plus Dante Cloud 暫無 SpringBlade jeecg-boot
jdk17分支 master-jdk21 RuoYi-Cloud-Plus 2.X dante-cloud 3.1.X pig jdk17 jeecg-boot/springboot3

適配SpringBoot3指南

  • 參考1-微信公眾號-這可能是最全的SpringBoot3新版本變化了!、
  • 參考2-SpringBoot官網(wǎng)-Spring Boot 3.0 Release Notes、
  • 參考3-微信公眾號-Swagger升級指南:Swagger2與Swagger3注解差異揭秘、
  • 參考4-微信公眾號-Dante Cloud 3.2.0.0 發(fā)布,首個適配 Spring Boot 3.2版本及經(jīng)驗分享
  • 參考5-JeecgBoot 文檔中心-升級SpringBoot3

SpringBoot3升級要點

前提說明,建議先完成springboot2.x—>springBoot2.7.x+jdk17的適配,這里升級難度會小很多。參考:文章最前面的文章。

1、jdk17變動(如javax)

詳見: jdk8升級JDK17避坑指南(適用于SpringBoot2.3—SpringBoot2.7升級)

  • 模塊化對反射的影響==>對系統(tǒng)類的反射增加了限制,需要打開限制增加jvm啟動參數(shù)add-opens,自己寫的類,可以正常使用反射。
  • 刪除sun.misc 下的包,如sun.misc.BASE64Encoder==>java.util.Base64替換
  • 刪除JAXB、soup相關(guān)==>maven倉庫上面有新的maven坐標(biāo),引入新依賴即可
  • 刪除javax.annotation==>maven倉庫上面有新的maven坐標(biāo),引入依賴即可

2、redis修改spring.redis.host ===> spring.data.redis.host

redis配置命令空間進行了修改,需要注意。
參考:Spring Boot3.0(九):整合Redis

--- # redis 配置,注意springboot 3.x 有 data,2.x 沒有 data
## spring.redis.host ===> spring.data.redis.host
spring:
  data:
    redis:
      host: 10.16.58.180
      port: 6379
      password: Admin123
      database: 6      

3、SpringCloudApplication注解被刪除

使用@SpringBootApplication替換

4、不兼容升級import java.servlet====>import jakarta.servlet

servlet捐獻給社區(qū),為了避免版權(quán)問題,修改了包名,導(dǎo)致不兼容.

  • javax.servlet===> jakarta.servlet
  • javax.validation ===> jakarta.validation
  • javax.annotation ===> jakarta.annotation
  • javax.mail ===> jakarta.mail
  • javax.websocket ==> jakarta.websocket
 <!-- Java Servlet jakarta -->
            <dependency>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
                <version>6.0.0</version>
            </dependency>  

5、swagger集成 棄用springfox—>springdoc不兼容升級

springfox不維護了,springboot3使用springdoc,并啟用openapi3.0,相關(guān)注解進行了變化。

參考:spring boot 3 整合 swagger3、
參考:Swagger升級指南:Swagger2與Swagger3注解差異揭秘、
參考:OpenApi3.0注解說明

注解作用 swagger2 swagger2示例 swagger3-openApi3.0 swagger示例 替換
用于Controller @Api @Api(value = "/app/child/v2", tags = "兒童檔案") @Tag @Tag(name = "/app/child/v2", description = "兒童檔案") @Api(value = "User Management", description = "Operations pertaining to users")—>@Tag(name = "User Management", description = "Operations pertaining to users")、@Api(tags = "小程序端Core Controller")—>@Tag(description = "小程序端Core Controller")
用于Controller接口 @ApiOperation @ApiOperation(value = "新增兒童檔案綁定監(jiān)護人", httpMethod = "POST", produces = "application/json") @Operation @Operation(summary = "新增兒童檔案綁定監(jiān)護人", method = "POST") @ApiOperation(value = "根據(jù)兒童證件號碼查詢兒童檔案", httpMethod = "POST", produces = "application/json")–>@Operation(summary = "根據(jù)兒童證件號碼查詢兒童檔案", method = "POST")
用于Controller接口參數(shù)注解 @ApiParam或@ApiImplicitParam @ApiParam("預(yù)約id,字段名:personApptId,默認無") @Parameter @Parameter(description = "預(yù)約id,字段名:personApptId,默認無", required = true) @ApiParam(value = "追溯碼 形如:81900920216939751445,max=32", defaultValue = "81900920216939751445")—>@Parameter(description = "追溯碼 形如:81900920216939751445,max=32", example = "81900920216939751445")
參數(shù)隱藏 @ApiIgnore @ApiIgnore HttpServletRequest request / / /
實體字段 @ApiModelProperty @ApiModelProperty("接種人員-姓名(冗),max=32")、@ApiModelProperty(notes = "The database generated user ID") @Schema @Schema(description = "主鍵 自增") @ApiModelProperty(value—>@Schema(description、@ApiModelProperty(hidden = true)–>@Schema(hidden = true、@ApiModelProperty(value = "更新人員", example = "張三",hidden = true)—>@Schema(description = "更新人員", example = "張三",hidden = true)
實體類 @ApiModel @ApiModel("接種人員-姓名(冗),max=32")、@ApiModelProperty(notes = "The database generated user ID") @Schema @Schema (description = "根據(jù)兒童證件號碼查詢兒童檔案")") @ApiModel(value—>@Schema(description、@ApiModel(description —>@Schema(description
// idea正則替換01
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.tags.Tag;
@Api\(tags = "([^\"]+)", hidden = ([^\"]+), description = "([^\"]+)"\)
@Tag(name = "$1", description = "$3")

@Api\(value = "([^\"]+)", tags = "([^\"]+)"\)
@Tag(name = "$1", description = "$2")

@Api\(tags = "([^\"]+)", description = "([^\"]+)"\)
@Tag(name = "$1", description = "$2")

@Api\(tags = "([^\"]+)"\)
@Tag(name = "$1")

// idea正則替換02
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Operation;
@ApiOperation\(value = "([^\"]+)", notes = "([^\"]+)", position = ([^\"]+)\)
@Operation(summary = "$1", description= "$2")

@ApiOperation\(value = "([^\"]+)", httpMethod = "([^\"]+)", produces = "([^\"]+)"\)
@Operation(summary = "$1", method = "$2")

@ApiOperation\(value = "([^\"]+)", notes = "([^\"]+)"\)
@Operation(summary = "$1", description = "$2")

@ApiOperation\(value = "([^\"]+)", httpMethod = "([^\"]+)"\)
@Operation(summary = "$1", method = "$2")

@ApiOperation\(value = "([^\"]+)"\)
@ApiOperation\("([^\"]+)"\)
@Operation(summary = "$1")

// idea正則替換03
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;

@ApiModel\(value = "([^\"]+)"\)
@Schema(description = "$1")

@ApiModel\(description = "([^\"]+)"\)
@Schema(description = "$1")

// idea正則替換04
import io.swagger.annotations.ApiModelProperty;
'';
@ApiModelProperty\(value = "([^\"]+)", example = "([^\"]+)", required = ([^\"]+)\)
@Schema(description = "$1", example = "$2", required= $3)

@ApiModelProperty\(value = "([^\"]+)", example = "([^\"]+)", hidden = ([^\"]+)\)
@Schema(description = "$1", example = "$2", hidden = $3)

@ApiModelProperty\(value = "([^\"]+)", example = "([^\"]+)"\)
@Schema(description = "$1", example = "$2")

@ApiModelProperty\(value = "([^\"]+)", hidden = ([^\"]+)\)
@Schema(description = "$1", hidden = $2)

@ApiModelProperty\(value = "([^\"]+)"\)
@Schema(description = "$1")

@ApiModelProperty\(hidden = ([^\"]+)\)
@Schema(hidden = $1)

@ApiModelProperty\("([^\"]+)"\)
@Schema(description = "$1")

@ApiModelProperty\(value="([^\"]+)"\)
@Schema(description = "$1")

// idea正則替換05
import io.swagger.annotations.ApiParam;
import io.swagger.v3.oas.annotations.Parameter;

@ApiParam\(value = "([^\"]+)", example = "([^\"]+)", defaultValue = "([^\"]+)"\)
@Parameter(name = "$1", example = "$2", description="$3")

@ApiParam\(value = "([^\"]+)", defaultValue = "([^\"]+)"\)
@ApiParam\(value = "([^\"]+)", example = "([^\"]+)"\)
@Parameter(name = "$1", example = "$2")

@ApiParam\(value = "([^\"]+)"\)
@ApiParam\("([^\"]+)"\)
@Parameter(name = "$1")

// idea正則替換06
import springfox.documentation.annotations.ApiIgnore;
import io.swagger.v3.oas.annotations.Hidden;
@ApiIgnore
@Hidden

@ApiIgnore HttpServletResponse response
@ApiIgnore HttpServletRequest request

// idea正則替換07
@ApiImplicitParams
@Parameters

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)",required = ([^\"]+), example = "([^\"]+)", paramType = "query"\)
@Parameter(name = "$1", description = "$2", required = $3, example = "$4", in = ParameterIn.QUERY)

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)", required = ([^\"]+), paramType = "query"\)
@Parameter(name = "$1", description = "$2", required = true, in = ParameterIn.QUERY)

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)", dataType = "([^\"]+)", required = ([^\"]+)\)
@Parameter(name = "$1", description = "$2", schema = @Schema(type = "$3"), required = $4)

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)", dataType = "([^\"]+)"\)
@Parameter(name = "$1", description = "$2", schema = @Schema(type = "$3"))

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)", paramType = "form"\)
@Parameter(name = "$1", description = "$2", in = ParameterIn.QUERY)

@ApiImplicitParam\(name = "([^\"]+)", value = "([^\"]+)", dataType = "__file", paramType = "form"\)
@Parameter(name = "$1", description = "$2", example = "__file", in = ParameterIn.QUERY)

@ApiImplicitParam\(value = "([^\"]+)"\)
@Parameter(description = "$2")

swaggr2實例

// Swagger2 實體類
@Getter
@Setter
@NoArgsConstructor
@ApiModel(value = "根據(jù)兒童證件號碼查詢兒童檔案")
public class ChildGetByChildNoVo implements Serializable {
    @ApiModelProperty(value = "身份證")
    private String childNo;

    private Long personId;
}

// Swagger2 Controller
@AllArgsConstructor
@RestController
@RequestMapping("/app/child/v2")
@Api(value = "/app/child/v2", tags = "兒童檔案")
public class ChildController extends BaseController 

  @ApiOperation(value = "根據(jù)監(jiān)護人ID分頁查詢被監(jiān)護人", httpMethod = "GET", produces = "application/json")
    @GetMapping("/getByPersonId")
    @ApiImplicitParam(value = "預(yù)約id")
    public AjaxResult getByPersonId(@RequestParam(value = "pageNum",required = false,defaultValue = "1") Integer pageNum,
                                  @ApiParam("預(yù)約id,字段名:personApptId,默認無") @RequestParam(value = "personApptId") Long personApptIdpersonId,
                                   @ApiIgnore HttpServletRequest request
                                   ){

        IPage<ApptChildRelationship> page = new Page<>(pageNum,pageSize);
        IPage<ChildApiVo> pageData = childService.getByPersonId(page,personId);
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(200);
        rspData.setRows(pageData.getRecords());
        rspData.setMsg("查詢成功");
        rspData.setTotal(pageData.getTotal());
        return AjaxResult.success(rspData);
    }
 
 @PostMapping("/getCode")
    @Operation(summary = "獲取預(yù)約碼", method = "POST")
    @ApiImplicitParam(value = "預(yù)約id")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "personId", value = "用戶id", paramType = "form"),
            @ApiImplicitParam(name = "apptId", value = "預(yù)約id", paramType = "form"),
            @ApiImplicitParam(name = "collectLocationId", value = "采樣點id", paramType = "form"),
    })
    public String getCode(Long personId, Long apptId, Long collectLocationId) {
        return vficPersonService.generateApptQrCode(apptId, personId, collectLocationId);
    }
}

swagger3示例


6、動態(tài)數(shù)據(jù)源baomidou的dynamic-datasource依賴變動

經(jīng)過測試,該條也可以不升級
參考1:baomidou dynamic-datasource、
參考2:kancloud tracy5546 dynamic-datasource

<!-- spring-boot 1.5.x 2.x.x 3.xx -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version>
</dependency>

<!-- spring-boot 3.x.x -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
  <version>${version}</version>
</dependency>

7、Spring Framework 6.0 中刪除了對 Apache HttpClient 支持(RestTemplate受影響)

升級到SpringBoot3發(fā)現(xiàn)依賴提示缺少:rg.apache.httpcomponents:httpclient,一些三方庫可能依賴httpclient,就需要自己手工引入依賴。三方包如:spring-data-elasticsearch5、nacos-client 1.4.6、weixin-java-pay 4.0.0、htmlunit 3.6

參考: Spring-Boot-3.0-Migration-Guide#apache-httpclient-in-resttemplate、

<!-- spring framwork 5.x中默認引入apcache httpclient4,在spring framwork6.x中如果需要要手工引入 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.14</version>
</dependency>

<!-- spring framwork 6.x中的apcache httpclient5 -->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>

8、SpringBoot3.0整合RocketMQ時出現(xiàn)未能加載bean文件

springboot2.x使用rocketmq沒有問題,springboot3出現(xiàn),required a bean of type ‘org.apache.rocketmq.spring.core.RocketMQTemplate’ that could not be found.

參考1:SpringBoot3.0整合RocketMQ時出現(xiàn)未能加載bean文件
參考2:Spring boot 3.0整合RocketMQ及不兼容的問題

<dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <!--    目前也沒有新版本,roketmq2.2.3沒有適配springboot3-->
            <version>2.2.3</version>
        </dependency>
// 定義個配置類,引入也可以:
@Configuration
@Import({RocketMQAutoConfiguration.class})
public class RocketMQConfig {
}

9、springboot3默認依賴 elasticsearch從7.x升級到8.x

  • 配置文件地址修改:spring.elasticsearch.rest.uris==>spring.elasticsearch.uris
  • springboot3要求elasticsearch必須升級到8.x,不能使用7.x,否則報錯:缺失響應(yīng)頭X-Elastic-Product(Elasticsearch)
  • 廢棄:high client客戶端
  • 要求ElasticSearch必須8.x

10、springboot 3.2 openFeign加載失敗暫未解決 (3.1沒問題)

啟動失敗 feign導(dǎo)致 not annotated with HTTP method type (ex. GET, POST)

  • https://blog.csdn.net/nailsoul/article/details/105223740
  • https://www.jianshu.com/p/11b4cbc8951a
  • https://juejin.cn/post/7112414513550491656

11、hutool5.8–>hutool6.0升級要要點

說明常見類,如果找不到,請看源碼注釋,注釋上面寫的有,或者全局搜索即可,無需多說。

  • ServletUtil–>JakartaServletUtil
  • hutool類變化說明: 【6.0.0】升級到6.0不兼容情況匯總,大家一起來統(tǒng)計維護呀、
  • 國密相關(guān)SmUtil,使用6.0x問題,參加:hutool 5.x 和 hutool 6.x crypto 國密SMUtil 模塊放在一個工程中會產(chǎn)生沖突

12、Centos7使用jdk21報錯

java: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by /usr/local/java/jdk-21.0.2+13/bin/…/lib/libjli.so)

原因,Centos6缺失GLIBC_2.14,報錯缺失2.14、2.15解決辦法相同。
只需要安裝最高版本,自動安裝低版本,比如:安裝2.17.自動安裝2.14

參考1:version `GLIBC_2.14’ not found 問題解決

參考2:解決 /lib64/libc.so.6: version `GLIBC_2.15’ not found 問題

最新已經(jīng)是2.38了,可以直接安裝:wget --no-check-certificate https://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz,安裝前確保安裝的有gcc。

  • Centos6 推薦2.17

13、@Async注解報錯Invalid return type for async method (only Future and void

分析原因,springboot2.7一切正常,升級到springboot3.x@Async標(biāo)記的方法,只能返還void或者Future(@Async+Future+AsyncResult返回值)

參考1:spring 升級到JDK 17和Sping Boot 3后,異步僅接受Future和void作為返回類型
參考2:Async only accepted Future and void as return type after upgrade to JDK 17 and Spring Boot 3文章來源地址http://www.zghlxwxcb.cn/news/detail-837559.html

到了這里,關(guān)于SpringBoot2.7升級項目到Springboot3.1踩坑指南(jdk17/jdk21)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 快速搭建SpringBoot3.x項目

    快速搭建SpringBoot3.x項目

    上一小節(jié)中我們從0到1 使用Vite搭建了一個Vue3項目,并集成了Element Plus 實現(xiàn)了一個簡單的增刪改查頁面。 這一篇中我們將使用IDEA快速搭建一個SpringBoot3.x的項目。 1、File-new-project 2、選擇“Spring Initializr”,點擊next; 3、選擇spring boot版本及添加相關(guān)依賴 這一步我們需要選擇

    2024年02月08日
    瀏覽(19)
  • springboot升級過程中踩坑定位分析記錄 | 京東云技術(shù)團隊

    作者:京東零售?李文龍 “ 俗話說:為了修復(fù)一個小bug而引入了一個更大bug ” 因所負責(zé)的系統(tǒng)使用的spring框架版本5.1.5.RELEASE在線上出過一個偶發(fā)的小事故,最后定位為spring-context中的一個bug導(dǎo)致的。 為了修復(fù)此bug進行了spring版本的升級,最終定的版本為收銀臺團隊使用的版

    2024年02月01日
    瀏覽(24)
  • 【重磅】:Spring Initializer 已經(jīng)不支持Java8,也就是SpringBoot2.x項目初始化

    【重磅】:Spring Initializer 已經(jīng)不支持Java8,也就是SpringBoot2.x項目初始化

    我們可以看到在IDEA內(nèi)置的Spring Initializer中 Java版本選擇模塊已經(jīng)不支持1.8了,同樣的,官網(wǎng)也不再支持了 Spring Boot 3.x要求 Java最低版本為17, 最新的SpringBoot版本已經(jīng)要求Java21了 所以,你可以升級Java版本,使用SpringBoot3.X 我們可以嘗試查看一下, 訪問Spring官網(wǎng),按照下圖操作

    2024年02月04日
    瀏覽(26)
  • Java項目實戰(zhàn)--基于SpringBoot3.0開發(fā)仿12306高并發(fā)售票系統(tǒng)--(一)前置知識

    Java項目實戰(zhàn)--基于SpringBoot3.0開發(fā)仿12306高并發(fā)售票系統(tǒng)--(一)前置知識

    本文參考自 Springboot3+微服務(wù)實戰(zhàn)12306高性能售票系統(tǒng) - 慕課網(wǎng) (imooc.com) 本章將介紹仿12306售票系統(tǒng)實戰(zhàn)開發(fā)的開發(fā)環(huán)境、項目核心技術(shù)和功能、項目模塊和架構(gòu)設(shè)計、開發(fā)所需前置知識,若想直接開始編寫代碼實現(xiàn),請關(guān)注作者,看后面的第二章——項目實現(xiàn) 后端: JDK 17

    2024年04月12日
    瀏覽(35)
  • 升級springboot3.2.0報Name for argument of type [java.lang.String] not specified, and parameter name inf

    我這里項目版本是jdk17+springboot3.1.5 升級為jdk21和springboot3.2.0;升級過程總體還是挺順利的,只是訪問應(yīng)用時老報錯: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either. 這個錯誤,是因為spring6.1 調(diào)整了參數(shù),而springboot會自動幫助設(shè)置

    2024年02月04日
    瀏覽(26)
  • 【Spring實戰(zhàn)項目】SpringBoot3整合WebSocket+攔截器實現(xiàn)登錄驗證!從原理到實戰(zhàn)

    【Spring實戰(zhàn)項目】SpringBoot3整合WebSocket+攔截器實現(xiàn)登錄驗證!從原理到實戰(zhàn)

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年04月17日
    瀏覽(21)
  • 使用Gradle7.6.1 + SpringBoot3.0.2 + java17創(chuàng)建微服務(wù)項目(學(xué)習(xí))

    使用Gradle7.6.1 + SpringBoot3.0.2 + java17創(chuàng)建微服務(wù)項目(學(xué)習(xí))

    這是一個大膽的決定 技術(shù) 版本 spring-boot 3.0.2 spring-cloud 2022.0.2 spring-cloud-alibaba 2022.0.0.0-RC2 mybatis-plus-boot-starter 3.5.3.1 mysql-connector-java 8.0.32 技術(shù) 版本 java 17 gradle 7.6.1 IDEA 2022.2.4 Nvcat 15 MySQL 8.0.32 打開IDEA創(chuàng)建 SpringBoot項目 刪除父項目中的src模塊 新建兩個子項目(新建時會重新創(chuàng)建

    2024年02月06日
    瀏覽(24)
  • JAVA新實戰(zhàn)1:使用vscode+gradle+openJDK21搭建java springboot3項目開發(fā)環(huán)境

    JAVA新實戰(zhàn)1:使用vscode+gradle+openJDK21搭建java springboot3項目開發(fā)環(huán)境

    ? ? ? ? 作為一個干了多年的全棧技術(shù)工程師,厭倦了使用盜版IDE,近些年開發(fā)Java一直使用IntelliJ IDEA進行Springboot后端項目開發(fā),對于IntelliJ IDEA 授權(quán)問題,一直花錢買學(xué)生類的授權(quán),但經(jīng)常被屏蔽,無法使用,又不舍得花大錢買企業(yè)版,索性不再使用了。決定改用 VsCode+Gr

    2024年02月03日
    瀏覽(22)
  • 【SpringBoot2】SpringBoot開發(fā)實用篇

    【SpringBoot2】SpringBoot開發(fā)實用篇

    ? 什么是熱部署?簡單說就是你程序改了,現(xiàn)在要重新啟動服務(wù)器,嫌麻煩?不用重啟,服務(wù)器會自己悄悄的把更新后的程序給重新加載一遍,這就是熱部署。 ? 熱部署的功能是如何實現(xiàn)的呢?這就要分兩種情況來說了,非springboot工程和springboot工程的熱部署實現(xiàn)方式完全

    2023年04月25日
    瀏覽(31)
  • Java項目實戰(zhàn)筆記--基于SpringBoot3.0開發(fā)仿12306高并發(fā)售票系統(tǒng)--(二)項目實現(xiàn)-第二篇-前端模塊搭建及單點登錄的實現(xiàn)

    Java項目實戰(zhàn)筆記--基于SpringBoot3.0開發(fā)仿12306高并發(fā)售票系統(tǒng)--(二)項目實現(xiàn)-第二篇-前端模塊搭建及單點登錄的實現(xiàn)

    本文參考自 Springboot3+微服務(wù)實戰(zhàn)12306高性能售票系統(tǒng) - 慕課網(wǎng) (imooc.com) 本文是仿12306項目實戰(zhàn)第(二)章——項目實現(xiàn) 的第二篇,詳細講解使用Vue3 + Vue CLI 實現(xiàn)前端模塊搭建的過程,同時其中也會涉及一些前后端交互的實現(xiàn),因此也會開發(fā)一些后端接口;搭建好前端頁面后,

    2024年03月26日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包