购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 Spring Boot搭建微服务实战

接下来,我们使用Spring Boot来搭建一个微服务程序,程序的结构如图1-10所示。

图1-10

1.5.1 Server端程序开发

1.创建Server项目,并添加依赖

首先新建一个Project,使用Spring Initializr来引入依赖,如图1-11所示。

图1-11

点击“Next”按钮,在新窗口关于项目描述的栏目中填入以下信息:

· Group:输入项目的包名。

· Aritifact:输入项目的名称。

· Version:版本信息,默认0.0.1-SNAPSHOT。

其他信息默认即可。

2.引入依赖,完善配置文件

填入项目信息之后,需要在项目中添加依赖,勾选Spring Web模块,如图1-12所示。

图1-12

导入以后,建议在pom.xml文件后面,添加aliyun的Maven仓库地址,可以更快地下载依赖:

因为案例需要访问数据库表,还需要引入spring-boot-starter-data-jpa、com.h2database等依赖包,完整依赖部分的pom.xml代码如下所示:

示例代码1-16 pom.xml

3.开发SQL语句

在classpath下添加两个文件:

· schema.sql:是默认创建数据表的SQL文件。

· data.sql:是默认初始化数据的SQL文件。

两个文件在项目中的位置如图1-13所示。

图1-13

本案例以电影数据为例,首先创建一张电影表movie,并插入几条影片数据。

在classpath:schema.sql中添加以下内容:

示例代码1-17 schema.sql

drop table movie if exists;
create table movie(
    id bigint generated  by default as identity,
    name varchar(50),
    author varchar(50)
);

注意

本案例采用的数据库是H2,H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,即只有一个jar文件,可以直接嵌入到应用项目中。Generated by default as identify为H2的语法,意思是指id的值为自动生成。

在classpsth:data.sql中添加以下初始化数据:

insert into movie values(1,'红高粱','张艺谋');
insert into movie values(2,'让子弹飞一会儿','姜文');

4.开发JavaBean

开发与数据库表movie对应的实体类Movie,代码如下:

示例代码1-18 Movie.java

package cn.mrchi.springcloud.entity;
//导入的包略…
@Entity
@Table(name="movie")
public class Movie {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    @Column
    private String name;
    @Column
    private String author;
//get/set方法略…
}

5.开发DAO接口

注意DAO接口是JpaRepository的子类,具体作用是访问数据库,代码如下:

示例代码1-19 pom.xml

package cn.mrchi.springcloud.repository;
//省略一些imports…
@Repository(value="movieRepository")
public interface MovieRepository extends JpaRepository<Movie, Long> {
}

JpaRepository接口包含CRUD等操作,来自于Spring Data JPA。Spring Data JPA是在实现了JPA规范的基础上封装的一套JPA应用框架。虽然ORM框架都实现了JPA规范,但是在不同的ORM框架之间切换,仍然需要编写不同的代码;而使用Spring Data JPA能够方便我们在不同的ORM框架之间进行切换,而不需要更改代码。Spring Data JPA旨在通过统一ORM框架的访问持久层的操作,来提高开发效率。Spring Data JPA提供了许多供开发者使用的接口,而JpaRepository是开发中最常使用的接口,主要继承了PagingAndSortRepository,对返回值类型做了适配。

6.开发Service

业务层对应的MovieService代码如下:

示例代码1-20 MovieService.java

注意

需要将movieRepository注入到Service。

7.开发Controller

最后开发控制层的Controller类,里面定义方法访问某个id对应的电影,代码如下:

示例代码1-21 MovieController.java

8.修改配置文件

classpath目录下的application.properties或application.yml都可以作为Spring Boot的配置文件。其中application.yml语言的操作更方便,且在开发环境下,还可以提示帮助。yml配置文件在项目中位置如图1-14所示。

图1-14

添加以下内容,注意缩进格式:

示例代码1-22 application.yml(文件中部分代码)

9.现在修改启动类

修改类SpringcloudMovieServerApplication,添加一些注解,代码如下:

示例代码1-23 SpringcloudMovieServerApplication.java

@EntityScan用来扫描和发现指定包及其子包中的Entity定义,@EnableJpaRepositories用来扫描和发现指定包及其子包中的Repository定义。如果多处使用@EnableJpaRepositories,它们的basePackages集合不能有交集,并且要能覆盖所有需要的Repository定义。

10.启动并访问

在SpringcloudMovieServerApplication类上右击,在弹出的快捷菜单中选择Run选项,如图1-15所示。

图1-15

启动成功以后,显示如图1-16所示。

图1-16

访问:

http://localhost:6789/movie/1
http://localhost:6789/movie/2

显示结果:

{"id":2,"name":"让子弹飞一会儿","author":"姜文"}

至此,Spring Boot程序已经开发完成了。

1.5.2 客户端程序开发

1.创建项目

首先新建一个Project,使用Spring Initializr来引入依赖,如图1-17所示。

图1-17

这里只需要Web模块即可,只涉及Server端的访问。

2.创建JavaBean

创建一个与Server端相同的JavaBean,只是不需要添加JPA的注解。

示例代码1-24 Movie .java

package cn.mrchi.springcloud.entity;
public class Movie {
    private Long id;
    private String name;
private String author;
}

3.创建Controller

客户端Controller代码是通过Restful方式对服务端进行调用的,此处采用了RestTemplate类进行调用,具体代码如下:

示例代码1-25 MovieClientController.java

上面的URL是通过硬编码写到代码中的,当然URL也可以配置到application.yml中,文件中添加如下内容:

#用户配置
movie:
  url: http://localhost:6789/movie/

然后就可以在Controller中引用movie.url了,代码如下:

4.修改yml文件

修改classpath:application.yml配置文件,因为这是一个Web应用,所以只需要配置端口即可,项目根目录下找到配置文件,如图1-18所示。

图1-18

内容如下:

server:
 port: 6799

5.修改启动类添加一些注解

以下实现两个操作:

(1)添加@ComponentScan注解。

(2)使用@Bean声明RestTemplate的SpringBean。

具体启动类代码如下:

示例代码1-26 SpringcloudMovieClientApplication.java

RestTemplate是Spring用于同步Client端的核心类,它简化了与HTTP服务的通信,并满足Restful原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖JDK的HTTP连接工具。当然我们也可以通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHttp。此处RestTemplate主要用来访问Server端程序。

@ComponentScan注解用来扫描basePackage下面所有带有@Component的类。

6.启动两个项目访问

访问客户端地址:http://localhost:6799/movie/client/2。

注意访问的端口为6799。

返回:

{"id":2,"name":"让子弹飞一会儿","author":"姜文"}

至此,一个完整的Spring Boot程序就完成了。这里的客户端和服务端是两个不同的微服务,通过RestTemplate可以进行访问。 z7330mVB9pYeUhbcqlV11i6ANRyp6CU8jLMPxnn6jEd0sSveYLvKPk0Kf9ev0GcU

点击中间区域
呼出菜单
上一章
目录
下一章
×