spring cloud之 微服务程序案例实现(一)

1.创建父工程

2.父工程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>

  <groupId>com.jiangjy.springcloud</groupId>

  <artifactId>springcloud-model</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.20</lombok.version>

      </properties>

 

      <dependencyManagement>

            <dependencies>

                  <dependency>

                       <groupId>org.springframework.cloud</groupId>

                       <artifactId>spring-cloud-dependencies</artifactId>

                       <version>Dalston.SR1</version>

                       <type>pom</type>

                       <scope>import</scope>

                  </dependency>

                  <dependency>

                       <groupId>org.springframework.boot</groupId>

                       <artifactId>spring-boot-dependencies</artifactId>

                       <version>1.5.9.RELEASE</version>

                       <type>pom</type>

                       <scope>import</scope>

                  </dependency>

                  <dependency>

                       <groupId>mysql</groupId>

                       <artifactId>mysql-connector-java</artifactId>

                       <version>5.1.38</version>

                  </dependency>

                  <dependency>

                       <groupId>com.alibaba</groupId>

                       <artifactId>druid</artifactId>

                       <version>1.0.31</version>

                  </dependency>

                  <dependency>

                       <groupId>org.mybatis.spring.boot</groupId>

                       <artifactId>mybatis-spring-boot-starter</artifactId>

                       <version>1.3.0</version>

                  </dependency>

                  <dependency>

                       <groupId>ch.qos.logback</groupId>

                       <artifactId>logback-core</artifactId>

                       <version>1.2.3</version>

                  </dependency>

                  <dependency>

                       <groupId>junit</groupId>

                       <artifactId>junit</artifactId>

                       <version>${junit.version}</version>

                       <scope>test</scope>

                  </dependency>

                  <dependency>

                       <groupId>log4j</groupId>

                       <artifactId>log4j</artifactId>

                       <version>${log4j.version}</version>

                  </dependency>

            </dependencies>

      </dependencyManagement>

 

</project>

3. springcloud-model-api公共子模块Module

约定 > 配置  >  编码

Maven Module 子模块

<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.jiangjy.springcloud</groupId>

    <artifactId>springcloud-model</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <!-- 当前Module我自己叫什么名字 -->

  <artifactId>springcloud-model-api</artifactId>

 

    <!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->

<dependencies>

    <dependency>

         <groupId>org.projectlombok</groupId>

         <artifactId>lombok</artifactId>

    </dependency>   

</dependencies>

</project>

新建部门pojo且配合lombok使用

package com.jiangjy.springcloud.pojo;

 

import java.io.Serializable;

 

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.experimental.Accessors;

 

@AllArgsConstructor//全部带参构造器

@NoArgsConstructor//无参构造器

@Data//getter  setter方法

@Accessors(chain=true)//链式结构

public class Dept implements Serializable{

    private static final long serialVersionUID = 1L;

    private Long deptno;//主键

    private String dname;//部门名称

    private String db_source;//来自哪个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同的数据库

    public Dept(String dname) {

         super();

         this.dname = dname;

    }

   

}

 

