使用IDEA建立SpringBoot多模块工程不爽啊~算了凑合用吧。

第一步、建立一个POM工程

..Next

..一路next即可,中间啥也不选

第二步、建立Eureka服务器(这个玩意等同于玩Dubbo时候的Zookeeper)

在项目上右键--

..还是Springboot

..

..选择依赖

..一路next即可

修改application.properties

server.port=

# 不向注册中心注册自己
eureka.client.register-with-eureka=false
# 自己就是注册中心,职责是维护服务
eureka.client.fetch-registry=false
# 服务端实例名称
eureka.instance.hostname=localhost
#暴露的注册地址
eureka.client.service-url.defaultZone=http://localhost:8888/eureka

启动类添加注解

修改parent工程pom文件,也就是加一个module啦

    <modules>
<module>eureka-server</module>
</modules>

修改本工程pom文件,把parent换成你建立的cloud-parent,而cloud-parent已经依赖了 spring-boot-starter-parent

    <parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

接下来启动,先看一下注册中心的管控台http://localhost:8888/

什么都没有。等服务提供者出来就有了。

第三步、建立Common模块

..

..

..人家目录啥都没有,所以你得自己建

book类

package com.cloud.common.entity;

import lombok.Getter;
import lombok.Setter; import java.io.Serializable;
import java.util.Date; @Getter
@Setter
public class Book implements Serializable { private Long id;
private String bookName; // 书名
private String bookSize; // 开本
private String pack; // 包装
private String ISBN; // isbn
private String publisher; // 出版社
private Date publishTime; // 出版时间 }

BaseResponse

package com.cloud.common.response;

import lombok.Getter;
import lombok.Setter; import java.io.Serializable; @Getter
@Setter
public class BaseResponse<T> implements Serializable {
private int code;
private String desc;
private T data; public BaseResponse(int code, String desc) {
this.code = code;
this.desc = desc;
}
}

加入依赖:

    <dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

 第四步、建立服务提供者

..

..

..完成后打开pom文件,注意这个东西,这个东西在前面版本是不一样的

..

加入额外的依赖

        <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>

在dependencies的最后加入common的依赖

   <dependency>
<groupId>com.cloud</groupId>
<artifactId>cloud-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

把parent也改了

