0


【微服务】SpringBoot 搭建微服务初体验

SpringBoot 搭建微服务初体验

前言

大家好,我是DJ李淳罡,微服务是现在面试中必不可少的一项技能了,掌握微服务,不仅能够加薪升职,还能在面试中,底气十足,不怯场,不怕被压薪资。所以今天就特意开了一个微服务专栏,给大家从0-1的介绍微服务知识,由浅入深,逐渐掌握,感兴趣的可以订阅收藏,防止下次找不到了哦~

Server端程序开发

上篇讲了微服务的概念性的东西,这篇就利用SpringBoot 搭建微服务,带大家从代码的角度来加深对微服务的概念,理解了概念才会知道微服务怎么架构的,组件与组件之间是如何互通通信的,这些很重要,如有忘记的,大家可以去 微服务 专栏里再次查看。

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

首先新建一个

Project

,使用

Spring Initializr

来引入依赖,如图所示。

在这里插入图片描述

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

  • Group:输入项目的包名。
  • Aritifact:输入项目的名称。
  • Version:版本信息,默认0.0.1-SNAPSHOT。
  • JDK:选择1.8的即可

其他信息默认即可。

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

填入项目信息之后,需要在项目中添加依赖,勾选

Spring Web

模块,如图所示:

在这里插入图片描述

导入以后,建议在

pom.xml

文件后面,添加aliyun的Maven仓库地址,可以更快地下载依赖:

全局配置:

<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

单项目配置:

<repositories><repository><id>central</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><layout>default</layout><!-- 是否开启发布版构件下载 --><releases><enabled>true</enabled></releases><!-- 是否开启快照版构件下载 --><snapshots><enabled>false</enabled></snapshots></repository></repositories>

因为案例需要访问数据库表,还需要引入

spring-boot-starter-data- jpa

com.h2database

等依赖包,完整依赖部分的

pom.xml

代码如下所示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.29</version></dependency>

3.开发SQL语句

classpath

下添加两个文件:

  • schema.sql:是默认创建数据表的SQL文件。
  • data.sql:是默认初始化数据的SQL文件。

它们的位置如下:
在这里插入图片描述
本案例以电影数据为例,首先创建一张电影表

movie

,并插入几条影片数据。 在

classpath:schema.sql

中添加以下内容:

droptable movie ifexists;createtable movie(
id bigintAUTO_INCREMENT,
author varchar(50));

classpsth:data.sql

中添加以下初始化数据:

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

4.开发JavaBean

开发与数据库表

movie

对应的实体类

Movie

,代码如下:

//导入的包略...@Entity@Table(name="movie")publicclassMovie{@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLong id;@ColumnprivateString name;@ColumnprivateString author;//get/set方法略...}

5.开发DAO接口

注意DAO接口是

JpaRepository

的子类,具体作用是访问数据库,代码如下:

//省略一些imports...@Repository(value="movieRepository")publicinterfaceMovieRepositoryextendsJpaRepository<Movie,Lo}
JpaRepository

接口包含CRUD等操作,来自于

Spring Data JPA

Spring Data JPA

是在实现了JPA规范的基础上封装的一套JPA应用框架
使用

Spring DataJPA

能够方便我们在不同的ORM框架之间进行切换,而不需要更改代码。Spring Data JPA旨在通过统一ORM框架的访问持久层的操作,来提高开发效率。Spring Data JPA提供了许多供开发者使用的接口,而JpaRepository是开发中最常使用的接口,主要继承了

PagingAndSortRepository

,对返回值类型做了适配。

6.开发Service

业务层对应的

MovieService

代码如下:

