写给 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 了。

相关文章
|
2天前
|
XML JavaScript Java
Spring Retry 教程
Spring Retry 是 Spring 提供的用于处理方法重试的库,通过 AOP 提供声明式重试机制,不侵入业务逻辑代码。主要步骤包括:添加依赖、启用重试机制、设置重试策略(如异常类型、重试次数、延迟策略等),并可定义重试失败后的回调方法。适用于因瞬时故障导致的操作失败场景。
Spring Retry 教程
|
30天前
|
Java 数据库连接 Spring
一文讲明 Spring 的使用 【全网超详细教程】
这篇文章是一份全面的Spring框架使用教程,涵盖了从基础的项目搭建、IOC和AOP概念的介绍,到Spring的依赖注入、动态代理、事务处理等高级主题,并通过代码示例和配置文件展示了如何在实际项目中应用Spring框架的各种功能。
一文讲明 Spring 的使用 【全网超详细教程】
|
2月前
|
NoSQL Java 数据库连接
《滚雪球学Spring Boot》教程导航帖(更新于2024.07.16)
📚 《滚雪球学Spring Boot》是由CSDN博主bug菌创作的全面Spring Boot教程。作者是全栈开发专家,在多个技术社区如CSDN、掘金、InfoQ、51CTO等担任博客专家,并拥有超过20万的全网粉丝。该教程分为入门篇和进阶篇,每篇包含详细的教学步骤,涵盖Spring Boot的基础和高级主题。
48 1
《滚雪球学Spring Boot》教程导航帖(更新于2024.07.16)
|
22天前
|
Java API 开发者
【开发者福音】Spring Boot 异常处理:优雅应对错误,提升应用健壮性,让调试不再是噩梦!
【8月更文挑战第29天】本文通过对比传统错误处理方式与Spring Boot推荐的最佳实践,展示了如何在Spring Boot应用中实现统一且优雅的异常处理。传统方法需在每个可能出错的地方显式处理异常,导致代码冗余且不一致。而Spring Boot的全局异常处理机制则能集中处理所有异常,简化代码并确保错误响应格式统一,提高应用程序的健壮性和可维护性。文中提供了具体的示例代码以帮助读者更好地理解和应用这一机制。
58 0
|
22天前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
54 0
|
22天前
|
监控 安全 Java
【开发者必备】Spring Boot中自定义注解与处理器的神奇魔力:一键解锁代码新高度!
【8月更文挑战第29天】本文介绍如何在Spring Boot中利用自定义注解与处理器增强应用功能。通过定义如`@CustomProcessor`注解并结合`BeanPostProcessor`实现特定逻辑处理,如业务逻辑封装、配置管理及元数据分析等,从而提升代码整洁度与可维护性。文章详细展示了从注解定义、处理器编写到实际应用的具体步骤,并提供了实战案例,帮助开发者更好地理解和运用这一强大特性,以实现代码的高效组织与优化。
33 0
|
22天前
|
安全 Java 开发者
开发者必看!@Resource与private final的较量,Spring Boot注入技巧大揭秘,你不可不知的细节!
【8月更文挑战第29天】Spring Boot作为热门Java框架,其依赖注入机制备受关注。本文通过对比@Resource(JSR-250规范)和@Autowired(Spring特有),并结合private final声明的字段注入,详细探讨了两者的区别与应用场景。通过示例代码展示了@Resource按名称注入及@Autowired按类型注入的特点,并分析了它们在注入时机、依赖性、线程安全性和单一职责原则方面的差异,帮助开发者根据具体需求选择最合适的注入策略。
30 0
|
1月前
|
Java 关系型数据库 MySQL
|
3月前
|
存储 NoSQL Java
教程:Spring Boot与RocksDB本地存储的整合方法
教程:Spring Boot与RocksDB本地存储的整合方法
|
2月前
|
Java 索引 Spring
教程:Spring Boot中集成Elasticsearch的步骤
教程:Spring Boot中集成Elasticsearch的步骤