Solon 詳解系列文章:
Solon 框架詳解(一)- 快速入門
Solon 框架詳解(二)- Solon的核心
Solon 框架詳解(三)- Solon的web開發
Solon 框架詳解(四)- Solon的事務傳播機制
Solon 框架詳解(五)- Solon擴展機制之Solon Plugin
Solon 框架詳解(六)- Solon的校驗框架使用、定制與擴展
Solon 框架詳解(七)- Solon Ioc 的注解對比Spring及JSR330
Solon 框架詳解(八)- Solon的緩存框架使用和定制
Solon 框架詳解(九)- 渲染控制之定制統一的接口輸出
Solon 框架詳解(十)- Solon 的常用配置
Solon 框架詳解(十一)- Solon Cloud 的配置說明
Solon 的核心
在上篇中我們成功運行了一個簡單的web應用;本篇將對它的啟動過程、擴展體系和應用屬性配置進行介紹。
(一)Solon.start(source, args, builder) 內部執行過程(即Solon的啟動過程)
- 1.實例化 Solon.global() 並加載配置
- 2.加載擴展文件夾
- 3.掃描插件並排序
- 4.運行 initialize 函數
- 5.推送 AppInitEndEvent [事件]
- 6.運行插件
- 7.推送 PluginLoadEndEvent [事件]
- 8.導入java bean(@Import)
- 9.掃描並加載java bean
- a.推送 BeanLoadEndEvent [事件]
- b.加載渲染印映關系
- c.執行bean加完成事件
- d.推送 AppLoadEndEvent [事件]
- e.結束
了解這個過程非常之重要,尤其是有興致開發插件的同學:你的插件在運行之前,配置已經存在了,但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 、websocket 服務(網友@tyk提供) |
org.noear:solon.boot.websocket | boot插件,對java-websocket 適配,提供websocket 服務 |
org.noear:solon.extend.jetty.jsp | 擴展插件,為jetty 添加jsp 支持包(不建議使用jsp)(網友@khb提供) |
org.noear:solon.extend.jetty.websocket | 擴展插件,為jetty 添加websoekct 支持包 |
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.rsocket | boot插件,對rsocket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.smartsocket | boot插件,對smartboot-socket 適配,提供socketd 服務 |
org.noear:solon.boot.socketd.websocket | boot插件,對java-websocket 適配,提供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.extend.sessionstate.jwt | 擴展插件,分布式session (其於jwt 構建) |
序列化插件:: | 說明 |
org.noear:solon.serialization.fastjson* | 序列化插件,對 fastjson 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.snack3* | 序列化插件,對 snack3 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.jackson | 序列化插件,對 jackson 適配,提供json 視圖輸出 或 序列化輸出 |
org.noear:solon.serialization.hession* | 序列化插件,對 hession 適配,提供 hession 序列化輸出 |
org.noear:solon.serialization.protostuff* | 序列化插件,對 protostuff 適配,提供 protostuff 序列化輸出 |
視圖插件:: | 說明(可置多個視圖插件) |
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 視圖輸出 |
Solon 與 Springboot 融合適配插件:: | 說明 |
org.noear:solon-springboot-starter | springboot 適配插件 |
Solon 第三方框架適配插件:: | 說明 |
org.noear:beetlsql-solon-plugin | beetlsql 適配插件 |
org.noear:mybatis-solon-plugin | mybatis 適配插件 |
org.noear:mybatis-sqlhelper-solon-plugin | mybatis-sqlhelper 適配插件 |
org.noear:weed3-solon-plugin | weed3 適配插件 |
org.noear:cron4j-solon-plugin | cron4j 適配插件 |
org.noear:quartz-solon-plugin | quartz 適配插件 |
org.noear:dubbo-solon-plugin | dubbo 適配插件 |
org.noear:feign-solon-plugin | feign 適配插件 |
org.noear:hasor-solon-plugin | hasor 適配插件 |
org.noear:luffy-solon-plugin | luffy 適配插件 |
org.noear:sureness-solon-plugin | sureness 適配插件 |
Solon Cloud 第三方框架適配插件:: | 說明(提供分布式與微服務開發支持) |
org.noear:consul-solon-plugin | consul 適配插件(支持Solon cloud 配置服務、注冊與發現服務) |
org.noear:nacos-solon-plugin | nacos 適配插件(支持Solon cloud 配置服務、注冊與發現服務) |
org.noear:zookeeper-solon-plugin | zookeeper 適配插件(支持Solon cloud 配置服務、注冊與發現服務) |
org.noear:water-solon-plugin | water 適配插件(支持Solon cloud 配置服務、注冊與發現服務、事件總線服務、日志服務、跟蹤服務、鎖服務) |
org.noear:rabbitmq-solon-plugin | rabbitmq 適配插件(支持Solon cloud 事件總線服務) |
org.noear:rocketmq-solon-plugin | rocketmq 適配插件(支持Solon cloud 事件總線服務) |
org.noear:mqtt-solon-plugin | mqtt 適配插件(支持Solon cloud 事件總線服務) |
org.noear:kafka-solon-plugin | kafka 適配插件(支持Solon cloud 事件總線服務) |
org.noear:guava-solon-plugin | guava 適配插件(支持Solon cloud 融斷服務) |
org.noear:sentinel-solon-plugin | sentinel 適配插件(支持Solon cloud 融斷服務) |
org.noear:semaphore-solon-plugin | semaphore 適配插件(支持Solon cloud 融斷服務) |
org.noear:aliyun-oss-solon-plugin | aliyun-oss 適配插件(支持Solon cloud 分布式文件服務) |
org.noear:aws-s3-solon-plugin | aws-s3 適配插件(支持Solon cloud 分布式文件服務) |
org.noear:snowflake-id-solon-plugin | snowflake 算法適配插件(支持Solon cloud 分布式ID服務) |
Nami框架(Remoting client):: | 說明(通道 + 編碼器) |
org.noear:nami | Nami內核(支持http, socket, web socket) |
org.noear:nami.channel.http.hutool | Nami http通道 |
org.noear:nami.channel.http.okhttp | Nami http通道 |
org.noear:nami.channel.socketd.jdksocket | Nami socketd通道-基於bio實現 |
org.noear:nami.channel.socketd.netty | Nami socketd通道-基於nio,netty實現 |
org.noear:nami.channel.socketd.rsocket | Nami socketd通道-基於rsocket實現 |
org.noear:nami.channel.socketd.smartsocket | Nami socketd通道-基於aio實現 |
org.noear:nami.channel.socketd.websocket | Nami socketd通道-基於websocket實現 |
org.noear:nami.coder.fastjson | Nami json編碼器 |
org.noear:nami.coder.hessian | Nami hessian編碼器 |
org.noear:nami.coder.jackson | Nami jackson編碼器 |
org.noear:nami.coder.protostuff | Nami protostuff編碼器 |
org.noear:nami.coder.snack3 | Nami json編碼器 |
怎么使用?直接在pom.xml中添加依賴即可。
(三)應用屬性配置文件
Solon項目會使用一個全局的屬性配置文件 app.properties 或者是 app.yml,在resources目錄下。
Solon會根據在pom.xml中依賴的jar包進行自動配置,當我們要對這些jar包對應的框架進行配置又該怎么辦呢?沒錯,可以在全局配置文件(app.properties 或者是 app.yml)中進行配置,如http server的端口配置等。
a.基礎約定(不能改,為了簡化套路)
//資源路徑說明(不用配置;也不能配置)
resources/app.properties( 或 app.yml 或 application.properties 或 application.yml ) 為應用配置文件
resources/static/ 為靜態文件根目標
resources/WEB-INF/view/ 為視圖模板文件根目標(支持多視圖共存)
//調試模式:
啟動參數添加:-debug=1 或 --debug=1
b.端口配置(以使用 app.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