    <parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

然后去父模块增加一个module

现在是代码部分:

配置文件:

server.port=8080
# 服务名
spring.application.name=BookServiceProvider spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=GMT+8 mybatis.config-location=classpath:mybatis/mybatis.xml
mybatis.mapper-locations=classpath:mybatis/mapper/**/*.xml
mybatis.type-aliases-package=com.cloud.common.entity spring.datasource.url=jdbc:mysql://localhost:3306/cloud?useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.username=root
spring.datasource.password=1234 # 注册地址
eureka.client.service-url.defaultZone=http://localhost:8888/eureka
# 注册名
eureka.instance.instance-id=book-service-provider
eureka.instance.prefer-ip-address=true info.name: book-service-provider
info.version: v1.0

启动类加上两个注解

@EnableEurekaClient
@EnableDiscoveryClient

DAO

package com.cloud.bookserviceprovider.dao;

import com.cloud.common.entity.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import java.util.List; @Mapper
@Repository
public interface BookDAO { int addBook(Book book); Book getBookById(@Param("id") Long id); List<Book> getBooks();
}

Service

package com.cloud.bookserviceprovider.service;

import com.cloud.common.entity.Book;
import org.apache.ibatis.annotations.Param; import java.util.List; public interface BookService { int addBook(Book book); Book getBookById(@Param("id") Long id); List<Book> getBooks();
}

impl

package com.cloud.bookserviceprovider.service.impl;

import com.cloud.bookserviceprovider.dao.BookDAO;
import com.cloud.bookserviceprovider.service.BookService;
import com.cloud.common.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class BookServiceImpl implements BookService { @Autowired
private BookDAO bookDAO; @Override
public int addBook(Book book) {
return bookDAO.addBook(book);
} @Override
public Book getBookById(Long id) {
return bookDAO.getBookById(id);
} @Override
public List<Book> getBooks() {
return bookDAO.getBooks();
}
}

..BookDAOMapper.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.cloud.bookserviceprovider.dao.BookDAO"> <insert id="addBook" parameterType="Book">
INSERT INTO book(bookName,bookSize,pack,isbn,publisher,publishTime)
VALUES(#{bookName},#{bookSize},#{pack},#{ISBN},#{publisher},#{publishTime})
</insert> <select id="getBooks" resultType="Book">
select * from book
</select> <select id="getBookById" resultType="Book">
select * from book where id=#{id}
</select> </mapper>

mybatis.xml

<?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="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>

BookController

package com.cloud.bookserviceprovider.controller;

import com.alibaba.fastjson.JSONObject;
import com.cloud.bookserviceprovider.service.BookService;
import com.cloud.common.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
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.RestController; import java.util.List; @RestController
@RequestMapping("/book")
public class BookController { @Autowired
private BookService bookService; @Autowired
private DiscoveryClient discoveryClient; @RequestMapping("/discovery")
public Object discovery(){
List<String> services = discoveryClient.getServices();
services.forEach(e -> System.err.println(e));
List<ServiceInstance> list = discoveryClient.getInstances("BOOKSERVICEPROVIDER");
list.forEach(e -> {
System.out.println(e.getServiceId() + "," + e.getHost() + "," + e.getPort() + "," + e.getUri());
});
return this.discoveryClient;
} @RequestMapping("/add")
public int addBook(@RequestBody Book book){
return bookService.addBook(book);
} @RequestMapping("/get/{id}")
public Book getBookById(@PathVariable("id") Long id){
return bookService.getBookById(id);
} @RequestMapping("/getAll")
public String getBooks(){
return JSONObject.toJSONString(bookService.getBooks());
}
}

数据库脚本

CREATE TABLE `book` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`bookName` varchar(55) NOT NULL,
`bookSize` varchar(10) NOT NULL,
`pack` varchar(10) NOT NULL,
`isbn` varchar(55) NOT NULL,
`publisher` varchar(55) NOT NULL,
`publishTime` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

整体目录:

现在呢,先启动注册中心,再启动服务提供者,打开管理界面,出现了一个服务

你点击,会出现

这就是application.properties配置的info信息。

第五步、建立服务消费者

..

..

修改pom文件(其实跟提供者类似)

把parent改成

    <parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

加入common依赖

        <dependency>
<groupId>com.cloud</groupId>
<artifactId>cloud-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

父工程pom,添加module

application.properties

server.port=8081

# 注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8888/eureka
# 不向注册中心注册自己
eureka.client.register-with-eureka=false

配置类

package com.cloud.bookserviceconsumer.conf;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; @Configuration
public class ConsumerConfig { @Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

controller

package com.cloud.bookserviceconsumer.controller;

import com.cloud.common.entity.Book;
import com.cloud.common.response.BaseResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
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.RestController;
import org.springframework.web.client.RestTemplate; @RestController
@RequestMapping("/consume/book")
public class BookController { private static final String URL = "http://localhost:8080"; @Autowired
private RestTemplate restTemplate; @RequestMapping("/add")
public BaseResponse<Integer> addBook(@RequestBody Book book){
Integer integer = restTemplate.postForObject(URL + "/book/add", book, Integer.class);
BaseResponse<Integer> response = new BaseResponse<>(0,"Success");
response.setData(integer);
return response;
} @RequestMapping("/get/{id}")
public ResponseEntity<Book> getBookById(@PathVariable("id") Long id){
return restTemplate.getForEntity(URL + "/book/get/" + id,Book.class);
} @RequestMapping("/getAll")
public String getBooks(){
String s = restTemplate.getForObject(URL + "/book/getAll", String.class);
return s;
}
}

最后访问

给你个示例json

{
"bookName": "Apache Kafka实战",
"bookSize": "16开",
"pack": "平装",
"isbn": "9787121337765",
"publisher": "电子工业出版社",
"publishTime": "2018-05-01"
}

添加操作

查询操作

最后展示一下服务发现(感觉很鸡肋),就是读取现有的服务名称

GitHub

SpringCloud第一弹(入门)的更多相关文章

  1. Hadoop基础-MapReduce的工作原理第一弹

    Hadoop基础-MapReduce的工作原理第一弹 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在本篇博客中,我们将深入学习Hadoop中的MapReduce工作机制,这些知识 ...

  2. [Git] 002 初识 Git 与 GitHub 之加入文件 第一弹

    在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第一弹 1. 点击右上方的 Create new file 2. 在左上方填入文件名,若有后缀,记得加上 3. 页面跳转,此时已有两个文件 ...

  3. Spring Boot 第一弹,问候一下世界!!!

    持续原创输出,点击上方蓝字关注我吧 目录 前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? ...

  4. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

  5. Python第一天——入门Python(1)数据定义

    数据类型: 什么是数据? 在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字字母.符号和模拟量等的统称.现在计算机存储和处 ...

  6. .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来,首先,请允许我长吸一口气!真没想到一份来自28岁老程序员 ...

  7. 我的长大app开发教程第一弹:Fragment布局

    在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...

  8. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第一章 入门篇-开篇及总体规划

    .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划   原文地址:https://www.cnblogs.com/yilezhu/p/9977862.html 写在前面 千呼万唤始出来 ...

  9. 第一篇 入门必备 (Android学习笔记)

    第一篇 入门必备 第1章 初识Android 第2章 搭建你的开发环境 第3章 创建第一个程序--HelloWorld 第4章 使用Android工具   ●Android之父 Android安迪·罗 ...

随机推荐

  1. python数学第八天【协方差】

  2. 如何使用命令从linux服务器下载文件到windows

    1.直接使用命令从linux下载文件到windows //登录linux服务器导出mysql数据 mysqldump -hrm-2ze8mpi5i65429l1q.mysql.rds.aliyuncs ...

  3. adoquery怎样判断数据在缓存中有修改啊

    ADOQry.Filtered:=false;       ADOQry.Filtered:=true;       ADOQry.FilterGroup:=fgPendingRecords ;Fil ...

  4. linux网络配置+远程工具使用

    ifconfig 网卡名 ip地址 就可以设定ip地址 只是临时改变ip地址,重启后会失效 secure crt  更改语言,用gb 和 utf8 两处修改

  5. Stack Pointer Tracker

    在Intel 64与IA-32架构中,存在一类用于跳转到以及跳出程序段的指令:PUSH.POP.CALL.LEAVE与RET.这些指令可以在没有其余指令的干预下隐式地更新栈寄存器(ESP),维护栈内的 ...

  6. linux中安装gcc

    在使用CentOS的yum -y install  时 可以先进入  /etc/yum.repos.d/ 文件下,将CentOS-Base.repo文件名改为CentOS-Base.repo.bak使 ...

  7. BZOJ1319Sgu261Discrete Roots——BSGS+exgcd+原根与指标+欧拉定理

    题目描述 给出三个整数p,k,a,其中p为质数,求出所有满足x^k=a (mod p),0<=x<=p-1的x. 输入 三个整数p,k,a. 输出 第一行一个整数,表示符合条件的x的个数. ...

  8. 【BZOJ3992】【SDOI2015】序列统计 原根 NTT

    题目大意 有一个集合\(s\),里面的每个数都\(\geq0\)且\(<m\). 问有多少个长度为\(n\)的数列满足这个数列所有数的乘积模\(m\)为\(x\).答案模\(1004535809 ...

  9. hihocoder#1333 : 平衡树·Splay2 (区间操作)

    题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...

  10. Nginx 网站域名80 反向代理并且重定向到 tomcat 8080 网站固定页

    配置 server { listen 80 default_server; listen [::]:80 default_server; server_name :127.0.0.1:8080; 反向 ...