@Service(value ="movieService")publicclassMovieService{/**
     * 使用@Autowaired 或者@Resource都可以
     */privateMovieRespository movieRespository;publicMoviefindById(Long id){//如果存在,则返回对象,否则返回null;return movieRespository.findById(id).orElse(null);}}@GetMapping("/movie/{id}")publicMoviefindById(@PathVariable(name ="id")Long id){return movieService.findById(id);}}

注意: 需要将

movieRepository

注入到

Service

7.开发Controller

最后开发控制层的

Controller

类,里面定义方法访问某个id对应的电影,代码如下:

@RestControllerpublicclassMovieController{@Resource(name ="movieService")privateMovieService movieService;@GetMapping("/movie/{id}")publicMoviefindById(@PathVariable(name ="id")Long id){return movieService.findById(id);}}

8.修改配置文件

classpath

目录下的

application.properties

application.yml

都可以作为 Spring Boot的配置文件。其中

application.yml

语言的操作更方便,且在开发环境下,还可以提示帮助。

yml

配置文件在项目中位置如图所示。

在这里插入图片描述
添加以下内容,注意缩进格式:

server:
  port:6789

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/text?useSSL=false&useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name:com.mysql.cj.jdbc.Driver
    type:com.alibaba.druid.pool.DruidDataSource

mybatis:
  mapper-locations: classpath:mapper/*.xml
  check-config-location: true
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

9.修改启动类

修改类

SpringcloudMovieServerApplication

,添加一些注解,代码如下:

@SpringBootApplication@EntityScan@EnableJpaRepositoriespublicclassSpringcloudMovieServerApplication{publicstaticvoidmain(String[] args){SpringApplication.run(SpringcloudMovieServerApplication.class, args);}}
  • @EntityScan: 用来扫描和发现指定包及其子包中的Entity定义
  • @EnableJpaRepositories用来扫描和发现指定包及其子包中的Repository 定义。如果多处使用@EnableJpaRepositories,它们的basePackages集合不能有交集,并且要能覆盖所有需要的Repository定义。

10.启动并访问

SpringcloudMovieServerApplication

类上右击,在弹出的快捷菜单中选择

Run

选项,

访问:

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

显示结果:

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

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

客户端开发

我们开发了服务端后,还需要一个客户端(也是基于springBoot)来访问服务端(这时候服务端就是类似于微服务的注册中心)。

流程和服务端开发类似。

1.创建项目

首先新建一个Project,使用

Spring Initializr

来引入依赖。

这里只需要Web模块即可,只涉及

Server

端的访问。

2.创建JavaBean

创建一个与Server端相同的

JavaBean

,只是不需要添加JPA的注解。

publicclassMovie{privateLong id;privateString name;privateString author;}

3.创建Controller

客户端Controller代码是通过

Restful

方式对服务端进行调用的,此处 采用了

RestTemplate

类进行调用,具体代码如下:

@RestControllerpublicclassMovieClientController{//添加 RestTemplate@Resource(name ="restTemplate")privateRestTemplate restTemplate;@GetMapping("/movive/client/id")publicMoviefindById(@PathVariableLong id){return restTemplate.getForObject("http:localhost:6789/movie/"+id,Movie.class);}}

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

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

4.修改yml文件

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

 server:
     port:6799

5.修改启动类

在启动类中实现两个操作:

  • 添加@ComponentScan注解。
  • 使用@Bean声明RestTemplate的SpringBean

具体启动类代码如下:

@SpringBootApplication@ComponentScanpublicclassSpringCloudMovieClientApplication{@BeanpublicRestTemplaterestTemplate(){}returnnewRestTemplate();publicstaticvoidmain(String[] args){SpringApplication.run(SpringCloudMovieClientApplication.class, args);}}
RestTemplate

是Spring用于同步Client端的核心类,它简化了与HTTP 服务的通信,并满足Restful原则,程序代码可以给它提供URL,并提取结果。

6.启动两个项目访问

访问客户端地址:

http://localhost:6799/movie/client/2

。 注意访问的端口为6799。
返回:

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

至此,一个完整的Spring Boot程序就完成了。这里的客户端和服务端是两个不同的微服务,通过

RestTemplate

可以进行访问。

总结

通过前面学习的概念,再利用对SprinBoot掌握,可以搭建一个简单小型的微服务,体验一下微服务的流程,这里面主要涉及到

注册中心

。微服务与微服务之间是如何通信的,如何进行相互注册,以及如何进行熔断等等,会在后续中一一讲解,如果有感兴趣的小伙伴,想要了解和学习微服务这块的,可以订阅收藏哦,防止下次找不到了~


本文转载自: https://blog.csdn.net/weixin_44427181/article/details/127352175
版权归原作者 _李淳罡 所有, 如有侵权,请联系我们删除。

“【微服务】SpringBoot 搭建微服务初体验”的评论:

还没有评论