🔥 超神器啊!0.4Mb 就为 Java 中间件的控制台开发提供

比如你开发了个中间件(比如叫“annie”),想安排一个管理界面(比如叫:annie-admin)。后端接口想用什么开发?

<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon-boot-jdkhttp</artifactId>
    </dependency>
</dependencies>

只要 0.4Mb,有 Ioc/Aop 容器;有 Mvc 支持;有 Config 管理支持;还有无限的扩展支持。

一、自由的启动

1、如果你想做为“独立应用”,我们这么启动:

public class AnnieApp{
    public static void main(String[] args){
        Solon.start(AnnieApp.class, args);
    }
}

2、如果你想“内嵌”到 SpringBoot3 的项目里。就这么启动:

@Configuration
public class AnnieConfig {
    @PostConstruct
    public void start() {
        //启动 solon
        Solon.start(AnnieConfig.class, new String[]{"--cfg=annie.properties"}); //可以用特定的配置文件,避免与主应用冲突
    }

    @PreDestroy
    public void stop() {
        if (Solon.app() != null) {
            //停止 solon(根据配置,可支持两段式安全停止)
            Solon.stopBlock(false, Solon.cfg().stopDelay());
        }
    }

    @Bean
    public FilterRegistrationBean folkmqAdmin(){
        //通过 Servlet Filter 实现 http 能力对接
        FilterRegistrationBean<SolonServletFilter> filter = new FilterRegistrationBean<>();
        filter.setName("AnnieFilter");
        filter.addUrlPatterns("/annie-admin/*");
        filter.setFilter(new SolonServletFilter());
        return filter;
    }
}

3、如果你想“内嵌”到 Vert.X 的项目里。这么启动:

public class AnnieConfig extends AbstractVerticle {
    private final Router router;
    private final VxWebHandler handler;

    public AnnieConfig(Router router) {
        this.router = router;
        this.handler = new VxWebHandler();
    }

    @Override
    public void start() {
        router.routeWithRegex("/annie-admin/*").handler(req -> {
            handler.handle(req.request());
        });

        Solon.start(AnnieConfig.class, new String[]{"--cfg=annie.properties"});
    }

    @Override
    public void stop() {
        if (Solon.app() != null) {
            Solon.stopBlock(false, Solon.cfg().stopDelay());
        }
    }
}

4、如果你想“内嵌”到 jFinal 的项目里。这么启动:

public class AnnieConfig extends Handler implements IPlugin {
    public boolean start() {
        Solon.start(AnnieConfig.class, new String[]{"--cfg=annie.properties"});
        return true;
    }

    public boolean stop() {
        if (Solon.app() != null) {
            Solon.stopBlock(false, Solon.cfg().stopDelay());
        }
        return true;
    }

    @Override
    public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
        if (target.startsWith("/annie-admin/")) {
            Context ctx = new SolonServletContext(request, response);

            try {
                //Solon处理(可能是空处理)
                Solon.app().tryHandle(ctx);

                if (isHandled != null && isHandled.length > 0) {
                    isHandled[0] = true;
                }
            } catch (Throwable e) {
                ctx.errors = e;

                throw e;
            } finally {
                ContextUtil.currentRemove();
            }
        } else {
            if (next != null) {
                next.handle(target, request, response, isHandled);
            }
        }
    }
}

二、可独立、可内嵌的通用开发

  • 添加配置 annie.properties
#项目配置
annie.title=Annie

#配置数据源
solon.dataSources.annie!.class=com.zaxxer.hikari.HikariDataSource
solon.dataSources.annie!.jdbcUrl=jdbc:mysql://localhost:3306/rock?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
solon.dataSources.annie!.driverClassName=com.mysql.cj.jdbc.Driver
solon.dataSources.annie!.username=demo
solon.dataSources.annie!.password=123456

再引入轻量的 sql 工具(20kb),轻量的 http 工具(40kb)

  • 开发接口
@Controller
public class LoginController {
    @SqlUtils
    SqlUtils sqlUtils;
    
    @Mapping("hello")
    public String hello() {
        return "Hello world!";
    }

    @Mapping("sql")
    public UserDo sql(String username, String passowd) {
        return sqlUtils.sql("SELECT * FROM username=? AND passowd?", username, passowd)
             .queryRow()
             .toBean(UserDo.class);
    }
    
    @Mapping("http")
    public UserDto http(String username, String passowd) {
        return HttpUtils.http("http://demo.org/user/get")
            .data("username", username)
            .data("passowd", passowd)
            .post(UserDto.class);
    }
}

更多扩展与开发内容,可参考 Solon 官网。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/316187

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。