环境搭建
资料:云盘连接 提取码:sb1m
拿到资料后,把里面虚拟机进行解压,然后用VMware虚拟机软件打开Centos-changgou.vmx,
然后打开,用户名:root,密码:123456。
里面后期用到的环境都已经安装好了,不需要我们浪费时间搭建环境。
接下来需要打开VMware-编辑-虚拟网络配置 打开NAT设置
然后点击NAT设置,修改IP
接下来在CentOS终端中输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33
reboot重启虚拟机,然后就可以通过ssh工具对其进行连接,ip是192.168.1.99密码123456
然后进入mysql容器
docker exec -it mysql /bin/bash
重置mysql密码
首先打开配置文件的命令
vi /etc/mysql/my.cnf
在最后添加
[mysqld]
skip-grant-tables
重启msyql
docker restart mysql
再次登录
mysql -uroot -p
设置root密码为空
use mysql;
select user,authentication_string,host from user;
更新为空
update user set authentication_string='' where user='root';
flush privileges;
退出mysql,再次执行vi /etc/mysql/my.cnf,把之前添加的内容删掉,保存。
使用root登录
mysql -u root
修改密码为root
alter user 'root'@'localhost' IDENTIFIED BY 'root';
alter user 'root'@'%' IDENTIFIED BY 'root';
flush privileges;
这时你的mysql登录密码就可以使用root登录了。
navicat连接数据库
连接成功之后就可以看到若干数据表,查看er图我们可以发现,表与表之间并没有关联关系。
在我们平时做项目时,标语表之间都要遵循三范式,但是我们做大型项目的时候,不推荐三范式而推荐反三范式,建议不要创建外键,原因就是导致增删改的速度会变慢。
工程搭建
父工程搭建
先在一个目录下创建一个空的文件夹,我这里命名为changgou
然后通过idea打开这个目录,在里面创建一个模块,选择mevan
然后finish,在pom文件中添加以下内容
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<skipTests>true</skipTests>
</properties>
<!--依赖包-->
<dependencies>
<!--测试包-->
<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>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二级夫工程搭建
创建changgou_gateway、changgou_service、changgou_service_api、
changgou_web工程,工程全部为pom工程,并将所有工程的src文件删除。
这里只有这几个都要打pom包,其余一律打jar包。
1.创建changgou_gateway
pom.xml如图
2.创建changgou_service
pom.xml如图
3.创建changgou_service_api
4.创建changgou_web
项目整体结构如图
到此我们微服务的结构就已经搭建完成
注册中心搭建
Eureka微服务搭建
1.创建模块changgou_eureka
导入pom.xml相关依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
这个eureka在装的时候也会莫名奇妙的出现包导不进去的情况,很恶心的。
在这里不行的话就加一个版本<version>2.1.1.RELEASE</version>
然后在resources目录下创建application.yml
server:
port: 6868
eureka:
client:
register‐with‐eureka: false #是否将自己注册到eureka中
fetch‐registry: false #是否从eureka中获取信息
service‐url:
defaultZone: http://127.0.0.1:${server.port}/eureka/
spring:
application:
name: eureka
2.创建启动类
然后运行
看控制台告诉我们端口
然后打开浏览器访问这个端口:输入localhost:6868,页面大致就这个样子
这里也告诉我们没有任何服务注册
到此为止,我们的注册中心已经搭建了。
搭建公共模块
pom.xml依赖
创建公共模块chaunggou-common,pom.xml引入依赖。将’资源/common_entity’下
的相关资源导入工程
<dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- redis 使用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--微信支付-->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
<!--httpclient支持-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
</dependencies>
这里还是那句话,如果springcloud启动依赖没有导进去,就添加<version>2.1.1.RELEASE</version>
创建com.changgou.entity包 ,包下封装相关公共实体类。
package com.changgou.entity;
/**
* 返回结果实体类
*/
public class Result<T> {
private boolean flag;//是否成功
private Integer code;//返回码
private String message;//返回消息
private T data;//返回数据
public Result(boolean flag, Integer code, String message, Object
data) {
this.flag = flag;
this.code = code;
this.message = message;
this.data = (T)data;
}
public Result(boolean flag, Integer code, String message) {
this.flag = flag;
this.code = code;
this.message = message;
}
public Result() {
this.flag = true;
this.code = StatusCode.OK;
this.message = "执行成功";
}
//getter and setter..
}
package com.changgou.entity;
import java.util.List;
/**
* 分页结果类
*/
public class PageResult<T> {
private Long total;//总记录数
private List<T> rows;//记录
public PageResult(Long total, List<T> rows) {
this.total = total;
this.rows = rows;
}
public PageResult() {
}
//getter and setter ......
}
package com.changgou.entity;
/**
* 返回码
*/
public class StatusCode {
public static final int OK=20000;//成功
public static final int ERROR =20001;//失败
public static final int LOGINERROR =20002;//用户名或密码错误
public static final int ACCESSERROR =20003;//权限不足
public static final int REMOTEERROR =20004;//远程调用失败
public static final int REPERROR =20005;//重复操作
}