织梦做分类信息系统网站,2022客翻番的推广方法,广东建筑企业50强,外贸网络推广招聘solon项目介绍
官网 Java “生态型”应用开发框架#xff1a;更快、更小、更简单。 启动快 5 #xff5e; 10 倍#xff1b;并发高 2#xff5e; 3 倍#xff1b; 内存省 1/3 ~ 1/2#xff1b;打包缩到 1/2 ~ 1/10#xff1b;同时支持 java8, java11, java17, java21更快、更小、更简单。 启动快 5 10 倍并发高 2 3 倍 内存省 1/3 ~ 1/2打包缩到 1/2 ~ 1/10同时支持 java8, java11, java17, java21支持 graalvm native image。 本文介绍如何把SpringBoot项目改造成solon
在决定改造之前最好充分对比下自己的项目与solon的区别建议先看下这篇文章https://solon.noear.org/article/compare-springboot
具体改造步骤如下
备份代码
如果是采用git管理代码最好新开一个分支进行操作
替换根pom.xml parent部分如果没有则加上
parentgroupIdorg.noear/groupIdartifactIdsolon-parent/artifactIdversion2.6.5/versionrelativePath /
/parent新增如下依赖 dependencygroupIdorg.noear/groupIdartifactIdsolon-api/artifactId/dependencydependencygroupIdorg.noear/groupIdartifactIdsolon.web.cors/artifactId/dependencydependencygroupIdorg.noear/groupIdartifactIdsolon.logging.logback/artifactId/dependencydependencygroupIdorg.noear/groupIdartifactIdmybatis-solon-plugin/artifactId/dependency全局替换
使用IDE自带的全局替换功能进行替换
替换注解
Service 替换成 Component Value 替换成 Inject RequestMapping 替换成 Mapping GetMapping 替换成 Get Mapping PostMapping 替换成 Post Mapping PutMapping 替换成 Put Mapping DeleteMapping 替换成 Delete Mapping PathVariable 替换成 Path RestController 替换成 Controller PostConstruct 替换成 Init
替换import
import org.springframework.beans.factory.annotation.Autowired; 替换成 mport org.noear.solon.annotation.Inject;
//这里需要注意如果是Mapper要改成Dbimport org.springframework.stereotype.Service; 替换成 import org.noear.solon.annotation.Component;import org.springframework.context.annotation.Configuration; 替换成 import org.noear.solon.annotation.Configuration;import org.springframework.web.bind.annotation.RestController; 替换成 import org.noear.solon.annotation.Controller;import org.springframework.web.bind.annotation.RequestMapping; 替换成 import org.noear.solon.annotation.Mapping;import org.springframework.web.bind.annotation.PathVariable; 替换成 import org.noear.solon.annotation.Path;import org.springframework.web.bind.annotation.RequestBody; 替换成 空字符串(什么都不填)import javax.annotation.PostConstruct; 替换成 import org.noear.solon.annotation.Init;至此注解已经替换得差不多了接下来改造其它特性
更换启动类
删除或者注释SpringBoot启动类新增一个App.java
内容如下
import com.gitee.gen.config.ConnectionHandler;
import org.noear.solon.Solon;
import org.noear.solon.web.cors.CrossFilter;public class App {public static void main(String[] args) {Solon.start(App.class, args, app-{});}}跨域设置
注释SpringBoot的跨越配置
新增maven依赖
dependencygroupIdorg.noear/groupIdartifactIdsolon.web.cors/artifactId
/dependency启动类添加
public static void main(String[] args) {Solon.start(App.class, args, app-{// 跨域设置app.filter(-1, new CrossFilter().allowedOrigins(*)); //加-1 优先级更高});
}数据库配置mybatis
resources下新增文件app.yml
新增数据库配置
# 配置数据源
mybatis.db1:url: driverClassName: userName: password: # 配置数据源对应的 mybatis 信息要与 DataSource bean 的名字对上
mybatis.db1:mappers: #支持包名 或 类名大写开头 或 *或 xml.xml结尾//支持 ** 或 * 占位符- com.xxx.mapper.* #这个表达式同上效果- classpath:mybatis/**/*.xmlconfiguration: #扩展配置要与 Configuration 类的属性一一对应cacheEnabled: falsemapperVerifyEnabled: true #如果为 true则要求所有 mapper 有 Mapper 主解mapUnderscoreToCamelCase: true新增一个配置类
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;Configuration
public class Config {//此下的 db1 与 mybatis.db1 将对应在起来 //可以用 Db(db1) 注入mapper//typedtrue表示默认数据源。Db 可不带名字注入Bean(name db1, typed true)public DataSource db1(Inject(${demo.db1}) HikariDataSource ds) {return ds;}
}详细配置参考https://solon.noear.org/article/20
全局异常处理
去掉SpringBoot自带的异常处理
新增如下java类
import org.noear.solon.annotation.Component;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Handler;
import org.noear.solon.core.route.RouterInterceptor;
import org.noear.solon.core.route.RouterInterceptorChain;
import org.noear.solon.validation.ValidatorException;Component(index 0) //index 为顺序位不加则默认为0
public class AppRouterInterceptor implements RouterInterceptor {Overridepublic void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {try {chain.doIntercept(ctx, mainHandler);if (mainHandler null) {ctx.render(Action.err(资源不存在));}} catch (ValidatorException e) {ctx.render(Action.err(e.getMessage())); //e.getResult().getDescription()} catch (Throwable e) {ctx.render(Action.err(e.getMessage()));}}
}统一异常处理具体参考https://solon.noear.org/article/503
接口重定向
Controller
public class HomeController {// 浏览器访问http://localhost:8080 跳转到 http://localhost:8080/index.htmlGetMapping(/)public void index(Context context) {context.redirect(index.html);}}静态资源映射
SpringBoot中的静态资源映射方式如下
public void addResourceHandlers(ResourceHandlerRegistry registry) {// 效果将本地dist静态目录代理为网页根目录类似于nginx的网页代理String frontRoot /home/project/app/dist;registry.addResourceHandler(/index.html).addResourceLocations(frontLocation /index.html);registry.addResourceHandler(/favicon.ico).addResourceLocations(frontLocation /favicon.ico);registry.addResourceHandler(/static/**).addResourceLocations(frontLocation /static/);
}solon方式如下
maven添加依赖
dependencygroupIdorg.noear/groupIdartifactIdsolon.web.staticfiles/artifactId
/dependency启动类添加配置
public static void main(String[] args) {Solon.start(App.class, args, app-{// 跨域设置app.filter(-1, new CrossFilter().allowedOrigins(*)); //加-1 优先级更高// 静态资源代理String frontRoot /home/project/app/dist;StaticMappings.add(/, new FileStaticRepository(frontRoot));});
}至此整个项目已经改造得差不多了如果有其它特性需要改造可以参考官方例子进行更改参见solon生态