搭建springcloud的demo之Rest微服务构建案例工程模块(一)

开发环境:Eclipse+JDK1.8

1.Rest微服务构建案例工程模块

1.1先创建一个父工程 microservicecloud
1.1.1创建一个Maven Project父工程
在这里插入图片描述
注意:父工程的Packaging 必须是pom!!!
在这里插入图片描述
父工程的pon.xml
在这里插入图片描述
父工程的pom.xml源码

<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>com.yt.springcloud</groupId>
  <artifactId>microservicecloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
 <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>
 </properties>
 
 <dependencyManagement>
 	<dependencies>
 		
 		<!-- cloud的主jar包 -->
 		 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        
        <!-- boot的主jar包 -->
 		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.5.9.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        
        <!-- mysql的驱动包 -->
 		 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.4</version>
        </dependency>
        
        <!-- druid数据库连接池的主jar包(不用c3p0) -->
 		 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.31</version>
        </dependency>
        
         <!-- mybatis和boot整合的主jar包 -->
 		 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        
         <!-- logback的主jar包 -->
 		 <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        
        <!-- junit的测试jar包 -->
 		 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        
         <!-- log4j的主jar包 -->
 		 <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        
 	</dependencies>
 
 </dependencyManagement>
  
  
</project>

1.2.创建第一个公共子工程microservicecloud-api(主要放一些公共的)
在上面的microservicecloud的项目上面new
在这里插入图片描述
子工程是Maven Module
在这里插入图片描述
在这里插入图片描述
子工程是Packaging是jar
在这里插入图片描述
子工程的pom.xml
在这里插入图片描述
子工程的pom.xml源码

<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>

	<parent><!-- 子类里面显示声明才能有明确的继承表现,无意外就是父类的默认版本否则自己定义 -->
		<groupId>com.yt.springcloud</groupId>
		<artifactId>microservicecloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
		<artifactId>microservicecloud-api</artifactId><!-- 当前Module我自己叫什么名字 -->
	<dependencies><!-- 当前Module需要用到的jar包,按照自己的需求添加,如果父类已经包含了,可以不用写版本号 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId> 
		</dependency>
	</dependencies>
</project>

在这里插入图片描述
子工程创建一个实体类Dept.java
在这里插入图片描述
子工程创建一个实体类Dept.java的源码

package com.yt.springcloud.entity;

import java.io.Serializable;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@SuppressWarnings("serial")
@AllArgsConstructor//全参构造函数
@NoArgsConstructor//无参构造函数
@Data//生成set,get
@Accessors(chain=true)//链式风格访问
public class Dept  implements Serializable{//微服务必须要实现序列化接口
	
	private Long deptNo;//主键
	private String dName;//部门名称
	private String db_source;//来自哪个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库
}

microservicecloud-api 项目 先 maven clean 再maven install 打成jar包在本地maven库,可以给其他项目来使用
在这里插入图片描述
在这里插入图片描述

1.3.创建第二个子工程microservicecloud-provider-dept-8001(部门微服务提供者Module)
创建一个Maven Module
在这里插入图片描述
编写microservicecloud-provider-dept-8001的pom.xml配置文件
在这里插入图片描述

<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>
 
  <parent>
    <groupId>com.yt.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  
  <artifactId>microservicecloud-provider-dept-8001</artifactId>
  
  <dependencies>
  
  <!-- 引入自己已定义的api通用包,可以使用Dept部门Entity -->
  	<dependency>
  		<groupId>com.yt.springcloud</groupId>
  		<artifactId>microservicecloud-api</artifactId>
  		<version>${project.version}</version>
  	</dependency>
  	
  	 <!-- junit的jar包 -->
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  	</dependency>
  	
  	 <!-- mysql的jar包 -->
  	<dependency>
  		<groupId>mysql</groupId>
  		<artifactId>mysql-connector-java</artifactId>
  	</dependency>
  	
  	 <!-- druid的jar包 -->
  	<dependency>
  		<groupId>com.alibaba</groupId>
  		<artifactId>druid</artifactId>
  	</dependency>
  	
  	 <!-- mybatis的整合 -->
  	<dependency>
  		<groupId>org.mybatis.spring.boot</groupId>
  		<artifactId>mybatis-spring-boot-starter</artifactId>
  	</dependency>
  	
  	 <!-- springboot的整合jetty 微服务架构不发布在tomcat下面,内嵌的父容器 -->
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-jetty</artifactId>
  	</dependency>
  	
  	 <!-- springboot的整合web-->
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-web</artifactId>
  	</dependency>
  	
  	 <!-- springboot的整合测试 -->
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-test</artifactId>
  	</dependency>
  	
  	
  	 <!-- 修改后立即生效,热部署 (一修改,自动发布,自动构建)-->
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>springloaded</artifactId>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-devtools</artifactId>
  	</dependency>
  	
  </dependencies>
  
