原生态REST学习环境搭建

1、Rest学习环境搭建:服务提供者

1.1、创建父工程springcloud_demo

以maven的方式创建父工程

父工程为springcloud_demo

  • 父工程主要是定义POM文件,将后续各个子模块公用的jar包等统一提取出来,类似一个抽象父类
  • 切记Packageing是pom模式

父工程的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion><groupId>org.example</groupId><artifactId>springcloud_demo</artifactId><version>1.0-SNAPSHOT</version><modules><module>springcloud-api</module><module>springcloud-provider-dept-8001</module><module>springcloud-consumer-dept-80</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version><swagger.version>2.7.0</swagger.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--springCloud的依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR1</version><type>pom</type><scope>import</scope></dependency><!--SpringBoot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.4.RELEASE</version><type>pom</type><scope>import</scope></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!--SpringBoot 启动器--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><version>2.1.4.RELEASE</version></dependency><!--日志测试~--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.4.RELEASE</version><scope>compile</scope></dependency><!--swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>${swagger.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies>
</project>

1.2、搭建子module–springcloud-api

子module的创建方式仍为maven

**备注:**api的模块主要为服务提供实体,无其它作用
创建实体类部门Dept

实体类代码:

package com.hy.springcloud.api.pojo;import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;/*@Author: hy*/
/*api模块仅提供实体类*/
@Data//简略构造器、 get set方法等
@NoArgsConstructor //无参构造注解
@Accessors //链式写法
public class Dept implements Serializable { //Dept实体类private Long deptno;//主键private String  dname;//微服务,一个服务对应一个数据库,同一信息可能存在不同数据库private String db_source;//构造器public Dept(String dname){this.dname=dname;}/*链式写法Dept dept = new Dept()原始:dept.setDeptNo(11) dept.setDname('技术部') ...链式:dept.setDeptNo(11).setDname('技术部')*/}

1.3、服务提供方搭建

整体结构如下:

1、以maven方式创建springcloud-provider-dept-8001

2、编写pom配置

需要拿到实体类,并以pom方式引入,所以需要在pom文件中配置。
**备注:**其它依赖会自动从父工程引入!

<?xml version="1.0" encoding="UTF-8"?>
<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"><parent><artifactId>springcloud_demo</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-provider-dept-8001</artifactId><dependencies><!--我们需要拿到实体类,所以要配置api module--><dependency><groupId>org.example</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

3、配置文件application.yml

server:port: 8001#mybatis配置
mybatis:type-aliases-package: com.hy.springcloud.api.pojoconfig-location: classpath:mybatis/mybatis-config.xmlmapper-locations: classpath:mybatis/mapper/*.xml#spring配置
spring:application:name: springcloud-provider-dept #别名datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/hy_cloud?useUnicode=true&characterEncoding=utf-8username: rootpassword: root

4、编写Dao、Service、Controller层

1、Dao层

package com.hy.springcloud.dao;import com.hy.springcloud.api.pojo.Dept; //从pom.xml导入
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;import java.util.List;
/*Auhtor: hy*/
@Mapper
@Repository
public interface DeptDao {public boolean addDept(Dept dept);public Dept queryById(Long id);public List<Dept> queryAll(); //查询所有public boolean deleteById(Long id);public boolean updateDept(Dept dept);
}

2、mapper文件xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hy.springcloud.dao.DeptDao"><insert id="addDept" parameterType="Dept">insert  into dept (dname,db_source)values (#{dname},DATABASE());</insert><select id="queryById" resultType="Dept" parameterType="Long">select * from dept where deptno=#{id};</select><select id="queryAll" resultType="Dept">select * from dept;</select><delete id="deleteById" parameterType="Long">delete * from dept where deptno=#{id};</delete><update id="updateDept" parameterType="Dept">update dept set dname=#{dname};</update>
</mapper>

3、Service层

package com.hy.springcloud.service;
import com.hy.springcloud.api.pojo.Dept;
import java.util.List;
/*Author: hy*/
public interface DeptService {public boolean addDept(Dept dept);public Dept queryById(Long id);public List<Dept> queryAll(); //查询所有public boolean deleteById(Long id);public boolean updateDept(Dept dept);
}

4、Service接口实现

package com.hy.springcloud.service;import com.hy.springcloud.api.pojo.Dept;
import com.hy.springcloud.dao.DeptDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.security.PrivateKey;
import java.util.List;/*author: hy*/
@Service
public class DeptServiceImpl implements DeptService{@Autowiredprivate DeptDao deptDao;@Overridepublic boolean addDept(Dept dept) {return deptDao.addDept(dept);}@Overridepublic Dept queryById(Long id) {return deptDao.queryById(id);}@Overridepublic List<Dept> queryAll() {return deptDao.queryAll();}@Overridepublic boolean deleteById(Long id) {return deptDao.deleteById(id);}@Overridepublic boolean updateDept(Dept dept) {return deptDao.updateDept(dept);}
}

5、Controller层

package com.hy.springcloud.controller;import com.hy.springcloud.api.pojo.Dept;
import com.hy.springcloud.service.DeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import sun.security.krb5.internal.PAData;import javax.xml.ws.http.HTTPBinding;
import java.util.List;/*author: hy*/
@RestController  //与前端不交互,使用RestController
@Api(tags = "Dept测试")
public class DeptController {@Autowiredprivate DeptService deptService;@ApiOperation(value = "添加部门")@PostMapping(path = "/dept/add")public boolean addDept(Dept dept){return  deptService.addDept(dept);}@ApiOperation(value = "查询部门")@GetMapping(path = "/dept/get/{id}")//RestFul风格public Dept queryById(@PathVariable("id") Long id){return deptService.queryById(id);}@ApiOperation(value = "查询所有部门")@GetMapping(path = "/dept/list")public List<Dept> queryALL(){return deptService.queryAll();}@ApiOperation(value = "删除部门")@DeleteMapping(path = "/dept/del/{id}")public boolean deleteById(@PathVariable("id") Long id ){return deptService.deleteById(id);}@ApiOperation(value = "更新部门")@PutMapping(path = "/dept/update")public boolean updateDept(Dept dept){return  deptService.updateDept(dept);}
}

5、创建主启动类

package com.hy.springcloud;/*author: hy*///启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DeptProvider_8001 {public static void main(String[] args) {SpringApplication.run(DeptProvider_8001.class,args);}
}

6、启动测试

http://localhost:8001/dept/list

2、Rest学习环境搭建:服务消费者

2.1、搭建消费方子module

仍以maven的方式创建


需要注意的是:消费方只负责消费,所以只有Controller层

整体结构如下:

2.1、配置pom文件与yml文件

**备注:**pom文件依赖仍从父工程引入,只需在 pom文件中引入实体类

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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"><parent><artifactId>springcloud_demo</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-consumer-dept-80</artifactId><dependencies><dependency><groupId>org.example</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

application.xml文件:

只需配置服务端口号

server:port: 80

2.3、ConfigBean与Controller层

1、ConfigBean

  • RestTemplate 提供多种便捷访问远程http服务的方法,简单的Restful服务模板~
  • RestTemplate供我们直接调用!需要自行注册到spring中!
package com.hy.springcloud.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ConfigBean { //Configuration --spring  applicationContext.xml@Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

2、Controller层

package com.hy.springcloud.controller;import com.hy.springcloud.api.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;import java.util.List;/*消费者与服务提供者实现了完全解耦*/
@RestController
public class DeptConsumerController {//理解:消费者不应该有service层//RestTemplate ....供我们直接调用!注册到spring中/*** 理解:消费者,不应该有service层~* RestTemplate .... 供我们直接调用就可以了! 注册到Spring中* (地址:url, 实体:Map ,Class<T> responseType)* <p>* 提供多种便捷访问远程http服务的方法,简单的Restful服务模板~*/@Autowiredprivate RestTemplate restTemplate;/*** 服务提供方地址前缀* <p>* Ribbon:我们这里的地址,应该是一个变量,通过服务名来访问*/private static final String REST_URL_PREFIX = "http://localhost:8001";//private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";/*** 消费方添加部门信息* @param dept* @return*/@RequestMapping("/consumer/dept/add")public boolean add(Dept dept) {// postForObject(服务提供方地址(接口),参数实体,返回类型.class)return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);}/*** 消费方根据id查询部门信息* @param id* @return*/@RequestMapping("/consumer/dept/get/{id}")public Dept get(@PathVariable("id") Long id) {// getForObject(服务提供方地址(接口),返回类型.class)return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);}/*** 消费方查询部门信息列表* @return*/@RequestMapping("/consumer/dept/list")public List<Dept> list() {return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);}
}

2.4、创建主启动类

DeptConsumer_80
**备注:**需要排除datasource的自动注解,否则可能启动报错:配置数据源失败

package com.hy.springcloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)  //排除datasource的自动注解 否则会报错:配置数据源失败
public class DeptConsumer_80 {public static void main(String[] args) {SpringApplication.run(DeptConsumer_80.class,args);}
}

2.5、启动测试

http://localhost/consumer/dept/list

3、总结说明

以上就是原生态的Rest服务搭建详细流程,若仍有问题或需要sql文件,评论或私信!!!

原生态REST服务环境相关推荐

  1. Windows Server 2012配置***服务环境

    系统环境:  Windows Server 2012 R2 Standard (带有GUI的服务器) 功能需求:搭建基于PPTP 的×××,作为跳板机进行×××连接业务系统 1.配置准备工作 1.1. ...

  2. 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理

    摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM来简化微服务环境 ...

  3. 使用 docker 搭建 web 服务环境

    本文目的 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的.对于 PHP 的 Web 开发来说,开发环境至少要有一个 Web 服务器(如 Apac ...

  4. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    在编辑Dockerfile过程中参考了以下相关范例:https://hub.docker.com/_/php/.https://hub.docker.com/_/mysql/.https://hub. ...

  5. 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理 1

    摘要: 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例,帮助你理解基于ACM来简化微服务环境 ...

  6. centos / Linux 服务环境下安装 Redis 5.0.3

    centos / Linux 服务环境下安装 Redis 5.0.3 原文:centos / Linux 服务环境下安装 Redis 5.0.3 1.首先进入你要安装的目录 cd /usr/local ...

  7. Prometheus(一):Web服务环境监控

     写在前面 现每个后端的同学的日常都在跟服务(接口)打交道,维护老的比较大单体应用.按业务拆得相对比较细的新服务.无论企业内部用的,面向用户的前端的服务.流量大的有流量小的,有重要的有不那么重要的. ...

  8. apache+php+mysql+phpadmin 服务环境搭建

    前些日子,有朋友问如何用apache/php/mysql/phpadmin搭建PHP网站服务环境.现在就这个问题,我把我的一些经验与大家分享.各位同行有何建议,敬请在评论区指出,谢谢!    1.下载 ...

  9. 分别安装搭建lamp服务环境

    一. 分别安装搭建lamp服务环境 准备工作: 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state –state NE ...

最新文章

  1. python自动翻译小工具_Python实现翻译小工具
  2. epoll和select区别
  3. 多集群应用如何帮助企业级Kubernetes获益
  4. Kafka如何实现每秒上百万的超高并发写入?
  5. 源于十年来的点滴积累——《变革中的思索》印行出版
  6. 前端学习(1743):前端调试值之调试元素的hover样式
  7. html 改变文本框字体颜色,CSS更改文本框的字体颜色
  8. 密码学电子书_密码学中的电子密码书(ECB)
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的高校学习智能管理论坛系统
  10. [POJ 1273]Drainage Ditches
  11. 【深度优先搜索】计蒜客:最大蛋糕(最大连通块)
  12. ipython快捷键
  13. linux系统配置设置网络端口映射,Linux 配置端口映射
  14. B-002 电容基础知识
  15. Android开发————简易App设计(三)
  16. LabVIEW编程LabVIEW开发如何将十六进制字符转换为ASCII字符
  17. IP,ARP,以太网--网络层与数据链路层详解
  18. 【樂理】自然音階及其三和弦列表
  19. Facebook老员工的十点经验
  20. 神经网络预测股价python talib_用机器学习来预测股价(代码+文档)——2018年iNTUtion决赛大作!...

热门文章

  1. proxool详细配置
  2. PHP扩展 zqf 兼容7.0
  3. 在Linux上打开端口
  4. 如何远程控制电脑,远程控制电脑的设置方法
  5. redisTemplate Hash 使用方法
  6. Nginx默认日志文件路径,Nginx重启命令,检查Nginx
  7. 软件测试中主要测试什么内容
  8. css控制文本超出省略...
  9. linux 拷贝文件夹并覆盖另一个文件夹
  10. megacli在线raid构建详解