轻量级框架Spark快速入门

Hello Spark! | Spark,从入门到精通 欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你,欢迎大家持续关注:) / 什么是 Spark? / Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架,是专为大规模数据处理而设计的快速通用的大数据处理引擎及轻量级... 阅读详情

0?wx_fmt=jpeg

尝试过Python/Ruby/Nodejs/Golang语言开发的人往往难以适应Java Web框架,相对于这些语言提供的web框架来说,Java的Web框架显的过于笨重了。

那有没有一种看起来很轻量级的Java Web框架呢?当然有,本篇介绍的Spark框架就是其中之一。此Spark不是大数据用到的Spark,名字相同,纯属巧合,两者完全没有关联性。

作者坦言Spark框架的灵感源于Ruby的Sinatra微框架,正好赶上了Java8迟来的闭包,于是就诞生了看起来非常轻量级的Spark。另外Google牵头的kotlin又正被炒的火热,Spark与时俱进,很快就出了一个kotlin版本的Spark框架。

首先引入它的依赖

<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>2.7.1</version>
</dependency>

我们看看它的Hello World

import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}

运行一下上面的代码,你就可以在浏览器里访问http://localhost:4567/hello这个了

我们来比较一下Sinatra框架的Hello World

require 'sinatra'

get '/' do
  'Hello world!'
end

Wow,虽然Spark要敲打的字母还是要多很多,但是毫无疑问,它们已经很接近了。值得一提的是,Spark框架启动速度非常快速,肉眼几乎没有延迟,而相比之下,SpringBoot的启动效率就之于马车和火箭的关系了。

也许你会当心Spark框架并不主流,估计不是太稳定吧。关于这一点我必须说明的是Spark本身只是底层Jetty内核容器的一个包装,Jetty才是Spark的灵魂,Spark不过是一间非常漂亮的外衣,让我们用起来赏心悦目。

下面是Spark最常用的CRUD调用形式

get("/", (request, response) -> {
    // Get Something
});

post("/", (request, response) -> {
    // Create something
});

put("/", (request, response) -> {
    // Update something
});

delete("/", (request, response) -> {
    // Delete something
});

复杂一点可以使用路由组合,将页面API模块化

path("/api", () -> {
    path("/email", () -> {
        post("/add",       EmailApi.addEmail);
        put("/change",     EmailApi.changeEmail);
        delete("/remove",  EmailApi.deleteEmail);
    });
    path("/username", () -> {
        post("/add",       UserApi.addUsername);
        put("/change",     UserApi.changeUsername);
        delete("/remove",  UserApi.deleteUsername);
    });
});

同时还支持过滤器,我们可以在过滤器里加鉴权逻辑/访问日志/服务耗时跟踪等

对于request和response对象,Spark提供了丰富的API

还有一些更加高级的API,比如精细控制线程池大小

int maxThreads = 8;
int minThreads = 2;
int timeOutMillis = 30000;
threadPool(maxThreads, minThreads, timeOutMillis);

HTTPS支持

secure(keystoreFilePath, keystorePassword, truststoreFilePath, truststorePassword);

自定义错误页面

// Using Route
notFound((req, res) -> {
    res.type("application/json");
    return "{\"message\":\"Custom 404\"}";
});
// Using Route
internalServerError((req, res) -> {
    res.type("application/json");
    return "{\"message\":\"Custom 500 handling\"}";
});

自定义异常处理

get("/throwexception", (request, response) -> {
    throw new YourCustomException();
});

exception(YourCustomException.class, (exception, request, response) -> {
    // Handle the exception here
});

实现API服务时,我们需要一个JSON转换器,将回应的对象转换成JSON形式

import com.google.gson.Gson;

public class JsonTransformer implements ResponseTransformer {

    private Gson gson = new Gson();

    @Override
    public String render(Object model) {
        return gson.toJson(model);
    }

}

get("/hello", "application/json", (request, response) -> {
    return new MyMessage("Hello World");
}, new JsonTransformer());

或者使用一个更加简洁的转换方法

Gson gson = new Gson();
get("/hello", (request, response) -> new MyMessage("Hello World"), gson::toJson);

制作网页时,我们需要一个模版渲染引擎,将编写的视图文件和数据融合在一起

get("template-example", (req, res) -> {
    Map<String, Object> model = new HashMap<>();
    return render(model, "path-to-template");
});

// declare this in a util-class
public static String render(Map<String, Object> model, String templatePath) {
    return new VelocityTemplateEngine().render(new ModelAndView(model, templatePath));
}

