docker微服务部署之:一,搭建Eureka微服务项目

一、新增demo_article模块,并编写代码

右键demo_parent->new->Module->Maven,选择Module SK为jdk8->ArtifactId:demo_article

1.修改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>demo_parent</artifactId>
<groupId>com.demo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>demo_article</artifactId> <dependencies>
     <!-- jpa依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
     <!-- mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
     <!-- eureka客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>

2.在resources目录下新增application.yml文件

server:
port: 9001 #article启动端口,可自定义
spring:
application:
name: demo-article #article项目名称,可自定义
datasource:
url: jdbc:mysql://192.168.31.181:3306/docker?characterEncoding=UTF8 #192.168.31.181为虚拟机宿主机的ip地址,mysql是安装在docker容器里。详见:Centos7下安装DockerDocker安装Mysql
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
jpa:
database: mysql
show-sql: true
generate-ddl: false
eureka:
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://192.168.31.181:7000/eureka #在IDEA中运行时使用127.0.0.1,部署发布时,请修改为虚拟机宿主机的ip地址
instance:
prefer-ip-address: true

3.新建com.demo.article包,并在该包下新建启动类ArticleApplication

package com.demo.article;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
* 文章微服务
*/
// 标注为一个spring boot项目
@SpringBootApplication
// 标注为一个eureka客户端
@EnableEurekaClient
public class ArticleApplication {
public static void main(String[] args) {
SpringApplication.run(ArticleApplication.class, args);
}
}

4.编写pojo类

package com.demo.article.pojo;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date; @Entity
@Table(name = "tb_article")
@Data //使用该注解,相当于自动生成了getter和setter方法
public class Article implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) #id自增
private Integer id;
private String title;
private String content;
private String author;
private Date addTime;
}

5.编写dao类

package com.demo.article.dao;

import com.demo.article.pojo.Article;
import org.springframework.data.jpa.repository.JpaRepository; public interface ArticleDao extends JpaRepository<Article,Integer> { }

6.编写service类

package com.demo.article.service;

import com.demo.article.pojo.Article;

import java.util.List;

public interface ArticleService {
List<Article> findAll(); Article findById(Integer id); void add(Article article); void updae(Article article); void deleteById(Integer id);
}
package com.demo.article.service.impl;

import com.demo.article.dao.ArticleDao;
import com.demo.article.pojo.Article;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
ArticleDao articleDao; @Override
public List<Article> findAll() {
return articleDao.findAll();
} @Override
public Article findById(Integer id) {
return articleDao.findById(id).get();
} @Override
public void add(Article article) {
articleDao.save(article);
} @Override
public void updae(Article article) {
articleDao.save(article);
} @Override
public void deleteById(Integer id) {
articleDao.deleteById(id);
}
}

7.编写vo类

package com.demo.article.vo;

import lombok.Data;

import java.io.Serializable;

/**
* 统一返回数据实体类
*/
@Data
public class Result implements Serializable {
private Boolean flag;//是否成功
private String message;//消息
private Object data;//返回数据 public Result(Boolean flag, String message) {
this.flag = flag;
this.message = message;
} public Result(Boolean flag, String message, Object data) {
this.flag = flag;
this.message = message;
this.data = data;
}
}

8.编写controller类

package com.demo.article.controller;

import com.demo.article.pojo.Article;
import com.demo.article.service.ArticleService;
import com.demo.article.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/article")
public class ArticleController {
@Autowired
ArticleService articleService; @RequestMapping(method = RequestMethod.GET)
public Result findAll(){
return new Result(true, "查询成功", articleService.findAll());
} @RequestMapping(value = "/{id}",method = RequestMethod.GET)
public Result findById(@PathVariable Integer id) {
return new Result(true, "查询成功", articleService.findById(id));
} @RequestMapping(method = RequestMethod.POST)
public Result add(@RequestBody Article article) {
articleService.add(article);
return new Result(true, "添加成功");
} @RequestMapping(value = "/{id}",method = RequestMethod.PUT)
public Result update(@RequestBody Article article, @PathVariable("id") Integer id) {
article.setId(id);
articleService.updae(article);
return new Result(true,"修改成功");
} @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public Result deleteById(@PathVariable("id") Integer id) {
articleService.deleteById(id);
return new Result(true, "删除成功");
}
}

9.数据库sql脚本