</project>

创建一个application.yml
在这里插入图片描述

server:
  port: 8001                                         # 当前微服务的端口
  
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
  type-aliases-package: com.yt.springcloud.entity    # 所有饿entity实体类所在包
  mapper-locations:
  - classpath:mybatis/mapper/**/*.xml                # mapper映射文件

spring:
  application:
   name: microservicecloud-dept                      # 对外暴露的微服务的名字(很重要)
  datasource:
   type: com.alibaba.druid.pool.DruidDataSource      # 当前数据源操作类型
   driver-class-name: org.gjt.mm.mysql.Driver        # mysql驱动包
   url: jdbc:mysql://localhost:3306/cloudDB01        # 数据库名称
   username: root
   password: hannong
   dbcp2:
    min-idle: 5                                      # 数据库连接池的最小维持连接数 
    initial-size: 5                                  # 初始化连接数
    max-total: 5                                     # 最大连接数
    max-wait-millis: 200                             # 等待连接获取的最大超时时间

创建一个myabtis的文件夹
在这里插入图片描述
创建一个myabtis.cfg.xml(mybatis的配置文件)
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>
	
	<settings>
		<setting name="cacheEnabled" value="true"/><!-- 二级缓存开启 -->
	</settings>
			
</configuration>

创建数据库cloudDB01以及dept表
在这里插入图片描述

DROP DATABASE IF EXISTS cloudDB01;
CREATE DATABASE cloudDB01 CHARACTER SET UTF8;
USE cloudDB01;
CREATE TABLE dept(
	deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
	dname VARCHAR(60),
	db_source VARCHAR(60)
);

INSERT INTO dept(dname,db_source)VALUES ('开发部',DATABASE());
INSERT INTO dept(dname,db_source)VALUES ('人事部',DATABASE());
INSERT INTO dept(dname,db_source)VALUES ('财务部',DATABASE());
INSERT INTO dept(dname,db_source)VALUES ('市场部',DATABASE());
INSERT INTO dept(dname,db_source)VALUES ('运维部',DATABASE());

SELECT * FROM dept;

创建一个DeptDao.java
在这里插入图片描述

package com.yt.springcloud.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.yt.springcloud.entity.Dept;

@Mapper
public interface DeptDao {
	
	public boolean addDept(Dept dept);
	
	public Dept findById(Long id);
	
	public List<Dept> findAll();
	

}

