分享经验:springboot3项目改造到Solon (v2.x)项目

前言

为什么要使用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配置项,比如:
server:
  port: 9000
  servlet:
    context-path: /v2-api

=>

server:
  port: 9000
  contextPath: /v2-api
  1. 核心框架配置变更,比如:
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的配置
  1. 首先自己定义一个配置类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;
    }
}
  1. 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)变更
  1. json转换器变更 springboot:
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {}

=>
solon:

// 遇到的问题,返回对象得实现序列化接口Serializable,不然无法被转换
    @Bean
    public void jsonInit(@Inject FastjsonRenderFactory factory, @Inject FastjsonActionExecutor executor){}
  1. 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{}
    }
}
六、注解
  1. 在注解上使用区别不大,在Solon官方文档有详细的介绍,这里不一一举例
  2. 重要的事情,orm框架的注解,必须使用@Db,这是之前说过的多数据源原因
  3. 文件上传参数接收类,MultipartFile => Solon的UploadedFile,移除了自己网上抄来的FileUploadUtils.saveMultipartFile,改成使用uploadedFile.transferTo

结尾

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值