最近想研究一下 Spring Cloud 方面的内容,为公司后期发展做一些技术调研,就上网找了一下是否有与 Rails 相关 Spring boot 之类的文章。文章没有找到,不过找到了一个 PPT,理论上应该有个视频,不过视频貌似已经过期了。
我根据这个 PPT 整理了一下,也算借花谢佛了。
对于 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...
Spring Tool Suite 或者 IntelliJ IDEA
之前比较流行的是 maven,目前比较流行的应该是 gradle 吧,目测 Android Studio 用的就是 gradle。
当然,maven 和 gradle 做的比 Rake 要多一些,我感觉类似于 Rake + Bundle。
与 rails 命令行类似的工具是 springboot
$ brew tap pivotal/tap
$ brew install springboot
安装完以后你会发现,如果执行$ which spring
,指向的是 rvm 目录下的 spring。这是因为 rails 会安装 spring 命令,这个 spring 会用来加速开发环境的启动。
那么我们只需要做以下两步,就可以避免他们的冲突:
$ echo "export PATH=/usr/local/Cellar/springboot/2.1.3.RELEASE/bin:$PATH" >> ~/.zshrc.local
$ source ~/.zshrc.local
$ cd /usr/local/Cellar/springboot/2.1.3.RELEASE/bin
$ mv spring springboot
$ which springboot
貌似这个命令有点长,你可以使用 alias 缩短一下命令:
$ echo "alias sb='springboot'" >> ~/.aliases
$ source ~/.aliases
$ 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
-d
是dependency
的缩写,这里指依赖 web 包,ORM 使用data-jpa
, 数据库用h2
( 内存数据库), freemarker
是模板引擎,类似于 erb.-g
是组织前缀,一般的顺序正好是域名颠倒过来,比如com.ruby-china.demo
-a
项目 id, 一般可以用项目名称Spring Boot CLI
默认会使用 Maven, 如果想用 gradle 可以添加参数--build gradle
springboot help init
可以了解跟多的命令$ mvn spring-boot:run
这个并没有,而且还是故意没有...
这个也并没有...
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, 参数等来和一个路径关联
并没有
@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() { ... }
}
[Spring Data JPA](http://projects.spring.io/spring-data-jpa/)
@Entity
注解来声明 Model@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;
}
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
$ 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/)
其他的一些,感觉和 Rails 其实相差比较多了。我觉得倒不如直接去学习 Spring Boot 了。