有很多种模版渲染引擎可供选择,Spark已经提供了扩展的library将这些引擎集成进来。只需要倒入相关maven依赖即可。比如集成FreeMarker

<dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-template-freemarker</artifactId>
    <version>2.7.1</version>
</dependency>

WebSocket支持,可以用来开发你的交互式微信小程序了

import org.eclipse.jetty.websocket.api.*;
import org.eclipse.jetty.websocket.api.annotations.*;
import java.io.*;
import java.util.*;
import java.util.concurrent.*;

@WebSocket
public class EchoWebSocket {

    // Store sessions if you want to, for example, broadcast a message to all users
    private static final Queue<Session> sessions = new ConcurrentLinkedQueue<>();

    @OnWebSocketConnect
    public void connected(Session session) {
        sessions.add(session);
    }

    @OnWebSocketClose
    public void closed(Session session, int statusCode, String reason) {
        sessions.remove(session);
    }

    @OnWebSocketMessage
    public void message(Session session, String message) throws IOException {
        System.out.println("Got: " + message);   // Print message
        session.getRemote().sendString(message); // and send it back
    }

}

webSocket("/echo", EchoWebSocket.class);
init(); // Needed if you don't define any HTTP routes after your WebSocket routesCopy

最后看看我们这个项目在github上的受欢迎程度如何,受惊的7000个Star

0?wx_fmt=jpeg

0?wx_fmt=jpeg

大数据计算框架Hadoop, Spark和MPI 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什么样的场景。 一直想对这些大数据计算框架总结一下,只可惜太懒,一直拖着。今天就借这个机会好好学习一下。一张表 名称 发起者 语言 简介 特点 适用场景 Hadoop Yahoo工程师,Apache基金会 Java MapReduce分布式计算框架+HDF 阅读详情

相关推荐

metorikku:基于Apache Spark的简化,轻量级ETL框架

Metorikku是一个库,可简化基于ETL的编写和执行。 它基于简单的YAML配置文件,并且可以在任何Spark群集上运行。 该平台还包括一种编写单元测试和端到端测试的简单方法。 入门 要运行Metorikku,您必须首先定义2个文件。 公制文件 度量标准文件定义了ETL的步骤和查询以及在何处输出什么。 例如,简单的配置YAML(也支持JSON)应如下所示: steps : - dataFrameName : df1 sql : SELECT * FROM input_1 WHERE id > 100 - dataFrameName : df2 sql : SELECT * FROM df1 WHERE id < 1000 output : - dataFrameName : df2 outputType : Parquet outputOptions : saveMode : Overwrite path : df2.parquet 您可以在检出完整的示例文件中所有可能的值。 确保还签出

Spark: 基于Node.js的Web框架实战指南

Spark 是由 Per Wendel 开发的一个轻量级且高性能的 Node.js Web 应用框架,它设计简洁,易于上手,旨在加速构建高效且可扩展的网络应用。通过提供路由处理、中间件支持以及强大的HTTP服务端功能,Spark 让开发者能够以最小的阻力开发出功能丰富的Web应用程序。 ## 项目快速启动 要迅速启动并运行 Spark 框架,首先确保你的环境中已安装 Node.js 和 npm...

gitblog_00121的博客 576

node-sparkpost:Node.js的SparkPost客户端库

一个SparkPost帐户,并访问我们的以获取更多内容。 Node.js客户端库 您喜欢的的官方Node.js绑定! 先决条件 使用此库之前,您必须具有: 闪亮的新SparkPost帐户, 或 有效的SparkPost API密钥。 请访问我们的以获取有关如何 安装 npm install sparkpost 注意:不再支持Node.js版本0.10和0.12。 初始化 新的SparkPost(apiKey [,options]) -初始化 apiKey 必需:是(除非密钥存储在SPARKPOST_API_KEY环境变量中) 类型: String 传入的apiKey将优先于环境变量 options.origin或options.endpoint 必填:否 类型: String 默认值: https://api.sparkpost.com:443 : https://api.

Spark项目通用开发框架

每个公司内部都有一套自己的架子,一般新人来了就直接在已有的架子上开发业务。以下仅仅作为记录下自己使用的架子,不作为任何推荐,也不认为这样的组织结构就是好用的。

硅谷工具人 951

DeepSeek安装教程

两分钟讲述deepseek正确安装教程

weixin_45906703的博客 1666

一、永磁同步电机矢量控制——电机数学模型

