springcloud项目实例分享

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,那我们今天就给大家讲解一下有关springcloud项目实例。

本次实战以Springboot+maven为基础进行快速配置,采用分布式微服务架构下的一站式解决方案Spring Cloud,集成组件Eureka+Config+Zuul+Feign/Ribbon+Hystrix+RabbitMQ+Redis+Sleuth+ZipKin。

开发环境:JDK1.8+MySQL5.7 + IDEA

项目模块主要有:api-gateway(网关),client(客户端),config(配置中心),erurka(服务注册与发现中心),order(订单模块),product(商品模块),user(用户模块)

项目包结构:

springcloud项目实例分享.png

搭建服务注册中心(eureka)

创建一个基础的springboot工程,命名为eureka,并在pom.xml中引入相关依赖

<dependencies >
    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> <
    /dependencies> <
    dependencyManagement >
    <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies> <
    /dependencyManagement>

通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行注册,通过springboot工程一键部署和启动

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

application.yml配置如下,在默认配置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们可以选择禁用它的客户端注册行为,即 eureka.client.register-with-eureka: false

eureka:
    client:
    service - url:
    defaultZone: http: //localhost:8761/eureka/
    register - with - eureka: false
server:
    enable - self - preservation: false
spring:
    application:
    name: eureka
server:
    port: 8761

在完成如上配置后,启动工程,访问 http://localhost:8761/ ,显示eureka注册中心面板如下

1.png

注册服务提供者(client)

完成了注册中心的搭建,尝试将一个springboot应用注册到eureka的服务治理体系中去,搭建一个springboot应用并加入如下依赖

<dependencies >
    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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> <
scope > test < /scope> < /
    dependency > <
    /dependencies> <
    dependencyManagement >
    <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies> <
    /dependencyManagement>

client端配置文件如下:

eureka:
    client:
    service - url:
    defaultZone: http: //localhost:8761/eureka/,http://localhost:8762/eureka/
    #instance: #hostname: clientName
spring:
    application:
    name: client
server:
    port: 8081

通过@EnableEurekaClient注解启动一个eureka客户端,提供服务,进行服务注册,@EnableEurekaClient本身就是用@EnableDiscoveryClient来实现的

/**启动类
*
* @author jiayuan9608@163.com
* 2018-10-02 15:05
* @version 1.0.0
*/
@SpringBootApplication
@EnableEurekaClient
public class ClientApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(ClientApplication.class, args);
    }
}

在eureka注册中心页面刷新,此时client已经将服务注册到eureka上

2.png

统一配置中心(config)

创建一个springboot应用,pom.xml依赖以上面客户端相同,同样将自己作为一个客户端服务,也是要注册到eureka中去的,application.yml配置文件如下,将远程Git地址和账号密码配置到文件中去,用于向远程文件拉取相关配置。注意,配置中心拉取的配置会与本地已有配置进行合并,若相同则覆盖。

spring:
    application:
    name: config
cloud:
    config:
    server:
    git:
    uri: https: //gitee.com/jiayuan1234/config-repo
    username: 2352840798 @qq.com
password: ** ** ** ** **
    basedir: D: \MyData\ workspace\ IDEA\ SpringCloud_Sell\ config\ basedir
eureka:
    client:
    service - url:
    defaultZone: http: //localhost:8761/eureka/
    management:
    endpoints:
    web:
    exposure:
    include: "*"
server:
    port: 8082

远程Git配置文件

3.png

启动config项目,获取配置文件内容

4.png

数据库表结构:

--类目
create table `product_category`(
    `category_id`
    int not null auto_increment
    , `category_name`
    varchar(64) not null comment '类目名字'
    , `category_type`
    int not null comment '类目编号'
    , `create_time`
    timestamp not null
    default current_timestamp comment '创建时间'
    , `update_time`
    timestamp not null
    default current_timestamp on update current_timestamp comment '修改时间'
    , primary key(`category_id`)
    , unique key `uqe_category_type`(`category_type`)
);
INSERT INTO `product_category`(`category_id`, `category_name`, `category_type`, `create_time`, `update_time`)
VALUES
    (1, '热榜', 11, '2017-03-28 16:40:22', '2017-11-26 23:39:36')
    , (2, '好吃的', 22, '2017-03-14 17:38:46', '2017-11-26 23:39:40');
