二、springcloud微服务测试环境搭建

版本说明:

springcloud:Greenwich.SR3
springboot:2.1.8

1、构建步骤

1.1、microservicecloud整体父工程Project

新建父工程microservicecloud,切记是Packageing是pom模式

二、springcloud微服务测试环境搭建_第1张图片

此maven project目的:主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类

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.0modelVersion>
  <groupId>com.jiatp.springcloudgroupId>
  <artifactId>microservicecloudartifactId>
  <version>0.0.1-SNAPSHOTversion>
  <packaging>pompackaging>
  <properties>
   <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
   <maven.compiler.source>1.8maven.compiler.source>
   <maven.compiler.target>1.8maven.compiler.target>
   <junit.version>4.12junit.version>
   <log4j.version>1.2.17log4j.version>
   <lombok.version>1.18.10lombok.version>
  properties>
  
  <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.cloudgroupId>
       <artifactId>spring-cloud-dependenciesartifactId>
       <version>Greenwich.SR3version>
       <type>pomtype>
       <scope>importscope>
     dependency>
     <dependency>
       <groupId>org.springframework.bootgroupId>
       <artifactId>spring-boot-dependenciesartifactId>
       <version>2.1.8.RELEASEversion>
       <type>pomtype>
       <scope>importscope>
     dependency>
     <dependency>
       <groupId>mysqlgroupId>
       <artifactId>mysql-connector-javaartifactId>
       <version>5.0.4version>
     dependency>
     <dependency>
       <groupId>com.alibabagroupId>
       <artifactId>druidartifactId>
       <version>1.1.20version>
     dependency>
     <dependency>
       <groupId>org.mybatis.spring.bootgroupId>
       <artifactId>mybatis-spring-boot-starterartifactId>
       <version>2.1.0version>
     dependency>
     <dependency>
       <groupId>ch.qos.logbackgroupId>
       <artifactId>logback-coreartifactId>
       <version>1.2.3version>
     dependency>
     <dependency>
       <groupId>junitgroupId>
       <artifactId>junitartifactId>
       <version>${junit.version}version>
       <scope>testscope>
     dependency>
     <dependency>
       <groupId>log4jgroupId>
       <artifactId>log4jartifactId>
       <version>${log4j.version}version>
     dependency>
   dependencies>
  dependencyManagement>
  
  
  <build>
   <finalName>microservicecloudfinalName>
   <resources>
     <resource> 
       <directory>src/main/resourcesdirectory>
       <filtering>truefiltering>
     resource>
   resources>
   <plugins>
     <plugin>
       <groupId>org.apache.maven.pluginsgroupId>
       <artifactId>maven-resources-pluginartifactId>
       <configuration>
         <delimiters>
          <delimit>$delimit>
         delimiters>
       configuration>
     plugin>
   plugins>
  build>
  <modules>
  	<module>microservicecloud-apimodule>
  	<module>microservicecloud-provider-dept-8001module>
  	<module>microservicecloud-consumer-dept-80module>
  modules>
project>

1.2、microservicecloud-api公共子模块Module

右击父工程microservicecloud新建maven module,Packageing是jar模式,创建完成后请回到父工程查看pom文件。

二、springcloud微服务测试环境搭建_第2张图片

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.0modelVersion>
  <parent>
  
    <groupId>com.jiatp.springcloudgroupId>
    <artifactId>microservicecloudartifactId>
    <version>0.0.1-SNAPSHOTversion>
  parent>
  
  <artifactId>microservicecloud-apiartifactId>
  <dependencies>
   <dependency>
     <groupId>org.projectlombokgroupId>
     <artifactId>lombokartifactId>
   dependency>
  dependencies>
project>

新建部门Entity且配合lombok使用

 
package com.atguigu.springcloud.entities;
 
import java.io.Serializable;
 
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
 
@SuppressWarnings("serial")
@NoArgsConstructor
@Data
@Accessors(chain=true)
public class Dept implements Serializable //必须序列化
{
  private Long  deptno;   //主键
  private String  dname;   //部门名称
  private String  db_source;//来自那个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库
  
  public Dept(String dname)
  {
   super();
   this.dname = dname;
  }
}


右键microservicecloud-api选择Run as ,先mvn clean 后maven install后给其它模块引用,达到通用目的。
也即需要用到部门实体的话,不用每个工程都定义一份,直接引用本模块即可。

1.3、microservicecloud-provider-dept-8001微服务提供者Module

1、新建microservicecloud-provider-dept-8001 提供者Module,同理

2、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.0modelVersion>
  <parent>
    <groupId>com.jiatp.springcloudgroupId>
    <artifactId>microservicecloudartifactId>
    <version>0.0.1-SNAPSHOTversion>
  parent>
  <artifactId>microservicecloud-provider-dept-8001artifactId>
  
  <dependencies>
   <dependency>
     <groupId>com.jiatp.springcloudgroupId>
     <artifactId>microservicecloud-apiartifactId>
     <version>${project.version}version>
   dependency>
   <dependency>
     <groupId>junitgroupId>
     <artifactId>junitartifactId>
   dependency>
   <dependency>
     <groupId>mysqlgroupId>
     <artifactId>mysql-connector-javaartifactId>
   dependency>
   <dependency>
     <groupId>com.alibabagroupId>
     <artifactId>druidartifactId>
   dependency>
   <dependency>
     <groupId>ch.qos.logbackgroupId>
     <artifactId>logback-coreartifactId>
   dependency>
   <dependency>
     <groupId>org.mybatis.spring.bootgroupId>
     <artifactId>mybatis-spring-boot-starterartifactId>
   dependency>
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-jettyartifactId>
   dependency>
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-webartifactId>
   dependency>
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-testartifactId>
   dependency>
   
   <dependency>
     <groupId>org.springframeworkgroupId>
     <artifactId>springloadedartifactId>
     <version>1.2.6.RELEASEversion>
   dependency>
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-devtoolsartifactId>
   dependency>
  dependencies>
