Springboot mini - Solon詳解(二)- Solon的核心
阿新 • • 發佈:2020-12-10
Springboot mini - Solon 的核心
在上篇中我們成功運行了一個簡單的web應用;本篇將對它的啟動過程、擴充套件體系和應用屬性配置進行介紹。
(一)Solon.start(source, args, builder) 內部執行過程(即Solon的啟動過程)
- 例項化 Solon.global()
- 載入應用屬性配置
- 載入擴充套件資料夾
- 掃描外掛並排序記錄(外掛也可叫擴充套件元件)
- 執行builder函式(如果它不為null)
- 執行外掛
- 掃描source目錄並載入java bean
- 載入渲染關係
- 完成
瞭解這個過程非常之重要,尤其是有興致開發外掛的同學:你的外掛在執行之前,配置已經存在了,但java bean仍未載入。
(二)Plugin 外掛體系
Solon 的外掛也可以叫擴充套件元件,相當於Spring 的 starter。Solon已經提供了大量的基礎外掛,但對第三方的框架適配目前較少。
外掛 | 說明 |
---|---|
boot外掛:: | 說明 |
org.noear:solon.boot.jlhttp* | boot外掛,對jlhttp 適配,提供http 服務(不自帶session state) |
org.noear:solon.boot.jetty* | boot外掛,對jetty 適配,提供http 服務(網友@khb提供) |
org.noear:solon.boot.undertow* | boot外掛,對undertow http 服務(網友@tyk提供) |
org.noear:solon.boot.websocket | boot外掛,對java-websocket 適配,提供websocket 服務 |
org.noear:solon.extend.jetty.jsp | 擴充套件外掛,為jetty 新增jsp 支援(不建議使用jsp)(網友@khb提供) |
org.noear:solon.extend.undertow.jsp | 擴充套件外掛,為undertow 新增jsp 支援(不建議使用jsp)(網友@tyk提供) |
SocketD boot外掛:: | 說明 |
org.noear:solon.boot.socketd.jdksocket | boot外掛,對jdk-socket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.netty | boot外掛,對netty 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.smartsocket | boot外掛,對smartboot-socket 適配,提供socketd 服務 |
靜態檔案支援外掛:: | 說明 |
org.noear:solon.extend.staticfiles | 擴充套件外掛,新增靜態檔案支援(監視 resources/static 資料夾) |
切面支援外掛:: | 說明 |
org.noear:solon.extend.aspect | 擴充套件外掛,新增Dao、Service註解支援;進而支援事務和快取註解 |
資料操作支援外掛:: | 說明 |
org.noear:solon.extend.data | 擴充套件外掛,實現事務和快取的註解支援 |
驗證操作支援外掛:: | 說明 |
org.noear:solon.extend.validation | 擴充套件外掛,實現驗證類註解支援 |
Yaml配置支援外掛:: | 說明 |
org.noear:solon.extend.properties.yaml | 擴充套件外掛,新增yml配置檔案支援 |
定時任務支援外掛:: | 說明 |
org.noear:solon.extend.schedule | 擴充套件外掛,實現定時任務支援(和 cron4j-solon-plugin 風格不同) |
遠端關閉支援外掛:: | 說明 |
org.noear:solon.extend.stop | 擴充套件外掛,實現遠端關閉支援 |
Session外掛:: | 說明(可將boot外掛的session state服務,自動換掉) |
org.noear:solon.extend.sessionstate.local | 擴充套件外掛,本地session |
org.noear:solon.extend.sessionstate.redis | 擴充套件外掛,分散式session (其於redis 構建) |
序列化外掛:: | 說明 |
org.noear:solon.serialization.fastjson* | 序列化外掛,對 fastjson 適配,提供json 檢視輸出 或 序列化輸出 |
org.noear:solon.serialization.snack3* | 序列化外掛,對 snack3 適配,提供json 檢視輸出 或 序列化輸出 |
org.noear:solon.serialization.hession* | 序列化外掛,對 hession 適配,提供 hession 序列化輸出 |
org.noear:solon.serialization.jackson | 序列化外掛,對 jackson 適配,提供json 檢視輸出 或 序列化輸出 |
檢視外掛:: | 說明(可置多個檢視外掛) |
org.noear:solon.view.freemarker* | 檢視外掛,對 freemarker 適配,提供html 檢視輸出 |
org.noear:solon.view.jsp | 檢視外掛,對 jsp 適配,提供html 檢視輸出 |
org.noear:solon.view.velocity | 檢視外掛,對 velocity 適配,提供html 檢視輸出 |
org.noear:solon.view.thymeleaf | 檢視外掛,對 thymeleaf 適配,提供html 檢視輸出 |
org.noear:solon.view.beetl | 檢視外掛,對 beetl 適配,提供html 檢視輸出 |
org.noear:solon.view.enjoy | 檢視外掛,對 enjoy 適配,提供html 檢視輸出 |
rpc client:: | 說明 |
org.noear:nami | 做為 solon rpc client 使用(支援http, socket, web socket) |
外部框架適配:: | 說明 |
org.noear:beetlsql-solon-plugin | beetlsql 適配外掛 |
org.noear:cron4j-solon-plugin | cron4j 適配外掛 |
org.noear:dubbo-solon-plugin | dubbo 適配外掛 |
org.noear:feign-solon-plugin | feign 適配外掛 |
org.noear:hasor-solon-plugin | hasor 適配外掛 |
org.noear:mybatis-solon-plugin | mybatis 適配外掛 |
org.noear:mybatis-sqlhelper-solon-plugin | mybatis 分頁適配外掛 |
org.noear:quartz-solon-plugin | quartz 適配外掛 |
org.noear:weed3-solon-plugin | weed3 適配外掛 |
怎麼使用?直接在pom.xml中新增依賴即可。
(三)應用屬性配置檔案
Solon專案會使用一個全域性的屬性配置檔案 application.properties 或者是 application.yml,在resources目錄下。
Solon會根據在pom.xml中依賴的jar包進行自動配置,當我們要對這些jar包對應的框架進行配置又該怎麼辦呢?沒錯,可以在全域性配置檔案(application.properties 或者是 application.yml)中進行配置,如http server的埠配置等。
a.基礎約定(不能改,為了簡化套路)
//資源路徑說明(不用配置;也不能配置)
resources/application.properties(或 application.yml) 為應用配置檔案
resources/static/ 為靜態檔案根目標
resources/WEB-INF/view/ 為檢視模板檔案根目標(支援多檢視共存)
//除錯模式:
啟動引數新增:-debug=1 或 --debug=1
b.埠配置(以使用 application.yml 為例)
server.port: 8080
c.請求包大小限制
server.request.maxRequestSize: 2Mb
d.會話超時
server.session.timeout: 3600 #單位:s
e.檢視引擎配置(可多引擎共享)
原則上不要加這些配置,更不要修改;想用哪個模板,加哪個元件即可(有利於簡化套路)
#預設的配置(不需要改配置,除非要修改)
solon.view.mapping.htm: BeetlRender #簡寫
solon.view.mapping.shtm: EnjoyRender
solon.view.mapping.ftl: FreemarkerRender #預設的模板引擎
solon.view.mapping.jsp: JspRender
solon.view.mapping.html: ThymeleafRender
solon.view.mapping.vm: org.noear.solon.view.velocity.VelocityRender #引擎全名(一般用簡寫)
f.分散式session配置
當新增org.noear:solon.extend.sessionstate.redis元件時,即切換為分散式session,需要以下配置了(它基於redis包裝;也可以基於介面自己造一個):
# 當使用 sesstionstate.redis 的配置
server.session.state.redis.server: 127.0.0.1:6379
server.session.state.redis.password: xxx
server.session.state.redis.db: 31
server.session.state.redis.maxTotaol: 200
g.統一的日誌
Solon預設沒有對接外部日誌框架,而是通過事件匯流排接收應用內所有的異常。
Solon.start(...).onEerror(err-> ..)
i.頁面跳轉
ctx.redirect("http://www.noear.org");
//or
Context.current().redirect("http://www.noear.org");
(四)其它配置說明
a.自定義屬性
只要名字不衝突,隨便加。例:
user.name: "lie lai"
b.屬性引用(這個不支援;為了簡化套路)
user.name: "lie lai"
message: "${user.name} 你好!" #這個不支援(有需要的時候,自己替換)
c.如何獲取屬性配置
//註解模式
@Inject("${user.name}")
//程式碼模式
Solon.cfg().get("user.name")
d.屬性轉物件
這個功能用起來會很方便,簡化不少的程式碼編寫。
//註解模式
//
@Configuration // Configuration或別的類註解,都可
public class test{
//注入欄位,在任何託管Bean裡有效
//
@Inject("${user}")
UserModel user;
//注入引數,只在@Configuration類有效
//
@Bean
public Xxxxx buildXxxx(@Inject("${test.db1}") HikariDataSource dataSource){
}
}
//程式碼模式
UserModel user = Solon.cfg().getBean("user", UserModel.class);
HikariDataSource dataSource = Solon.cfg().getBean("test.db1", HikariDataSource.class);
本篇到此結束,主要介紹了Solon中幾個的問題:1,啟動過程;2,擴充套件體系,3,應用屬性配置,同時解決上篇中的幾個問題,從下篇開始,將針對Solon的web開發進一步展開介紹。
附:Solon專案地址
- gitee: https://gitee.com/noear/solon
- github: https://github.com/noear/solon