Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章:
Springboot mini - Solon详解(一)- 快速入门
Springboot mini - Solon详解(二)- Solon的核心
Springboot mini - Solon详解(三)- Solon的web开发
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
Springboot mini - Solon详解(二)- Solon的核心的更多相关文章
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(三)- Solon的web开发
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Solon详解(二)- Solon的核心
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(六)- Solon的校验扩展框架使用与扩展
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(三)- Solon的web开发
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
随机推荐
- putty连接Linux(NAT)
1.系统装好后第一次连的时候需要打开ssh服务 sudo apt-get install openssh-server 当在机器不能通过ping ip相通的话那么就要解决ip不同的问题,当ip相通还是 ...
- hmac检验客户端合法性
1.服务端 # 验证客户端是否合法 # 不依靠登陆认证 # 当有一个客户端访问你的时候,建立了tcp后,server端主动发起一个数据,数据为想加密的bytes类型的数据. # 客户端拿到要加密的by ...
- sqlilab less19-less22
less19 当账号密码正确时,会将当前的refer和ip存入数据库.对这两个值同时没有进行过滤.考虑使用sqlmap对这两个参数进行注入 less-20 当cookie uname存在时,并且不是p ...
- 基于gin的golang web开发:永远不要相信用户的输入
作为后端开发者我们要记住一句话:"永远不要相信用户的输入",这里所说的用户可能是人,也可能是另一个应用程序."永远不要相信用户的输入"是安全编码的准则,也就是说 ...
- ios中多线程GCD NSOperation NSThread 相关的操作解析
//1.GCD 继承自C语言 优点 简单方便 //开启一个子线程处理耗时的操作 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIO ...
- C语言讲义——指针(pointer)
指针是C语言最重要的特性之一, 也是最容易被误解的特性之一. 现代计算机把内存分割为字节(Byte), 每个字节都有唯一的地址(Address), 如果内存中有n个字节,可以把地址看做0~n-1的数. ...
- Java基础教程——接口
接口 接口只是一种约定.--Anders 接口定义了一种规范--多个类共同的公共行为规范. 对于接口的实现者--规定了必须向外提供哪些服务 对于接口的调用者--规定了可以调用哪些服务,如何调用这些服务 ...
- 为什么学完C语言觉得好像没学一般?
不少同学从Hello world学到文件操作之后,回顾感觉会又不会? 学会了又感觉没学会?这种不踏实.模糊虚无的感觉? 原因在于编程不同于理论学科,你听懂和理解了理论就可以运用. 比如历史地理,看 ...
- AppWeb认证绕过漏洞(CVE-2018-8715)
AppWeb认证绕过漏洞(CVE-2018-8715) 一.漏洞描述 Appweb简介 Appweb是一个嵌入式HTTP Web服务器,主要的设计思路是安全.这是直接集成到客户的应用和设备,便于开发和 ...
- 流量控制--6.Classful Queuing Disciplines (qdiscs)
Classful Queuing Disciplines 可以使用classful qdisc的代理来解锁Linux流量控制的灵活性和控制力.classful qdisc可以附加过滤器,允许将报文重定 ...