將SpringBoot項目改造成solon項目

solon項目介紹

官網

Java “生態型”應用開發框架:更快、更小、更簡單。 啟動快 5 ~ 10 倍;并發高 2~ 3 倍; 內存省 1/3 ~
1/2;打包縮到 1/2 ~ 1/10;同時支持 java8, java11, java17, java21;支持 graalvm
native image。

本文介紹如何把SpringBoot項目改造成solon

在決定改造之前最好充分對比下自己的項目與solon的區別,建議先看下這篇文章:https://solon.noear.org/article/compare-springboot

具體改造步驟如下:

  • 備份代碼

如果是采用git管理代碼最好新開一個分支進行操作

替換根pom.xml parent部分(如果沒有則加上)

<parent><groupId>org.noear</groupId><artifactId>solon-parent</artifactId><version>2.6.5</version><relativePath />
</parent>

新增如下依賴

	<dependency><groupId>org.noear</groupId><artifactId>solon-api</artifactId></dependency><dependency><groupId>org.noear</groupId><artifactId>solon.web.cors</artifactId></dependency><dependency><groupId>org.noear</groupId><artifactId>solon.logging.logback</artifactId></dependency><dependency><groupId>org.noear</groupId><artifactId>mybatis-solon-plugin</artifactId></dependency>

全局替換

使用IDE自帶的全局替換功能進行替換

  • 替換注解

@Service 替換成 @Component
@Value 替換成 @Inject
@RequestMapping 替換成 @Mapping
@GetMapping 替換成 @Get @Mapping
@PostMapping 替換成 @Post @Mapping
@PutMapping 替換成 @Put @Mapping
@DeleteMapping 替換成 @Delete @Mapping
@PathVariable 替換成 @Path
@RestController 替換成 @Controller
@PostConstruct 替換成 @Init

  • 替換import
import org.springframework.beans.factory.annotation.Autowired; 替換成 mport org.noear.solon.annotation.Inject; 
//這里需要注意,如果是Mapper要改成@Dbimport org.springframework.stereotype.Service; 替換成 import org.noear.solon.annotation.Component;import org.springframework.context.annotation.Configuration; 替換成 import org.noear.solon.annotation.Configuration;import org.springframework.web.bind.annotation.RestController; 替換成 import org.noear.solon.annotation.Controller;import org.springframework.web.bind.annotation.RequestMapping; 替換成 import org.noear.solon.annotation.Mapping;import org.springframework.web.bind.annotation.PathVariable; 替換成 import org.noear.solon.annotation.Path;import org.springframework.web.bind.annotation.RequestBody; 替換成 空字符串(什么都不填)import javax.annotation.PostConstruct; 替換成 import org.noear.solon.annotation.Init;

至此注解已經替換得差不多了,接下來改造其它特性

  • 更換啟動類

刪除或者注釋SpringBoot啟動類,新增一個App.java

內容如下:

import com.gitee.gen.config.ConnectionHandler;
import org.noear.solon.Solon;
import org.noear.solon.web.cors.CrossFilter;public class App {public static void main(String[] args) {Solon.start(App.class, args, app->{});}}
  • 跨域設置

注釋SpringBoot的跨越配置

新增maven依賴

<dependency><groupId>org.noear</groupId><artifactId>solon.web.cors</artifactId>
</dependency>

啟動類添加:

