SpringBoot是由Pivotal团队提供的全新框架,这套框架设计之初是为了简化Spring应用的搭建和开发过程,随着前端框架的发展,webpack等打包工具的出现。SpringBoot开始为前端提供接口服务,也就是我们说的微服务。这样的实现方法真正做到了前后端分离。一个很好的例子就是WEB应用和手机APP可以同用一套服务。下面将说明SpringBoot微服务搭建的过程。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.example.servicegroupId>
<artifactId>order-serviceartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>order-servicename>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.3.RELEASEversion>
<relativePath/>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
package com.example.service.itemservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//SpringBoot启动类注解
@SpringBootApplication
public class ItemServiceApplication {
public static void main(String[] args) {
//通过SpringBoot内部的类加载机制对字节码文件进行加载
SpringApplication.run(ItemServiceApplication.class, args);
}
}
server:
port: 8080
package com.example.service.itemservice.bean;
//小编习惯于再创建完Getter和Setter之后,创建一个无参的构造方法和有参的构造方法
//同时重写toString()方法,这里需要考虑到项目实际情况。
public class Item {
private int id;
private String name;
private String desp;
private String pic;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesp() {
return desp;
}
public void setDesp(String desp) {
this.desp = desp;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public Item() {
}
public Item(int id, String name, String desp, String pic) {
this.id = id;
this.name = name;
this.desp = desp;
this.pic = pic;
}
@Override
public String toString() {
return "Item{" +
"id=" + id +
", name='" + name + '\'' +
", desp='" + desp + '\'' +
", pic='" + pic + '\'' +
'}';
}
}
package com.example.service.itemservice.service;
import com.example.service.itemservice.bean.Item;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
//加上Service注解,说明该类为Service层容器
@Service
public class ItemService {
private static final Map<Integer, Item> map = new HashMap<>();
//创建假数据
static {
map.put(1, new Item(1, "商品1", "描述1", "http://localhost/pic/pic1"));
map.put(2, new Item(2, "商品2", "描述2", "http://localhost/pic/pic2"));
}
//为Controller层提供查询数据的方法
public Item queryItemById(int id) {
return map.get(id);
}
}
package com.example.service.itemservice.controller;
import com.example.service.itemservice.bean.Item;
import com.example.service.itemservice.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* 这里我们对代码中用到的注解进行说明。
* 1. RestController,该注解实质上是Controller和ResponseBody注解的结合,
* RestController提供json格式的数据。
* 2. Autowired 我们需要将Service层实例注入到Controller层,
* 方便我们调用Service层方法。Autowired是Spring官方提供。
* 同样作用的注解还有@Inject(JSR330规范)和@Resource(JSR250规范。
* 3. @GetMapping("")
* 等同于( @RequestMapping(value= "", method= RequestMethod.GET) )
* 4. @PathVariable 用于取得路径中的值,如 "/item/1" 则这时id就为1
*/
@RestController
public class ItemController {
@Autowired
private ItemService itemService;
@GetMapping("/item/{id}")
public Item getItem(@PathVariable("id") int id) {
return itemService.queryItemById(id);
}
}
重新运行我们的启动类,对接口进行访问。
成功获取到我们的数据,本次SpringBoot微服务的搭建到这里就结束了,下次会写如何实现微服务和微服务之间如何相互调用。