数据库表及数据

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `dept`
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` bigint(20) NOT NULL AUTO_INCREMENT,
  `dname` varchar(60) DEFAULT NULL,
  `db_source` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`deptno`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('1', '法务部', DATABASE());
INSERT INTO `dept` VALUES ('2', '开发部', DATABASE());
INSERT INTO `dept` VALUES ('3', '人事部', DATABASE());
INSERT INTO `dept` VALUES ('4', '财务部', DATABASE());
INSERT INTO `dept` VALUES ('5', '市场部', DATABASE());
INSERT INTO `dept` VALUES ('6', '运维部', DATABASE());
INSERT INTO `dept` VALUES ('7', '后勤部', DATABASE());


当前子项目右键-Run As-Maven clean

mvn clean install后给其它模块引用,达到通用目的。

也即需要用到部门实体的话,不用每个工程都定义一份,直接引用本模块即可。

4. springcloud-model-provider-dept-8001  部门微服务提供者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.jiangjy.springcloud</groupId>

          <artifactId>springcloud-model</artifactId>

          <version>0.0.1-SNAPSHOT</version>

     </parent>

    

     <artifactId>springcloud-model-provider-dept-8001</artifactId>

 

 

     <dependencies>

          <!-- 引入自己定义的api通用包,可以使用Dept部门pojo

          <version>${project.version}</version>灵活的版本

          -->

          <dependency>

               <groupId>com.jiangjy.springcloud</groupId>

               <artifactId>springcloud-model-api</artifactId>

               <version>${project.version}</version>

          </dependency>

          <!-- 测试 -->

          <dependency>

               <groupId>junit</groupId>

               <artifactId>junit</artifactId>

          </dependency>

          <!-- mysql驱动包 -->

          <dependency>

               <groupId>mysql</groupId>

               <artifactId>mysql-connector-java</artifactId>

          </dependency>

          <!-- 阿里数据源 -->

          <dependency>

               <groupId>com.alibaba</groupId>

               <artifactId>druid</artifactId>

          </dependency>

          <!-- 日志 -->

          <dependency>

               <groupId>ch.qos.logback</groupId>

               <artifactId>logback-core</artifactId>

          </dependency>

          <!-- mybatis-spring整合 -->

          <dependency>

               <groupId>org.mybatis.spring.boot</groupId>

               <artifactId>mybatis-spring-boot-starter</artifactId>

          </dependency>

          <!-- 内嵌的服务器容器 -->

          <dependency>

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-starter-jetty</artifactId>

          </dependency>

          <dependency>

               <groupId>org.springframework.boot</groupId>

               <artifactId>spring-boot-starter-web</artifactId>

          </dependency>

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

mybatis:

  config-location: classpath:mybatis/mybatis.cfg.xml   #mybatis配置文件所在路径

  type-aliases-package: com.jiangjy.springcloud.pojo    #所有pojo别名类所在包

  mapper-locations:

  - classpath:mybatis/mappers/*.xml    #mapper映射文件

 

#spring整合

spring:

  application:

    name: springcloud-model-dept   #项目对外暴露的访问名称

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型   

    driver-class-name: com.mysql.jdbc.Driver                # mysql驱动包 com.mysql.jdbc.Driver的前身是org.gjt.mm.mysql.Driver

                                                            现在主要用com.mysql.jdbc.Driver,但为了保持兼容性保留了org.gjt.mm.mysql.Driver这个路径的引用。

    url: jdbc:mysql://localhost:3306/springcloud01              # 数据库名称

    username: root

    password: root

    dbcp2:

      min-idle: 5                                           # 数据库连接池的最小维持连接数

      initial-size: 5                                       # 初始化连接数

      max-total: 5                                          # 最大连接数

      max-wait-millis: 200                                  # 等待连接获取的最大超时时间   

 

                                                      

Dao层

package com.jiangjy.springcloud.dao;

 

import java.util.List;

 

import org.apache.ibatis.annotations.Mapper;

 

import com.jiangjy.springcloud.pojo.Dept;

 

@Mapper

public interface DeptDao {

 

     //查询所有

     public List<Dept> findAll();

    

     //根据Id查询

     public Dept findById(Long id);

    

     //添加

     public boolean addDept(Dept dept);

}

 

Dao 的mapper

<?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.jiangjy.springcloud.dao.DeptDao">

 

     <select id="findAll" resultType="com.jiangjy.springcloud.pojo.Dept">

          select deptno,dname,db_source from dept

     </select>

 

     <select id="findById" resultType="com.jiangjy.springcloud.pojo.Dept">

          select deptno,dname,db_source from dept where deptno=#{deptno}

     </select>

 

     <insert id="addDept" parameterType="com.jiangjy.springcloud.pojo.Dept">

          INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE())

     </insert>

</mapper>

Service层

package com.jiangjy.springcloud.service;

 

import java.util.List;

 

import com.jiangjy.springcloud.pojo.Dept;

 

 

 

public interface DeptService {

 

     // 查询所有

     public List<Dept> getAll();

 

     // 根据Id查询

     public Dept getById(Long id);

 

     // 添加

     public boolean addDept(Dept dept);

}

 

Service  实现层impl

package com.jiangjy.springcloud.service.impl;

 

import java.util.List;

 

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

import org.springframework.stereotype.Service;

 

import com.jiangjy.springcloud.dao.DeptDao;

import com.jiangjy.springcloud.pojo.Dept;

import com.jiangjy.springcloud.service.DeptService;

 

@Service

public class DeptServiceImpl implements DeptService {

 

     @Autowired

     private DeptDao deptDao;

    

     @Override

     public List<Dept> getAll() {

         

          return deptDao.findAll();

     }

 

     @Override

     public Dept getById(Long id) {

         

          return deptDao.findById(id);

     }

 

     @Override

     public boolean addDept(Dept dept) {

          return deptDao.addDept(dept);

     }

 

}

 

Controller控制层

package com.jiangjy.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.PostMapping;

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.jiangjy.springcloud.pojo.Dept;

import com.jiangjy.springcloud.service.DeptService;

 

@RestController

public class DeptController {

 

     @Autowired

     private DeptService deptService;

    

     @RequestMapping(value="/dept/add",method = RequestMethod.POST)

     public boolean add(@RequestBody Dept dept) {

         

          return deptService.addDept(dept);

     }

    

     @RequestMapping(value="/dept/getById/{id}",method = RequestMethod.GET)

     public Dept getById(@PathVariable("id") Long id) {

         

          return deptService.getById(id);

     }

    

     @RequestMapping(value="/dept/getAll",method = RequestMethod.GET)

     public List<Dept> getAll() {

         

          return deptService.getAll();

     }

    

}

 

主启动类

package com.jiangjy.springcloud;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

@SpringBootApplication

public class DeptProvider8001_APP {

 

     public static void main(String[] args) {

 

          SpringApplication.run(DeptProvider8001_APP.class, args);

     }

}

 

代码启动

数据展示

5.springcloud-model-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.jiangjy.springcloud</groupId>

    <artifactId>springcloud-model</artifactId>

    <version>0.0.1-SNAPSHOT</version>

  </parent>

  <artifactId>springcloud-model-consumer-dept-80</artifactId>

  <description>部门微服务消费者</description>

 

  <dependencies>

          <dependency><!-- 自己定义的api -->

               <groupId>com.jiangjy.springcloud</groupId>

               <artifactId>springcloud-model-api</artifactId>

               <version>${project.version}</version>

          </dependency>

          <!-- Ribbon相关,详情见文档 -->

          <dependency>

               <groupId>org.springframework.cloud</groupId>

               <artifactId>spring-cloud-starter-eureka</artifactId>

          </dependency>

          <dependency>

               <groupId>org.springframework.cloud</groupId>

               <artifactId>spring-cloud-starter-ribbon</artifactId>

          </dependency>

          <dependency>

               <groupId>org.springframework.cloud</groupId>

               <artifactId>spring-cloud-starter-config</artifactId>

          </dependency>

          <dependency>

               <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

Ribbon详解 - 简书 https://www.jianshu.com/p/1bd66db5dc46

package com.jiangjy.springcloud.cfgbeans;

 

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.client.RestTemplate;

 

@Configuration

public class ConfigBean {

     /**

      * //boot -->spring   applicationContext.xml --- @Configuration配置   ConfigBean = applicationContext.xml

      * @return

      */

     @Bean

     public RestTemplate geRestTemplate() {

          return new RestTemplate();

     }

}

//@Bean

//public UserServcie getUserServcie()

//{

//   return new UserServcieImpl();

//}

//applicationContext.xml == ConfigBean(@Configuration)

//<bean id="userServcie" class="com.jiangjy.service.impl.UserServiceImpl">

消费者控制层

package com.jiangjy.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.jiangjy.springcloud.pojo.Dept;

 

@RestController

public class DeptController_Consumer {

    

     public static final String REST_URL_PREFIX = "http://localhost:8001";

     /**

      * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。

      *  (url, request, responseType)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

      */

     @Autowired

     private RestTemplate restTemplate;

    

     @RequestMapping("/consumer/dept/add")

     public boolean add(Dept dept) {

         

          return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);

     }

    

     @RequestMapping("/consumer/dept/getById/{id}")

     public Dept getById(@PathVariable("id") Long id) {

         

          return restTemplate.getForObject(REST_URL_PREFIX + "/dept/getById/"+ id, Dept.class);

     }

    

     @SuppressWarnings("unchecked")

     @RequestMapping("/consumer/dept/getAll")

     public List<Dept> getAll() {

         

          return restTemplate.getForObject(REST_URL_PREFIX + "/dept/getAll", List.class);

     }   

    

}

 

 

主启动类

package com.jiangjy.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);

     }

}

 

运行结果图:

基础的微服务底层程序到此已基本完成

发布了17 篇原创文章 · 获赞 42 · 访问量 9570

猜你喜欢

转载自blog.csdn.net/jiangjiaoyong/article/details/100688727
今日推荐