当前位置: 移动技术网 > IT编程>开发语言>Java > Martian分析:轻量级微服务网络框架试用(Mars)

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

2020年08月17日  | 移动技术网IT编程  | 我要评论
Martian 是一个不需要容器的Java开发框架。不需要Tomcat,不需要Jboss,不需要Netty,甚至不需要Servlet,完全基于JRE类库开发的http服务,将瘦身进行到底。-摘自官方介绍新建工程新建maven工程,添加依赖:<dependencies> <!-- 这个包为框架的启动器 --> <dependency> <groupId>com.github.yuyenews</groupId>

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://www.lhsxpumps.com/_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/

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网