本文介绍了永磁同步电机(PMSM)的数学模型构建方法,重点分析了不同坐标系(三相静止、α-β静止、d-q旋转)下的电压方程、磁链表达式及电磁转矩计算方法。通过Clark和Park变换简化非线性耦合系统,推导了表贴式(SPMSM)与内置式(IPMSM)电机的电压方程差异,并给出α-β和d-q坐标系下的转矩公式,强调磁链与电流的正交性对转矩的影响。全文基于理想假设,为后续电机控制算法(如FOC、DTC)提供理论基础。

惊鸿一现 1932

骚年,你可听说过 spark-java?

本篇文章是一篇软文,我想向大家推荐一下 spark-java 这个框架,这里的 spark 并非是大数据相关的 apache-spark,而是一个创建Web应用程序的微框架。以下我会简单的给大家介绍一下。 1. Spark简介 Spark —— 用于Kotlin和Java 8以最低消耗创建Web应用程序的微框架。 快速开始: Java: import static spark.Spark.*; ...

weixin_33810302的博客 217

自制JS某课脚本

根据实际需求自制网页讯网刷题脚本,绕过人脸,弹窗,答题,实现自动化运行

2301_81243054的博客 3461

spark框架

2401_87076440的博客 355

Python爬虫实战:手把手教你如何抓取农作物品种名录,构建标准化种业索引数据库!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 291

什么是DHCP Snooping?如何配置DHCP Snooping?

功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。

网络技术联盟站 1267

Spark Java框架终极指南:5分钟快速构建RESTful API的完整教程

想要快速构建Java Web应用却厌倦了繁琐的配置?Spark Java正是你需要的解决方案!作为一个极简的Java Web框架,Spark Java让RESTful API开发变得前所未有的简单高效。无论你是Java初学者还是经验丰富的开发者,都能在5分钟内创建出功能完整的Web服务。 ## 为什么选择Spark Java框架?🚀 Spark Java以其"少即是多"的设计哲学脱颖而出,专

gitblog_00064的博客 654

使用 MATLAB/Simulink + Simscape Electrical 来构建一个CCHP微电网与新能源协同运行的模型

随着能源需求的增长和对环境保护要求的提高,冷热电联供(Combined Cooling, Heating and Power, CCHP)系统作为一种高效的分布式能源解决方案,越来越受到关注。CCHP系统通过利用一次能源同时产生电力、制冷和供热,实现了能源的梯级利用,提高了能源使用效率。结合太阳能、风能等可再生能源,可以进一步增强系统的灵活性和环保性。本文将详细介绍如何使用来构建一个CCHP微电网与新能源协同运行的模型,并通过仿真分析其性能表现。本文介绍了如何使用构建一个。

xiaoheshang_123的博客 142

h5怎么用mysql_【mysql】如何快速上手java web

帮朋友写毕设,用java web完成一些curd的功能,我有php原生基础和一点框架基础,以前学过点java ee什么的。网上有 什么比较好的快速上手的教程么?java黑表示目前eclipse都不怎么会用回答好吧我来给甲鱼捧个场。。我以前是做Java Web的,路线如下,给个参考:JSP -> Servlet -> Java SSH Framework其中SSH我只学了Hibernat...

weixin_30905655的博客 231

【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序

这是我们学习的第四款智能体框架了。前面我们学习了 AutoGPT、MetaGPT、LangGraph 等智能体应用开发框架,各有优缺点。今天我们开始学习AgentScope这一款多智能体开发框架。卷起来吧,多看看,多用用,没坏处。

同学小张的博客 5428

015:机载三维激光扫描技术相关知识

机载三维激光扫描系统(LiDAR)是集激光、GPS、INS等尖端技术于一体的三维航空遥感技术,能高效准确获取地表三维信息。该系统由GPS、INS、激光扫描测距系统、成像装置和工作平台组成,各部件协同工作以获取精确的空间定位、运动状态、地表三维坐标及真实色彩信息。通过制定飞行计划、安置GPS基站、激光扫描测量、惯性测量及获取高清数码影像等步骤,机载LiDAR技术能实时获取大范围高精度三维数据。该技术具有扫描速度快、精度高、全数字特征等优势,广泛应用于测绘、工程、环境监测和城市建设等领域,如城市三维模型重建、灾

qq_31762031的博客 1727

Spark Java终极指南:5分钟构建高性能RESTful API的完整教程

