写给 Rails 开发者的 Spring boot 教程

简介: 写给 Rails 开发者的 Spring boot 教程

最近想研究一下 Spring Cloud 方面的内容,为公司后期发展做一些技术调研,就上网找了一下是否有与 Rails 相关 Spring boot 之类的文章。文章没有找到,不过找到了一个 PPT,理论上应该有个视频,不过视频貌似已经过期了。

我根据这个 PPT 整理了一下,也算借花谢佛了。

RVM 的 Java 版

对于 Ruby 开发者来说,可能第一步做的就是下载 Ruby 版本控制工具,如 RVM,或 RBENV。由于 Java 总是向前兼容的,所以就省去了版本控制 的工具,这里我们直接下载安装 JDK 8,也是当前最流行的 Java 版本。

$   java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

顺便吐槽一下,这个 java 命令一点也不*nix...

RubyMine/Vim

Spring Tool Suite 或者 IntelliJ IDEA

Rake 的 Java 版

之前比较流行的是 maven,目前比较流行的应该是 gradle 吧,目测 Android Studio 用的就是 gradle。

当然,maven 和 gradle 做的比 Rake 要多一些,我感觉类似于 Rake + Bundle。

gem install rails

与 rails 命令行类似的工具是 springboot

$ brew tap pivotal/tap
$ brew install springboot

安装完以后你会发现,如果执行$ which spring,指向的是 rvm 目录下的 spring。这是因为 rails 会安装 spring 命令,这个 spring 会用来加速开发环境的启动。

那么我们只需要做以下两步,就可以避免他们的冲突:

  1. 把 springboot 的路径添加至 PATH $ echo "export PATH=/usr/local/Cellar/springboot/2.1.3.RELEASE/bin:$PATH" >> ~/.zshrc.local $ source ~/.zshrc.local
  2. 重命名 spring 命令为 springboot $ cd /usr/local/Cellar/springboot/2.1.3.RELEASE/bin $ mv spring springboot $ which springboot

貌似这个命令有点长,你可以使用 alias 缩短一下命令:

$ echo "alias sb='springboot'" >> ~/.aliases
$ source ~/.aliases

rails new blog

$ springboot init blog -d=web,data-jpa,h2,freemarker -g com.bcenv.demo -a blog
total 56
-rwxr-xr-x  1 wangqsh  staff   8.9K  3 25 11:10 mvnw
drwxr-xr-x  4 wangqsh  staff   128B  3 25 11:10 src
-rw-r--r--  1 wangqsh  staff   432B  3 25 11:10 HELP.md
-rw-r--r--  1 wangqsh  staff   5.7K  3 25 11:10 mvnw.cmd
-rw-r--r--  1 wangqsh  staff   1.6K  3 25 11:10 pom.xml

进入我们的项目下面:

$ cd blog
  • blog 是项目名称,也是项目工作的目录
  • -ddependency的缩写,这里指依赖 web 包,ORM 使用data-jpa, 数据库用h2( 内存数据库), freemarker 是模板引擎,类似于 erb.
  • -g 是组织前缀,一般的顺序正好是域名颠倒过来,比如com.ruby-china.demo
  • -a 项目 id, 一般可以用项目名称
  • Spring Boot CLI默认会使用 Maven, 如果想用 gradle 可以添加参数--build gradle
  • 使用springboot help init 可以了解跟多的命令

rails server

$ mvn spring-boot:run

访问 http://localhost:8080/

rails g scaffold Post title content:string

这个并没有,而且还是故意没有...

routes.rb

这个也并没有...

Spring Boot 中定义路由的方法:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PagesController {
  @RequestMapping("/")
  public String home() {
     return "home";
  }
}
  • 注解 @Controller会告诉 Spring 为这个类查找RequestMapppings的注解
  • @RequestMapping 会用一个路径,HTTP 动词,header, 参数等来和一个路径关联

path_for

并没有

resources :photos

@RequestMapping("/photos")
public class PhotosController {
    @RequestMapping(value = "/", method = RequestType.GET)
    public String listPhotos() { ... }
    @RequestMapping(value = "/new", method = RequestType.GET)
    public String newPhoto() { ... }
    @RequestMapping(value = "/", method = RequestType.POST)
    public String createPhoto() { ... }
    @RequestMapping(value = "/{photoId}", method = RequestType.GET)
    public String showPhoto(@PathVariable("photoId") Integer id, Model model) { ... }
    @RequestMapping(value = "/{photoId}/edit", method = RequestType.GET)
    public String editPhoto(@PathVariable("photoId") Integer id, Model model) { ... }
    @RequestMapping(value = "/{photoId}", method = RequestType.PUT)
    public String updatePhoto() { ... }
    @RequestMapping(value = "/", method = RequestType.DELETE)
    public String deletePhoto() { ... }
}

rails g model Post title content:text

  • 使用[Spring Data JPA](http://projects.spring.io/spring-data-jpa/)
  • 使用@Entity 注解来声明 Model
  • Spring 中 Model 指的是你传递给 view 的对象
@Entity(name = "categories")
public class Category {
  @ID
  @GeneratedValue
  private Long id;
  private String name;
  private Long groupId;
  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  @JoinColumn(name = "categoryId")
  @Where(clause = "enabled = 1")
  @OrderBy("name")
  private Set<Project> projects;
}

db/schema.rb

Spring Boot 可以自动创建 schema, 它会自动导入 schema.sql 和 data.sql. 也支持针对不同数据库的 schema, 命名规则是 schema-platform.sql, data-platform.sql, 例如 schema-postgresql.sql, data-postgresql.sql

路径是src/main/resources/schema.sql

rails test

$ mvn test    #单元测试(使用[Maven Surefire Plugin](https://maven.apache.org/surefire/maven-surefire-plugin/)
$ mvn verify #单元测试和集成测试[Maven Failsafe Plugin](https://maven.apache.org/surefire/maven-failsafe-plugin/)

Rest API

  • Spring Data Rest

其他的一些,感觉和 Rails 其实相差比较多了。我觉得倒不如直接去学习 Spring Boot 了。

相关文章
|
7月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1146 3
|
6月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1117 5
|
8月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
801 13
|
9月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
1669 3
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
238 0
|
11月前
|
人工智能 缓存 自然语言处理
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
819 1
Spring 框架:Java 开发者的春天
|
XML JavaScript Java
Spring Retry 教程
Spring Retry 是 Spring 提供的用于处理方法重试的库,通过 AOP 提供声明式重试机制,不侵入业务逻辑代码。主要步骤包括:添加依赖、启用重试机制、设置重试策略(如异常类型、重试次数、延迟策略等),并可定义重试失败后的回调方法。适用于因瞬时故障导致的操作失败场景。
570 1
Spring Retry 教程