Martian分析:轻量级微服务网络框架试用(Mars)

Martian 是一个不需要容器的Java开发框架。

不需要Tomcat,不需要Jboss,不需要Netty,甚至不需要Servlet,完全基于JRE类库开发的http服务,将瘦身进行到底。

-摘自官方介绍

新建工程

新建maven工程,添加依赖:

<dependencies>
    <!-- 这个包为框架的启动器 -->
    <dependency>
        <groupId>com.github.yuyenews</groupId>
        <artifactId>mars-starter</artifactId>
        <version>3.0.29</version>
    </dependency>

    <!-- 下面的jar包为日志框架,必须引入,否则控制台看不到任何信息,此处以jdk日志为例 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.12</version>
    </dependency>

    <!-- 具体要用的日志框架 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

启动

配置类:

public class DemoConfig extends MarsConfig {
}

目前配置可以通过配置类完成配置,具体的配置类为继承MarsConfig,里面可以重写部分需要的方法,制定自己的配置,不重写则保持默认。

img

启动类:

public class MarsApplication {
    public static void main(String[] args) {
        //运行并写入配置文件
        StartMars.start(MarsApplication.class, new DemoConfig());
    }
}

img

API接口

声明一个接口,然后声明需要对外暴露的接口方法:

@MarsApi(refBean="demoService")
public interface DemoApi {
    String hello();
}

服务实现

可通过继承实现的api接口,完成该接口的实现,官方文档介绍可不实现api接口,但为了规范和不出错,建议实现接口:

@MarsBean("demoService")
public class DemoService implements DemoApi {
    @Override
    public String hello() {
        return "OK.";
    }
}

浏览器中输入:http://localhost:8080/hello

可以得到我们的结果:

img

数据库服务实现

配置数据连接

配置需要在之前的DemoConfig类中配置,我们添加jdbc的配置:

public class DemoConfig extends MarsConfig {
    @Override
    public List<Properties> jdbcProperties() {
        List<Properties> list = new ArrayList<>();
        Properties properties = new Properties();
        properties.put("name","dataSource");
        properties.put("url","jdbc:mysql://127.0.0.1:3306/mars?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
        properties.put("username","root");
        properties.put("password","12345678");
        properties.put("driverClassName","com.mysql.jdbc.Driver");
        list.add(properties);
        // 如果要多个数据源,add多个到list即可
        return list;
    }
}

Dao层编写

为什么用抽象类的形式创建? 因为这样单表操作可以用抽象方法,多表操作可以自己写sql。

实现自己的根据id来获取用户信息的数据库查询接口:

@MarsDao(value = "demoDao")
public abstract class DemoDao {
    @MarsGet(tableName = "user_info",primaryKey = "id")
    public abstract UserInfo selectById(int id);
}

DTO实体类:

public class UserInfo {
    @JSONField(name = "name")
    private String name;
    @JSONField(name = "age")
    private String age;
    @JSONField(name = "id")
    private int id;
    //省略set,get
}

API和Service的编写

api实现方法:

@MarsLog//可以打印具体的请求信息
String getUserName(UserVO userVO);

service实现:

@Override
public String getUserName(UserVO userVO) {
    UserInfo userInfo = demoDao.selectById(userVO.getId());
    return userInfo == null ? "" : userInfo.getName();
}

其中VO为包裹的一个id的字段:

public class UserVO {
    private int id;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}

书写完成后,当我们输入请求可以返回相应的结果信息:

img

整个流程大致分为:

img

目前该项目的实现还在进行中,更新的频率也是比较快的,抱着最简洁的目标去开发一套web框架,是一个比较难开始的过程,目前作者也在不断的努力中,尤其是作为一个爱好开源的开发者,可以在此基础上提出或开发更加优秀的功能或模块,也是提升自己,贡献社区的一种较好的方式。

更多可能

mars目前也提供了分布式的组件,通过mars-cloud完成简单的服务注册与发现的功能。

参考

mars示例:https://github.com/yuyenews/Mars-Example

mars官网:http://mars-framework.com/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值