创建一个DeptMapper.xml
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yt.springcloud.dao.DeptDao">

		<select id="findById" resultType="Dept" parameterType="Long">
			select deptno,dname,db_source from dept where deptno=#{deptno} 
		</select>
		
		<select id="findAll"  parameterType="Long">
			select deptno,dname,db_source from dept 
		</select>
		
		<insert id="addDept"  parameterType="Long">
			insert into dept(dname,db_source) values(#{dname},database())
		</insert>
</mapper>

创建一个IDeptService.java接口
在这里插入图片描述

package com.yt.springcloud.service;

import java.util.List;

import com.yt.springcloud.entity.Dept;
//业务层接口
public interface IDeptService {
	
	public boolean add(Dept dept);
	
	public Dept get(Long id);
	
	public List<Dept> list();
 
}

创建一个DeptService.java实现类
在这里插入图片描述

package com.yt.springcloud.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yt.springcloud.dao.DeptDao;
import com.yt.springcloud.entity.Dept;
import com.yt.springcloud.service.IDeptService ;
//业务逻辑层的实现类
@Service
public class DeptService implements IDeptService {
	
	@Autowired
	private DeptDao deptDao;

	@Override
	public boolean add(Dept dept) {
		return deptDao.addDept(dept);
	}

	@Override
	public Dept get(Long id) {
		return deptDao.findById(id);
	}

	@Override
	public List<Dept> list() {
		return deptDao.findAll();
	}

}

创建一个DeptController.java接口
在这里插入图片描述

package com.yt.springcloud.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.yt.springcloud.entity.Dept;
import com.yt.springcloud.service.impl.DeptService;

@RestController//整合了responceBody+Controller
public class DeptController {
	
	@Autowired
	private DeptService deptService;
	
	@RequestMapping(value="/dept/add",method=RequestMethod.POST)
	public boolean add(@RequestBody Dept dept) {
		return deptService.add(dept);
	}
	
	@RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
	public Dept get(@PathVariable("id") Long id) {
		return deptService.get(id);
	}
	
	@RequestMapping(value="/dept/list",method=RequestMethod.GET)
	public List<Dept> list() {
		return deptService.list();
	}
	
}

启动项目测试一下 : run as -->Spring Boot App
测试路径 : http://localhost:8001/dept/get/2
在这里插入图片描述
测试路径 : http://localhost:8001/dept/list
在这里插入图片描述
1.4.创建一个项目子工程microservicecloud-consumer-dept-80(部门微服务消费者Module)
在这里插入图片描述

添加pom.xml的依赖
在这里插入图片描述

<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>
  <parent>
    <groupId>com.yt.springcloud</groupId>
    <artifactId>microservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  
  <artifactId>microservicecloud-consumer-dept-80</artifactId>
  <description>部门微服务消费者</description>
  
  <dependencies>
  
  	<dependency><!-- 自己定义的api -->
  		<groupId>com.yt.springcloud</groupId>
  		<artifactId>microservicecloud-api</artifactId>
  		<version>${project.version}</version>
  	</dependency>
  	
  	<dependency><!-- springboot-web -->
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-web</artifactId>
  	</dependency>
  	
  	 <!-- 修改后立即生效,热部署 (一修改,自动发布,自动构建)-->
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>springloaded</artifactId>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-devtools</artifactId>
  	</dependency>
  	 	
  </dependencies>
  
  
  
</project> 

配置application.yml文件
在这里插入图片描述

server :
   port: 80

创建一个ConfigBean.java
在这里插入图片描述

package com.yt.springcloud.cfgbeans;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration//其实就是ApplicationContext.xml
public class ConfigBean {
	
	/**
	 * RestTemplate提供了多种便捷访问远程Http服务的方法
	 * 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
	 * @return
	 */
	@Bean
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

}

创建一个DeptController_consumer.java
在这里插入图片描述

package com.yt.springcloud.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.yt.springcloud.entity.Dept;

@RestController
public class DeptController_consumer {
	
	private static final String REST_URL_PREFIX="http://localhost:8001";
	
	/**
	 * 使用RestTemplate访问restful接口非常的简单粗暴无脑
	 * (url,requestMap,ResponseBean.class)这三个参数分别代表
	 * REST请求地址,请求参数,HTTP响应转换被转换成的对象类型
	 */
	@Autowired
	private RestTemplate restTemplate;
	
	@RequestMapping(value="/consumer/dept/add")
	public boolean add(Dept dept) {
		return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, boolean.class);
	}
	
	@RequestMapping(value="/consumer/dept/get/{id}")
	public Dept get(@PathVariable("id") Long id) {
		return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id, Dept.class);
	}
	
	@SuppressWarnings("unchecked")
	@RequestMapping(value="/consumer/dept/list")
	public List<Dept> list(Dept dept) {
		return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
	}
	

}

创建一个DeptConsumer80_App.java启动类
在这里插入图片描述

package com.yt.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DeptConsumer80_App {
	
	public static void main(String[] args) {
		SpringApplication.run(DeptConsumer80_App.class, args);
	}

}

注意:要先启动提供者工程,再消费者工程两个项目
在这里插入图片描述
注意:调用路径 http://localhost/consumer/dept/get/2
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuanting_/article/details/88179363