Solon 1.7 重要发布,更现代感的应用开发框架

2022-05-02  本文已影响0人  草编椅

相对于 Spring Boot 和 Spring Cloud 的项目

关于 Solon

Solon 是一个更现代感的应用开发框架,轻量、开放生态型的。支持 Web、Data、Job、Remoting、Cloud 等任何开发场景。

目前有近130个生态插件,含盖了日常开发的各种需求。

本次主要更新内容

@Service
public class DemoService{
    @Db("db1")
    JdbcTemplate jdbcTemplate;
    
    @Db("db1")
    LambdaTemplate lambdaTemplate;
    
    public void test(){
        var dtoList = jdbcTemplate.queryForList("select * from test_user", TestUser.class);
        var dtoList2 = lambdaTemplate.lambdaQuery(TestUser.class).queryForList();
    }
}
#完整配置示例
demo.cache1:
  driverType: "redisson" #缓存驱动类型
  server: "localhost:6379"
  password: "1234"
  db: 0 #默认为 0,可不配置
  defSeconds: 30 #默认为 30秒,可不配置
//配置缓存服务
@Configuration
public class Config {
    //通过 CacheServiceSupplier ,可根据 driverType 自动构建缓存服务
    @Bean(name = "cache2s")
    public CacheService cache2(@Inject("${demo.cache2}") CacheServiceSupplier supplier){
        return supplier.get();
    }
}
@Service
public class DemoService{
    @Db("db1")
    DbContext db1;
    
    public void test(){
        var dtoList = db1.table("test_user").limit(10).selectList("*", TestUser.class);
    }
}
mybatis.db1:
    typeAliases:    
        - "demo4031.model"
    mappers:        
        - "demo4031.dso.mapper"
    configuration:
        cacheEnabled: false
        logImpl: "org.apache.ibatis.logging.nologging.NoLoggingImpl"
    globalConfig:
        metaObjectHandler: "demo4031.dso.MetaObjectHandlerImpl" #新增的支持
        dbConfig:
            logicDeleteField: "deleted"
@Configuration
public class DemoConfig {
    @Bean
    public I18nBundleFactory i18nBundleFactory(){
        //将国际化服务,切换为云端接口
        return new CloudI18nBundleFactory();
    }
}
solon.cloud.local:
  breaker:
    root: 100 #默认100 (Qps100 或 信号量为100;视插件而定)
    main: 150 
    
#此配置可以放到配置中心,例:
#solon.cloud.water:
#    server: "waterapi:9371"
#    config.load: "breaker.yml"
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args, app -> {
            //调试模式下,增加请求包围拦截器的打印
            if (Solon.cfg().isDebugMode()) {
                app.after(ctx -> {
                    Action action = ctx.action();
                    if (action != null && action.method().getArounds().size() > 0) {
                        StringBuilder buf = new StringBuilder();
                        
                        buf.append("path: ").append(ctx.path()).append(": ");
                        for (InterceptorEntity ie : action.method().getArounds()) {
                            buf.append(ie.getReal().getClass().getName()).append(",");
                        }
                        buf.setLength(buf.length() - 1);
                        
                        System.out.println(buf);
                    }
                });
            }
        });
    }
}
HelloService rpc = Nami.builder().url("tcp://localhost:28080/demoe/rpc")
                                   .encoder(SnackTypeEncoder.instance)
                                   .timeout(60 * 60) //单位:秒
                                   .create(HelloService.class);
#设定会话超时秒数(单位:秒)
server.session.timeout: 3600 
#设定会话id的cookieName
server.session.cookieName: "E52Ou8sV"
public class DemoApp {
    public static void main(String[] args) {
        Solon.start(DemoApp.class, args);

        //打印所有路由记录里的控制器名
        Collection<Routing<Handler>> routings = Solon.global().router().getAll(Endpoint.main);
        for(Routing<Handler> routing : routings){
            if(routing.target() instanceof Action){
                Action action = (Action) routing.target();
                System.out.println(action.controller().name());
            }
        }
    }
}

进一步了解 Solon

项目地址

上一篇 下一篇

猜你喜欢

热点阅读