欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-28 21:36:22
Martian 是一个不需要容器的Java开发框架。不需要Tomcat,不需要Jboss,不需要Netty,甚至不需要Servlet,完全基于JRE类库开发的http服务,将瘦身进行到底。-摘自官方介绍新建工程新建maven工程,添加依赖: com.github.yuyenews...

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,里面可以重写部分需要的方法,制定自己的配置,不重写则保持默认。

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

启动类:

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

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

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

可以得到我们的结果:

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

数据库服务实现

配置数据连接

配置需要在之前的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;
    }
} 

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

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

整个流程大致分为:

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

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

更多可能

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

参考

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

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

本文地址:https://blog.csdn.net/iceyung/article/details/108042007