Skip to content

前言

为什么要使用Solon?答案很简单,简单、方便、快!

  • 备注:这里不做详细对比,但是可以简单看下内存占用

  • springboot3(3.x):

  • Solon(2.x):

开始改造(不展示具体实现)

一、依赖变更

  1. 移除springboot核心以及spring相关依赖,引入solon-api(包含solon-lib,solon.boot.smarthttp等一些web开发库)
  2. 替换插头(springboot的插件),比如 sagacity-sqltoy-spring-starter => sagacity-sqltoy-solon-plugin
  3. 可选变更项:Redis客户端spring-data-redis => redisx
  4. 可选变更项:连接池commons-pool2 => HikariCP

二、应用配置变更

  1. yml的springboot配置项改成Solon配置项,比如:
yaml
server:
  port: 9000
  servlet:
    context-path: /v2-api

=>

yaml
server:
  port: 9000
  contextPath: /v2-api
  1. 核心框架配置变更,比如:
yaml
spring:
  sqltoy:
    unify-fields-handler: net.cocotea.admin.interceptor.SqlToyUnifyFieldsInterceptor
    sqlResourcesDir: classpath:sqltoy

=>

yaml
sqltoy:
  sqlResourcesDir: classpath:sqltoy
  unify-fields-handler: net.cocotea.admin.handler.SqlToyUnifyFieldsHandler

三、数据源配置变更

Solon的数据源是多数据源模式,所以这里的改变有点多

springboot配置
yaml
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的配置
  1. 首先自己定义一个配置类DbConfig.class,然后注入所需数据源变量
java
@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;
    }
}
  1. yml配置下即可
yaml
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)变更

  1. json转换器变更 springboot:
java
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}

=> solon:

java
// 遇到的问题,返回对象得实现序列化接口Serializable,不然无法被转换
    @Bean
    public void jsonInit(@Inject FastjsonRenderFactory factory, @Inject FastjsonActionExecutor executor){}
  1. Solon上增加这个bean,satoken开启Redis缓存
java
    @Bean
    public SaTokenDao saTokenDaoInit(@Inject("${myapp.rd1}") SaTokenDaoOfRedisJson saTokenDao) {
        return saTokenDao;
    }

五、拦截器变更

主要是修改异常拦截,其它没什么变化

  • springboot3的注解异常拦截
java
@RestControllerAdvice
public class GlobalExceptionInterceptor {}
  • solon在过滤器里面做异常捕获
java
@Component
public class AppFilter implements Filter {
    @Override
    public void doFilter(Context ctx, FilterChain chain) throws Throwable {
		...try{}
    }
}

六、注解

  1. 在注解上使用区别不大,在Solon官方文档有详细的介绍,这里不一一举例
  2. 重要的事情,orm框架的注解,必须使用@Db,这是之前说过的多数据源原因
  3. 文件上传参数接收类,MultipartFile => Solon的UploadedFile,移除了自己网上抄来的FileUploadUtils.saveMultipartFile,改成使用uploadedFile.transferTo

结尾

  • 以上代码来自个人开源项目,如有参考需要可以在Gitee上可以找到:sra-admin和sra-admin-solon
  • 由于篇幅原因,以上只是改造过程的简单概括,具体的还是要在框架文档上反复浏览,有不懂的地方建议加入大佬们的群寻求帮助
  • 如有不正确的地方可以评论,我这边会参考改正