1.需求场景
依赖于Jetty容器封装一个Jersey微服务的启动类,在微服务入口中通过简单的调用即可实现微服务启动。主要需求如下:
- 可以指定服务启动端口
- 可以指定服务的应用域路径
- 可以指定要注册到Jersey容器的资源包
- 可以指定要注册到Jersey容器的资源类
2.设计思路
- 在通用封装类中维护一个Jetty的Server实例,代表真正的服务器
- 默认注册res、filter和exception等资源包
- 通过Jersey框架提供的ResourceConfig为服务器注册用户传入的资源
- 提供不同的构造器,支持用户生成服务器实例时不同需求
设计类图如下:
3.代码实现
public class CommonServer {
/**
* 默认注册到Jersey容器的资源包
*/
private String defaultPackageName = "org.bigdata.res," +
"org.bigdata.filter," +
"org.bigdata.exception";
private Server server;
class Application extends ResourceConfig {
/**
* @param packagesNames 要注册到Jersey容器的资源包,包之间以英文逗号隔开,
* 如org.bigdata.res,org.bigdata.res
* @param classnames 要注册到Jersey容器的资源类,类使用完整类名,类之间以英文逗号隔开,
* 如org.bigdata.res.AppRes,org.bigdata.res2.UserRes
*/
Application(String packagesNames, String classnames) {
//默认注册工程下的res包
packages(defaultPackageName);
//默认注册文件上传下载支持类
register(MultiPartFeature.class);
if (StringUtils.isNotBlank(packagesNames)) {
packages(packagesNames);
}
if (StringUtils.