--商品
create table `product_info`(
    `product_id`
    varchar(32) not null
    , `product_name`
    varchar(64) not null comment '商品名称'
    , `product_price`
    decimal(8, 2) not null comment '单价'
    , `product_stock`
    int not null comment '库存'
    , `product_description`
    varchar(64) comment '描述'
    , `product_icon`
    varchar(512) comment '小图'
    , `product_status`
    tinyint(3) DEFAULT '0'
    COMMENT '商品状态,0正常1下架'
    , `category_type`
    int not null comment '类目编号'
    , `create_time`
    timestamp not null
    default current_timestamp comment '创建时间'
    , `update_time`
    timestamp not null
    default current_timestamp on update current_timestamp comment '修改时间'
    , primary key(`product_id`)
);
INSERT INTO `product_info`(`product_id`, `product_name`, `product_price`, `product_stock`, `product_description`, `product_icon`, `product_status`, `category_type`, `create_time`, `update_time`)
VALUES
    ('157875196366160022', '皮蛋粥', 0.01, 39, '好吃的皮蛋粥', '//fuss10.elemecdn.com/0/49/65d10ef215d3c770ebb2b5ea962a7jpeg.jpeg', 0, 1, '2017-03-28 19:39:15', '2017-07-02 11:45:44')
    , ('157875227953464068', '慕斯蛋糕', 10.90, 200, '美味爽口', '//fuss10.elemecdn.com/9/93/91994e8456818dfe7b0bd95f10a50jpeg.jpeg', 1, 1, '2017-03-28 19:35:54', '2017-04-21 10:05:57')
    , ('164103465734242707', '蜜汁鸡翅', 0.02, 982, '好吃', '//fuss10.elemecdn.com/7/4a/f307f56216b03f067155aec8b124ejpeg.jpeg', 0, 1, '2017-03-30 17:11:56', '2017-06-24 19:20:54');
--订单
create table `order_master`(
    `order_id`
    varchar(32) not null
    , `buyer_name`
    varchar(32) not null comment '买家名字'
    , `buyer_phone`
    varchar(32) not null comment '买家电话'
    , `buyer_address`
    varchar(128) not null comment '买家地址'
    , `buyer_openid`
    varchar(64) not null comment '买家微信openid'
    , `order_amount`
    decimal(8, 2) not null comment '订单总金额'
    , `order_status`
    tinyint(3) not null
    default '0'
    comment '订单状态, 默认为新下单'
    , `pay_status`
    tinyint(3) not null
    default '0'
    comment '支付状态, 默认未支付'
    , `create_time`
    timestamp not null
    default current_timestamp comment '创建时间'
    , `update_time`
    timestamp not null
    default current_timestamp on update current_timestamp comment '修改时间'
    , primary key(`order_id`)
    , key `idx_buyer_openid`(`buyer_openid`)
);
--订单商品
create table `order_detail`(
    `detail_id`
    varchar(32) not null
    , `order_id`
    varchar(32) not null
    , `product_id`
    varchar(32) not null
    , `product_name`
    varchar(64) not null comment '商品名称'
    , `product_price`
    decimal(8, 2) not null comment '当前价格,单位分'
    , `product_quantity`
    int not null comment '数量'
    , `product_icon`
    varchar(512) comment '小图'
    , `create_time`
    timestamp not null
    default current_timestamp comment '创建时间'
    , `update_time`
    timestamp not null
    default current_timestamp on update current_timestamp comment '修改时间'
    , primary key(`detail_id`)
    , key `idx_order_id`(`order_id`)
);
--用户
CREATE TABLE `user_info`(
    `id`
    varchar(32) NOT NULL
    , `username`
    varchar(32) DEFAULT ''
    , `password`
    varchar(32) DEFAULT ''
    , `openid`
    varchar(64) DEFAULT ''
    COMMENT '微信openid'
    , `role`
    tinyint(1) NOT NULL COMMENT '1买家2卖家'
    , `create_time`
    timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
    , `update_time`
    timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
    , PRIMARY KEY(`id`)
);

基于Spring Cloud项目实战,干货很多。希望开发人员在平时一定要多加研究,提高自己的能力,为未来发展做基础!最后大家如果想要了解更多java实例知识,敬请关注奇Q工具网。

推荐阅读:

java运行结果窗口怎样在下面显示?

Ultraedit怎么使用?Ultraedit有哪些功能?

java如何做可视化界面?实例介绍