前言
为什么要使用Solon?答案很简单,简单、方便、快!
-
备注:这里不做详细对比,但是可以简单看下内存占用
-
springboot3(3.x):
-
Solon(2.x):
开始改造(不展示具体实现)
一、依赖变更
- 移除springboot核心以及spring相关依赖,引入solon-api(包含solon-lib,solon.boot.smarthttp等一些web开发库)
- 替换插头(springboot的插件),比如 sagacity-sqltoy-spring-starter => sagacity-sqltoy-solon-plugin
- 可选变更项:Redis客户端spring-data-redis => redisx
- 可选变更项:连接池commons-pool2 => HikariCP
二、应用配置变更
- yml的springboot配置项改成Solon配置项,比如:
server:
port: 9000
servlet:
context-path: /v2-api
=>
server:
port: 9000
contextPath: /v2-api
- 核心框架配置变更,比如:
spring:
sqltoy:
unify-fields-handler: net.cocotea.admin.interceptor.SqlToyUnifyFieldsInterceptor
sqlResourcesDir: classpath:sqltoy
=>
sqltoy:
sqlResourcesDir: classpath:sqltoy
unify-fields-handler: net.cocotea.admin.handler.SqlToyUnifyFieldsHandler
三、数据源配置变更
Solon的数据源是多数据源模式,所以这里的改变有点多
springboot配置
spring:
datasource:
name: dataSource
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/DB_SRA_V2?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai&tinyInt1isBit=false
username: root
password: root
data:
redis:
host: 127.0.0.1
port: 6379
=>
Solon的配置
- 首先自己定义一个配置类DbConfig.class,然后注入所需数据源变量
@Configuration
public class DbConfig {
//typed=true,表示默认数据源。@Db 可不带名字注入
@Bean(name = "db1", typed = true)
public DataSource db1(@Inject("${myapp.db1}") HikariDataSource ds) {
return ds;
}
// /
// 上方是数据库配置
// 下方是redis配置
// /
@Bean
public RedisClient redisClient(@Inject("${myapp.rd1}") RedisClient client) {
return client;
}
}
- yml配置下即可
myapp:
# MySQL
db1:
schema: db_sra_v2
jdbcUrl: jdbc:mysql://localhost:3306/DB_SRA_V2?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai&tinyInt1isBit=false
driverClassName: com.mysql.cj.jdbc.Driver
username: root
password: root
# Redis
rd1:
server: localhost:6379
db: 1
password:
四、WebMvc配置(WebMvcConfig.class)变更
- json转换器变更 springboot:
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}
=>
solon:
// 遇到的问题,返回对象得实现序列化接口Serializable,不然无法被转换
@Bean
public void jsonInit(@Inject FastjsonRenderFactory factory, @Inject FastjsonActionExecutor executor){}
- Solon上增加这个bean,satoken开启Redis缓存
@Bean
public SaTokenDao saTokenDaoInit(@Inject("${myapp.rd1}") SaTokenDaoOfRedisJson saTokenDao) {
return saTokenDao;
}
五、拦截器变更
主要是修改异常拦截,其它没什么变化
- springboot3的注解异常拦截
@RestControllerAdvice
public class GlobalExceptionInterceptor {}
- solon在过滤器里面做异常捕获
@Component
public class AppFilter implements Filter {
@Override
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
...try{}
}
}
六、注解
- 在注解上使用区别不大,在Solon官方文档有详细的介绍,这里不一一举例
- 重要的事情,orm框架的注解,必须使用@Db,这是之前说过的多数据源原因
- 文件上传参数接收类,MultipartFile => Solon的UploadedFile,移除了自己网上抄来的FileUploadUtils.saveMultipartFile,改成使用uploadedFile.transferTo
结尾
- 以上代码来自个人开源项目,如有参考需要可以在Gitee上可以找到:sra-admin和sra-admin-solon
- 由于篇幅原因,以上只是改造过程的简单概括,具体的还是要在框架文档上反复浏览,有不懂的地方建议加入大佬们的群寻求帮助
- 如有不正确的地方可以评论,我这边会参考改正