先创建数据库docker,字符集utf8,排序规则utf8-general_ci

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for tb_article
-- ----------------------------
DROP TABLE IF EXISTS `tb_article`;
CREATE TABLE `tb_article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`author` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`add_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

10.运行ArticleApplication启动类

刷新eureka界面,可以看到有一个名为DEMO-ARTICLE的服务已经注册上来了

11.使用Postman进行CRUD测试

11.1 测试add方法

11.2 测试findAll方法

11.3 测试udpate方法

11.4 测试findById方法

11.5 测试delete方法

 docker微服务部署之:三,搭建Zuul微服务项目

docker微服务部署之:二、搭建文章微服务项目的更多相关文章

  1. 微服务理论之二:面向微服务架构与传统架构、SOA对比,以及云化对比

    一.Monolith 网上对Microservice进行介绍的文章常常以Monolith作为开头,我也不会例外.原因是,知道了Monolith的不便之后才能更容易地理解Microservice架构模式 ...

  2. 自动化服务部署(二):Linux下安装jenkins

    jenkins是一个Java开发的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能,它的运行需要Java环境. 上篇博客介绍了Linux下安装JDK的步骤,这篇博客,介绍下Linu ...

  3. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  4. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  5. 微服务实战(六):选择微服务部署策略 - DockOne.io

    原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...

  6. 服务部署到Swarm Cluster中

    对于已存在的镜像,将其部署到服务器中并开始对外服务,便是它的职责,而我们要做的便是帮助它完成职责,前两个应用环节都已产生了相应的镜像,在这一环节,将完成服务部署到容器集群的工作,对于这一过程,实际执行 ...

  7. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  8. 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借助TopSelf、服务类】)

    一. IIS部署 比如在MVC框架中集成了Quartz.Net定时调度,此时该调度系统会随着MVC框架被挂在IIS下,IIS会进程回收,所以大部分开发都会遇到Quartz挂在IIS下一段时间不好用. ...

  9. WCF系列教程之WCF服务宿主与WCF服务部署

    本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...

随机推荐

  1. OPENSSL 生成https 客户端证书

    下面说下拿服务器证书.(前提是服务器是https,客户端认证用的时候),服务端不给的时候,我们自己去拿(不给怼他!,哈哈,开个玩笑,都会给的) openssl s_client -connect 域名 ...

  2. Eclipse自动补全修改

    一.前言 之前敲代码用的是文本工具sublime,转到Eclipse之后发现补全功能特别不方便,所以想根据自己的情况进行调整,具体有两点: 输入某些语句的前几个字母就能自动提示相关的完整语句 用tab ...

  3. JavaScript stringObject.replace() 方法

    定义和用法: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法: stringObject.replace(RegExp/substr,reol ...

  4. cocos2dx中使用tolua++使lua调用c++函数

    一直想学学cocos2dx中如何使用tolua++工具使得lua脚本调用C++函数,今天就来搞一下,顺便记录下来: 首先,我们打开cocos2dx-2.2.4中projects下的test的VS工程, ...

  5. 2018年3大UI设计趋势,你知道吗?

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 之前小编已经和大家讨论了2018年软件测试的五大趋势,现在让我们一起来看看移动UI设计在2018年会 ...

  6. 479. Largest Palindrome Product

    class Solution { public: int largestPalindrome(int n) { vector<,,,,,,,}; ]; } }; 这里的穷举法,你不得不服

  7. serialVersionUID的作用以及IDEA、Eclipse如何自动生成serialVersionUID

    说到serialVersionUID,首先要讲讲序列化. 序列化: 序列化可以将一个java对象以二进制流的方式在网络中传输并且可以被持久化到数据库.文件系统中,反序列化则是可以把之前持久化在数据库或 ...

  8. zTree的简单使用

    理论可以看:http://www.cnblogs.com/shinhwazt/p/5828031.html zTree包:链接:http://pan.baidu.com/s/1eR4xP6M 密码:w ...

  9. CSS—— em的详解

    字体大小在浏览器的默认样式表中有规定.一般采用em为单位,也就是相对单位,1em=16像素. 同时,像P h1等等标签都采用浏览器默认的em单位,P为1em,h1为2em等等. 两条重要的规则: 1. ...

  10. NAOQI API之学习笔记

    https://www.jianshu.com/p/e84f38e45bf5 NAOQI OS是软银pepper和nao机器人的核心操作系统,NAOQI API提供了访问机器人的各种传感器设备接口以及 ...