project>


3、application.yml

server:
  port: 8001
  
mybatis:
  config-location: classpath:mybatis/mybatis.cfg.xml  # mybatis配置文件所在路径
  type-aliases-package: com.jiatp.springcloud.entity  # 扫描此包下的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        # 数据库驱动包
    url: jdbc:mysql://localhost:3306/cloudDB01?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT
    username: root
    password: 123456
    dbcp2:
      min-idle: 5                                     # 数据库连接池的最小维持连接数
      initial-size: 5                                 # 初始化连接数
      max-idle: 5                                     # 最大连接数

4、工程src/main/resources目录下新建mybatis文件夹后新建mybatis.cfg.xml文件



<configuration>
<settings>
    <setting name="cacheEnabled" value="true"/>
settings>
    configuration>

4、创建cloudDB01 数据库,新建dept表并且插入数据

5、编写DeptMapper接口

package com.jiatp.springcloud.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.jiatp.springcloud.entity.Dept;

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

6、工程src/main/resources/mybatis目录下新建mapper文件夹后再建DeptMapper.xml

注意:这里如果采用注解方式,可以直接在DeptMapper接口上直接写sql语句



<mapper namespace="com.jiatp.springcloud.dao.DeptDao">
 <select id="findById" resultType="Dept" parameterType="Long">
   select deptno,dname,db_source from dept where deptno=#{deptno}; 
  select>
  <select id="findAll" resultType="Dept">
   select deptno,dname,db_source from dept; 
  select>
  <insert id="addDept" parameterType="Dept">
   INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());
  insert>
mapper>

7、DeptService和DeptServiceImpl部门服务接口和实现类

package com.jiatp.springcloud.service;

import java.util.List;

import com.jiatp.springcloud.entity.Dept;

public interface DeptService {
	public boolean add(Dept dept);
	public Dept get(Long id);
	public List<Dept> list();
}
//---------------------------------------------
package com.jiatp.springcloud.service.impl;

import java.util.List;

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

import com.jiatp.springcloud.dao.DeptDao;
import com.jiatp.springcloud.entity.Dept;
import com.jiatp.springcloud.service.DeptService;

@Service
public class DeptServiceImpl implements DeptService{
	
	@Autowired
	private DeptDao deptdao;

	@Override
	public boolean add(Dept dept) {
		// TODO Auto-generated method stub
		return deptdao.addDept(dept);
	}

	@Override
	public Dept get(Long id) {
		// TODO Auto-generated method stub
		return deptdao.findById(id);
	}

	@Override
	public List<Dept> list() {
		// TODO Auto-generated method stub
		return deptdao.findAll();
	}

	
	
}

8、编写controller

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

9、编写DeptProvider8001_App主启动类

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

二、springcloud微服务测试环境搭建_第3张图片

测试:http://localhost:8001/dept/get/2

1.4、microservicecloud-consumer-dept-80部门微服务消费者Module

1、新建microservicecloud-consumer-dept-80,同理

2、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.0modelVersion>
  <parent>
    <groupId>com.jiatp.springcloudgroupId>
    <artifactId>microservicecloudartifactId>
    <version>0.0.1-SNAPSHOTversion>
  parent>
  <artifactId>microservicecloud-consumer-dept-80artifactId>
  <description>部门微服务消费者description>
  
  <dependencies>
   <dependency>
     <groupId>com.jiatp.springcloudgroupId>
     <artifactId>microservicecloud-apiartifactId>
     <version>${project.version}version>
   dependency> 
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-webartifactId>
   dependency>
   
  <dependency>
     <groupId>org.springframeworkgroupId>
     <artifactId>springloadedartifactId>
     <version>1.2.6.RELEASEversion>
   dependency>
   <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-devtoolsartifactId>
   dependency>
  dependencies>
project>

3、yml配置

server:
  port: 80

4、com.jiatp.springcloud包下ConfigBean的编写

类似spring里面的applicationContext.xml写入的注入Bean

@Configuration
public class ConfigBean {  //优化spring,从spring(applicationContext.xml)== @Configuration配置 
	
	@Bean
	@LoadBalanced    //开启负载均衡
    public RestTemplate restTemplate(){

        return new RestTemplate();
    }

RestTemplate提供了多种便捷访问远程Http服务的方法, 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集。 用法:使用restTemplate访问restful接口非常的简单粗暴无脑。
(url, requestMap, ResponseBean.class)这三个参数分别代表
REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

5、controller编写

@RestController
public class DeptController_Consumer
{
    private static final String REST_URL_PREFIX = "http://localhost:8001";
    
    @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()
    {
         return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
    }   
}
 
 

6、DeptConsumer80_App主启动类

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

测试:http://localhost/consumer/dept/list

你可能感兴趣的:(springcloud)