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,里面可以重写部分需要的方法,制定自己的配置,不重写则保持默认。
启动类:
public class MarsApplication {
public static void main(String[] args) {
//运行并写入配置文件
StartMars.start(MarsApplication.class, new DemoConfig());
}
}
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
可以得到我们的结果:
数据库服务实现
配置数据连接
配置需要在之前的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;
}
}
书写完成后,当我们输入请求可以返回相应的结果信息:
整个流程大致分为:
目前该项目的实现还在进行中,更新的频率也是比较快的,抱着最简洁的目标去开发一套web框架,是一个比较难开始的过程,目前作者也在不断的努力中,尤其是作为一个爱好开源的开发者,可以在此基础上提出或开发更加优秀的功能或模块,也是提升自己,贡献社区的一种较好的方式。
更多可能
mars目前也提供了分布式的组件,通过mars-cloud完成简单的服务注册与发现的功能。
参考
mars示例:https://github.com/yuyenews/Mars-Example
mars官网:http://mars-framework.com/
本文地址:https://blog.csdn.net/iceyung/article/details/108042007