Spark Java是一款专为Java开发者设计的轻量级Web框架,以其简洁的API和极简的配置著称,让你能够快速构建高性能的RESTful API服务。作为Java 8+的微框架,Spark Java通过零配置启动和直观的路由定义,大幅提升了Web开发效率,是构建现代Web应用的理想选择。 ## 📋 项目亮点速览 **✨ 极简设计哲学** - **零配置启动**:无需XML配置文件,一行代

gitblog_00738的博客 383

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【大数据----Spark】Spark入门教程[1]

本教程源于2016年3月出版书籍《Spark原理、机制及应用》 ,如有兴趣,请支持正版书籍。 随着互联网为代表的信息技术深度发展,其背后由于历史积累产生了TB、PB甚至EB级数据量,由于传统机器的软硬件不足以支持如此庞大的数据量的存储、管理及分析能力,因而专门应对大数据的分布式处理技术应运而生。如今业界大数据处理的主流平台非Hadoop和Spark莫属,本书主要介绍大数据平台的后起之秀Spark...

Sunny 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spark Java:Java轻量级Web框架新范式,20行代码构建RESTful服务

你还在为Spring Boot的繁杂配置而苦恼吗?还在为搭建简单API服务编写大量样板代码吗?本文将带你探索Spark Java这一革命性的轻量级Web框架,用不到20行代码即可构建功能完善的RESTful服务,让你重新定义Java Web开发的效率边界。 读完本文你将获得: - 从零开始搭建Spark Java应用的完整流程 - 掌握RESTful API设计与实现的核心技巧 - 学会请求处理...

gitblog_00190的博客 860

微型的Java Web框架 Spark

<br />Spark是一个可以让你以最小的代价快速创建Web应用的轻量级Java web框架,它的灵感来自于Sinatra。<br /> <br /><br />开始使用Spark<br />Routes<br />Request<br />Response<br />终止一个请求<br />Filters<br />请求重定向<br />指定端口开始使用Spark下载spark和spark依赖的类库(或者让maven来为你做这些事情),把它们放在工程classpath下,开始动手: import st

blair 3150

Spark Java框架入门指南:轻量级Web开发新选择

Spark Java框架入门指南:轻量级Web开发新选择 【免费下载链接】spark A simple expressive web framework for java. Spark has a kotlin DSL https://github.com/perwendel/spark-kotlin ...

gitblog_00618的博客 403

Spark Java框架:5分钟掌握轻量级RESTful API开发秘诀 [特殊字符]

还在为Java Web开发的繁琐配置而烦恼吗?Spark Java框架以其极简设计和零配置特性,正在成为Java开发者构建RESTful API的首选工具。这款轻量级Web框架让Java Web开发变得前所未有的简单高效,特别适合快速原型开发和小型生产项目。 ## 为什么你需要了解Spark Java?🤔 在当今快速迭代的开发环境中,传统的Java Web框架往往伴随着复杂的XML配置、冗长

gitblog_01021的博客 796

5分钟快速上手:Spark Java框架构建RESTful API的完整指南

Spark Java是一款专为Java开发者设计的极简Web框架,让您能够以惊人的速度构建RESTful API服务。无需繁琐配置,只需几行代码即可启动完整的Web服务器,是提升开发效率的终极选择。无论您是新手还是有经验的开发者,Spark Java都能让Web开发变得前所未有的简单和高效。 ## 🚀 为什么选择Spark Java框架? Spark Java以其"简洁至上"的设计理念在Ja

gitblog_00350的博客 344

Spark Java框架终极指南:快速构建高效Web应用与全文搜索引擎

Spark是一款面向Java开发者的轻量级Web框架,以简洁的API设计和高效的开发体验著称。本文将为你展示如何利用Spark快速搭建Web应用,从基础安装到高级功能实现,让你轻松掌握这一强大工具的核心用法。 [![Spark Java框架logo](https://raw.gitcode.com/gh_mirrors/spar/spark/raw/1973e402f5d4c1442ad34a1

gitblog_00067的博客 1215

SETL:基于 Apache Spark 的轻量级 ETL 框架

SETL:基于 Apache Spark 的轻量级 ETL 框架 SETL(Simple ETL)是一个基于 Apache Spark 的 Scala 语言的 ETL(提取、转换、加载)框架,旨在帮助数据科学家和数据工程师更高效地构建、模块化和加速他们的 Spark ETL 项目。 1. 项目基础介绍与主要编程语言 SETL 是一个开源项目,托管在 GitHub 上。它使用 Scala 作为主要的...

gitblog_01091的博客 715
上一篇: Lettuce快速入门
下一篇: 天下无难试之Redis面试刁难大全
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值