Solon详解系列文章:

Solon详解(一)- 快速入门

Solon详解(二)- Solon的核心

Solon详解(三)- Solon的web开发

Solon详解(四)- Solon的事务传播机制

Solon详解(五)- Solon扩展机制之Solon Plugin

Solon详解(六)- Solon的校验扩展框架使用与扩展

Solon的核心

在上篇中我们成功运行了一个简单的web应用;本篇将对它的启动过程、扩展体系和应用属性配置进行介绍。

(一)XApp.start(source, args, builder) 内部执行过程(即Solon的启动过程)

  1. 实例化 XApp.global()
  2. 加载应用属性配置
  3. 加载扩展文件夹
  4. 扫描插件并排序记录(插件也可叫扩展组件)
  5. 运行builder函数(如果它不为null)
  6. 运行插件
  7. 扫描source目录并加载java bean
  8. 加载渲染关系
  9. 完成

了解这个过程非常之重要,尤其是有兴致开发插件的同学:你的插件在运行之前,配置已经存在了,但java bean仍未加载。

(二)XPlugin 插件体系

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.boot.smartsocket boot插件,对smart-bsocket适配,提供socket服务
org.noear:solon.extend.jetty.jsp 扩展插件,为jetty添加jsp支持(不建议使用jsp)(网友@khb提供)
org.noear:solon.extend.undertow.jsp 扩展插件,为undertow添加jsp支持(不建议使用jsp)(网友@tyk提供)
静态文件支持插件:: 说明
org.noear:solon.extend.staticfiles 扩展插件,添加静态文件支持(监视 resources/static 文件夹)
切面支持插件:: 说明
org.noear:solon.extend.aspect 扩展插件,添加XDao、XService注解支持;进而支持事务和缓存注解
数据操作支持插件:: 说明
org.noear:solon.extend.data 扩展插件,实现事务和缓存的注解支持
验证操作支持插件:: 说明
org.noear:solon.extend.validation 扩展插件,实现验证类注解支持
Yaml配置支持插件:: 说明
org.noear:solon.extend.properties.yaml 扩展插件,添加yml配置文件支持
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:solonclient solon rpc client 与solon 的 rpc service 配对
外部框架适配:: 说明
org.noear:cron4j-solon-plugin cron4j 适配插件
org.noear:dubbo-solon-plugin dubbo 适配插件
org.noear:mybatis-solon-plugin mybatis 适配插件
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/ 为视图模板文件根目标(支持多视图共存) //调试模式:
启动参数添加:-deubg=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默认没有对接外部日志框架,而是通过事件总线接收应用内所有的异常。

XApp.start(...).onEerror(err-> ..)
i.页面跳转
ctx.redirect("http://www.noear.org");
//or
XContext.current.redirect("http://www.noear.org");

(四)其它配置说明

a.自定义属性

只要名字不冲突,随便加。例:

user.name: "lie lai"
b.属性引用(这个不支持;为了简化套路)
user.name: "lie lai"
message: "${user.name} 你好!" #这个不支持(有需要的时候,自己替换)
c.如何获取属性配置
//注解模式
@XInject("${user.name}") //代码模式
XApp.cfg().get("user.name")
d.属性转对象

这个功能用起来会很方便,简化不少的代码编写。

//注解模式
//
@XConfiguration // XConfiguration或别的类注解,都可
public class test{
//注入字段,在任何托管Bean里有效
//
@XInject("${user}")
UserModel user; //注入参数,只在@XConfiguration类有效
//
@XBean
public Xxxxx buildXxxx(@XInject("${test.db1}") HikariDataSource dataSource){ }
} //代码模式
UserModel user = XApp.cfg().getBean("user", UserModel.class);
HikariDataSource dataSource = XApp.cfg().getBean("test.db1", HikariDataSource.class);

本篇到此结束,主要介绍了Solon中几个的问题:1,启动过程;2,扩展体系,3,应用属性配置,同时解决上篇中的几个问题,从下篇开始,将针对Solon的web开发进一步展开介绍。

Solon详解(二)- Solon的核心的更多相关文章

  1. Springboot mini - Solon详解(二)- Solon的核心

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  2. Solon详解(六)- Solon的校验扩展框架使用与扩展

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  3. Solon详解(三)- Solon的web开发

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  4. Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  5. Solon详解(八)- Solon的缓存框架使用和定制

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  6. Solon详解(九)- 渲染控制之定制统一的接口输出

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  7. Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  8. Solon详解(11)- Mybatis 与 Solon 相亲相爱

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  9. Springboot mini - Solon详解(四)- Solon的事务传播机制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

随机推荐

  1. 10、Strategy 策略模式 整体地替换算法 行为型模式

    1.模式说明 策略模式比较好理解,就是将程序中用到的算法整体的拿出来,并有多个不同版本的算法实现,在程序运行阶段,动态的决定使用哪个算法来解决问题. 2.举例 排序算法的问题,假如我们的程序中需要对数 ...

  2. 最新版CentOS8系统安装和基本配置

    一.Centos8新版简介 Redhat公司在2019年5月推出了rhel8,年底推出了centos8,紧接着也会把相关的技术认证完全转换为新平台. 阿里云.华为云目前也已推出centos8的公共镜像 ...

  3. Django中信号signal针对model的使用

    Django中实现对数据库操作的记录除了使用[开源插件]还可以使用信号signal独立实现 信号机制-观察者模式-发布与订阅:signal - 配置 # 文件路径:Django/myapps/__in ...

  4. Django-Model模型Field选项中null和blank的区别

    - Option-**blank**设置为True时代表填写表单的时候可以为空,即在save()执行时此字段可以没有,如果字段没有就在数据库上存储一个空字符串: - Option-**null**设置 ...

  5. C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4005 访问. 给定两个大小为 m 和 n 的有序数组 nums1 ...

  6. NeuralCoref: python的共指消解工具教程

    转载地址 https://blog.csdn.net/blmoistawinde/article/details/81782971 共指消解 首先简要地说说共指消解是什么,有什么用处.假设机器正在阅读 ...

  7. JS的数据属性和访问器属性

    ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...

  8. GaussDB连接与登出

    连接 连接命令1: gsql -d ${dbName} -U ${userName} -p {port:默认为25308} -h {ip} -W {password} 连接命令2: gsql -d p ...

  9. equals&hashCode

    经典规则:如果重写了equals,必须重写hashCode 为什么??? 这个规则考虑的应用场景:如果你的对象可能放入HashMap,HashSet,不重写会出问题 问题场景: new一个对象,重写了 ...

  10. 使用 .NET Core 3.x 构建RESTful Api(第三部分)

    关于HTTP HEAD 和 HTTP GET: 从执行性能来说,这两种其实并没有什么区别.最大的不同就是对于HTTP HEAD 来说,Api消费者请求接口数据时,如果是通过HTTP HEAD的方式去请 ...