public static void main(String[] args) {Solon.start(App.class, args, app->{// 跨域設置app.filter(-1, new CrossFilter().allowedOrigins("*")); //加-1 優先級更高});
}
  • 數據庫配置(mybatis)

resources下新增文件app.yml

新增數據庫配置

# 配置數據源
mybatis.db1:url: driverClassName: userName: password: # 配置數據源對應的 mybatis 信息(要與 DataSource bean 的名字對上)
mybatis.db1:mappers:        #支持包名 或 類名(大寫開頭 或 *)或 xml(.xml結尾)//支持 ** 或 * 占位符- "com.xxx.mapper.*" #這個表達式同上效果- "classpath:mybatis/**/*.xml"configuration:  #擴展配置(要與 Configuration 類的屬性一一對應)cacheEnabled: falsemapperVerifyEnabled: true #如果為 true,則要求所有 mapper 有 @Mapper 主解mapUnderscoreToCamelCase: true

新增一個配置類

import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;@Configuration
public class Config {//此下的 db1 與 mybatis.db1 將對應在起來 //可以用 @Db("db1") 注入mapper//typed=true,表示默認數據源。@Db 可不帶名字注入@Bean(name = "db1", typed = true)public DataSource db1(@Inject("${demo.db1}") HikariDataSource ds) {return ds;}
}

詳細配置參考:https://solon.noear.org/article/20

  • 全局異常處理

去掉SpringBoot自帶的異常處理

新增如下java類:

import org.noear.solon.annotation.Component;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Handler;
import org.noear.solon.core.route.RouterInterceptor;
import org.noear.solon.core.route.RouterInterceptorChain;
import org.noear.solon.validation.ValidatorException;@Component(index = 0) //index 為順序位(不加,則默認為0)
public class AppRouterInterceptor implements RouterInterceptor {@Overridepublic void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {try {chain.doIntercept(ctx, mainHandler);if (mainHandler == null) {ctx.render(Action.err("資源不存在"));}} catch (ValidatorException e) {ctx.render(Action.err(e.getMessage())); //e.getResult().getDescription()} catch (Throwable e) {ctx.render(Action.err(e.getMessage()));}}
}

統一異常處理具體參考:https://solon.noear.org/article/503

  • 接口重定向
@Controller
public class HomeController {// 瀏覽器訪問http://localhost:8080 跳轉到 http://localhost:8080/index.html@Get@Mapping("/")public void index(Context context) {context.redirect("index.html");}}
  • 靜態資源映射

SpringBoot中的靜態資源映射方式如下:

public void addResourceHandlers(ResourceHandlerRegistry registry) {// 效果:將本地dist靜態目錄代理為網頁根目錄,類似于nginx的網頁代理String frontRoot = "/home/project/app/dist";registry.addResourceHandler("/index.html").addResourceLocations(frontLocation + "/index.html");registry.addResourceHandler("/favicon.ico").addResourceLocations(frontLocation + "/favicon.ico");registry.addResourceHandler("/static/**").addResourceLocations(frontLocation + "/static/");
}

solon方式如下:

maven添加依賴

<dependency><groupId>org.noear</groupId><artifactId>solon.web.staticfiles</artifactId>
</dependency>

啟動類添加配置

public static void main(String[] args) {Solon.start(App.class, args, app->{// 跨域設置app.filter(-1, new CrossFilter().allowedOrigins("*")); //加-1 優先級更高// 靜態資源代理String frontRoot = "/home/project/app/dist";StaticMappings.add("/", new FileStaticRepository(frontRoot));});
}

至此整個項目已經改造得差不多了,如果有其它特性需要改造,可以參考官方例子進行更改,參見:solon生態

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716509.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構學習(二)字符串

字符串 1. 概念 字符串就是特殊的字符數組&#xff0c;字符數組末尾的元素為 ‘\0’。和數組一樣可以使用arr[i]或*(arri)來訪問元素。 無論是用數組保存字符串&#xff08;如&#xff1a;char arr[] "Hello&#xff0c;World";&#xff09;&#xff0c;還是用指針…

漢諾塔問題(c++題解)

題目描述 1、一次只許移動一個盤 2、任何時候、任何柱子不允許把大盤放在小盤上面。 3、可使用任一一根立柱暫存圓盤。 問&#xff1a;如何使用最少步數實現n個盤子的移動&#xff1f;打印出具體移動方案。 輸入格式 一行一個數n, 1< n < 18 輸出格式 輸出若干行…

關于HTML5表單驗證的方法教程

簡介 HTML5表單驗證是一種在客戶端對用戶輸入進行驗證的方法&#xff0c;可以有效地減少對于服務器端驗證的依賴。通過使用HTML5表單驗證&#xff0c;可以為用戶提供實時的錯誤提示和更好的用戶體驗。本教程將介紹如何在HTML5中使用各種驗證屬性和技術來實現表單驗證。 基本表…

flynn發布服務小結

背景 flynn是一個基于容器的paas平臺&#xff0c;可以快速的發布運行新的應用&#xff0c;用戶只需要提交代碼到git上&#xff0c;flynn就會基于提交的代碼進行發布和部署&#xff0c;本文就簡單看下flynn發布部署的流程 flynn發布服務 1.首先flynn會基于用戶的web代碼構建一…

Nature 研究亮點(Volume 626 Issue 8001, 29 February 2024)

文章目錄 激光雕刻肥皂膜卵細胞的回收系統巴斯克語的起源產后抑郁癥的治療 激光雕刻肥皂膜 研究者&#xff1a;Haitao Xu 和 Yu Zhao&#xff0c;清華大學&#xff0c;北京。 發現&#xff1a;在特定條件下&#xff0c;可以使用激光在肥皂膜上進行雕刻。肥皂膜由洗滌劑分子&am…

AJAX 學習筆記(Day1)

「寫在前面」 本文為黑馬程序員 AJAX 教程的學習筆記。本著自己學習、分享他人的態度&#xff0c;分享學習筆記&#xff0c;希望能對大家有所幫助。 目錄 0 課程介紹 1 AJAX 入門 1.1 AJAX 概念和 axios 使用 1.2 認識 URL 1.3 URL 查詢參數 1.4 常用請求方法和數據提交 1.5 HT…

H264的打包,nal,es,pes,pts,dts,ps,ts

編碼層次 視頻編碼層&#xff1a;預測、變換、量化、熵編碼等操作slice層&#xff1a;將視頻幀分割成若干個編碼單元&#xff0c;包含一定數量的宏塊&#xff0c;提高編解碼的并行性和容錯性。NAL層&#xff1a;提升對網絡傳輸和數據存儲的親和性 視頻編碼層 基準-Baseline …

云計算與大數據課程筆記(一)云計算背景與介紹

如何實現一個簡易搜索引擎&#xff1f; 實現一個簡易的搜索引擎可以分為幾個基本步驟&#xff1a;數據收集&#xff08;爬蟲&#xff09;、數據處理&#xff08;索引&#xff09;、查詢處理和結果呈現。下面是一個概括的實現流程&#xff1a; 1. 數據收集&#xff08;爬蟲&am…

Java實戰:Spring Boot項目中如何利用Redis實現用戶IP接口限流

引言 在高并發的Web應用中&#xff0c;接口限流是一項至關重要的技術手段&#xff0c;它有助于保護系統資源&#xff0c;防止因瞬間流量高峰導致服務崩潰。本文將深入探討如何在Spring Boot項目中借助Redis實現用戶IP級別的接口限流策略&#xff0c;通過具體的代碼示例&#x…

大數據概述

學習大數據有什么用&#xff1f; 2010年&#xff1a;大數據技術體系開始在國內火熱 2015年&#xff1a;國務院印發《促進大數據發展行動綱要》 2016年&#xff1a;發改委發布關于組織實施促進大數據發展重大工程的通知 2017年&#xff1a;工信部印發大數據產業規劃(2016-20…

Linux運維_Bash腳本_構建安裝Meson-1.0.1和Ninja-1.11.1

Linux運維_Bash腳本_構建安裝Meson-1.0.1和Ninja-1.11.1 Bash (Bourne Again Shell) 是一個解釋器&#xff0c;負責處理 Unix 系統命令行上的命令。它是由 Brian Fox 編寫的免費軟件&#xff0c;并于 1989 年發布的免費軟件&#xff0c;作為 Sh (Bourne Shell) 的替代品。 您…

Nginx高級技巧:實現負載均衡和反向代理

文章目錄 Nginx概述Nginx作用正向代理反向代理負載均衡動靜分離 Nginx的安裝 -->Docker3.1 安裝Nginx3.2 Nginx的配置文件3.3 修改docker-compose文件 Nginx源碼安裝nginx常用命令nginx配置文件配置文件位置配置文件結構詳情 Nginx的反向代理【重點】基于Nginx實現反向代理4…

C語言冒泡排序(高級版)

目錄: 冒泡排序的原理 主函數 "冒泡排序函數" 比較函數 交換函數 最終輸出 完整代碼 冒泡排序的原理: 冒泡排序的原理是&#xff1a;從左到右&#xff0c;相鄰元素進行比較。每次比較一輪&#xff0c;就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右…

Windows上構建一個和Linux類似的Terminal

preview 目的是在Windows上構建一個和Linux類似的Terminal&#xff0c;讓Windows煉丹和Linux一樣舒適&#xff0c;同是讓Terminal取代Xshell完成遠程鏈接。 預覽如下圖 在Linux下我們使用zsh和oh-my-zsh結合&#xff0c;Windows下我們使用powershell7和oh-my-posh結合。 前提…

Vue 前端開發 v-for和v-if兩個指令不能混合使用

原由&#xff1a; 在進行項目開發的時候因為在一個標簽上同時使用了v-for和v-if兩個指令導致的報錯。 提示錯誤&#xff1a;The undefined variable inside v-for directive should be replaced with a computed property that returns filtered array instead. You should no…

nginx------------緩存功能 ip透傳 負載均衡 (六)

一、http 協議反向代理 &#xff08;一&#xff09;反向代理示例:緩存功能 緩存功能可以加速訪問&#xff0c;如果沒有緩存關閉后端服務器后&#xff0c;圖片將無法訪問&#xff0c;緩存功能默認關閉&#xff0c;需要開啟。 ? proxy_cache zone_name | off; 默認off #指明調…

基于Springboot純凈水配送和商城系統設計與實現 開題報告參考

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

2023 版王道單科書勘誤匯總(3.30)

注:因2023版對題目編號做了優化“歷年真題全部放最后、且按年份排序”&#xff0c;以方便大家根據需要保留某些年份的真題作為最后的模擬。所以造成了一些題目和解析的編號錯誤。 數據結構: P11 P20 P56 P278 P326 “2.”中第 3 行”題 5改成”9”&#xff0c;第6行”題 8”改成…

css3詳解

一.什么是CSS3 CSS3是Cascading Style Sheets的第三個版本&#xff0c;是一種用于描述文檔樣式的語言&#xff08;CSS3是CSS&#xff08;層疊樣式表&#xff09;技術的升級版本&#xff09;。它是前端開發中用于控制網頁布局和樣式的技術之一。CSS3引入了許多新的特性和功能&a…

Linux常用操作命令大全

Linux常用操作命令大全 Linux,作為一款開源的操作系統,深受全世界開發者和系統管理員的喜愛。在Linux環境下,用戶通過命令行界面可以執行各種操作,從而實現對系統的全面控制。本文將詳細介紹Linux中常用的操作命令,幫助讀者更好地理解和運用這些命令。 一、文件操作命令…