项目学习第一天SpringBoot+SpringCloud+SpringMVC+SpringData架构
正文开始前有话要说
各位大佬们好,因为之前有过很多的学习都没能一一记录下来,非常的可惜,所以打算从今天开始在这里记录我找工作前的一些学习过程,希望大家能够多多批评与指正,谢谢大家啦。
系统设计和工程搭建
1.了解项目的需求分析;
2 .理解项目的系统设计以及RESTful ;
3. 配置JDK 与 本地仓库 ;
4.完成项目父模块与公共模块的搭建 。
后端架构为:
SpringBoot+SpringCloud+SpringMVC+SpringData
采用的分库分表设计,每个业务模块为1个独立的数据库
前后端约定的返回码列表:
状态描述 | 返回码 |
---|---|
成功 | 20000 |
失败 | 20001 |
用户名密码错误 | 20002 |
权限不足 | 20003 |
远程调用失败 | 20004 |
重复操作 | 20005 |
在项目中用到了GET/POST/PUT/DELETE四种方法,学习到了一些状态码的概念:
get | 安全且幂等 |
---|---|
200(OK) | 表示已在响应中发出 |
404 (not found) | 资源不存在 |
500 (internal server error) | 通用错误响应 |
开发环境要求
JDK1.8
数据库mysql 5.7
开发工具 idea 2017.1.2
maven版本3.3.9 docker 新版本
centos7
VMware Workstation Pro 12
MYSQL建库建表(容器)
mysql使用的是docker环境
(1)下载镜像
docker pull centos/mysql‐57‐centos7
(2)创建容器
docker run ‐di ‐‐name=tensquare_mysql ‐p 3306:3306 ‐e MYSQL_ROOT_PASSWORD=123456 centos/mysql‐57‐centos7
(3)Navicat连接MYSQL
搭建父工程
1.构建maven项目
2.pom.xml 添加配置
<packaging>pom</packaging>
<name>tensquare_parent</name>
<description>十次方项目-黑马程序员</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<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>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
搭建子模块,分布式ID生成
snowflake (雪花)算法,编写工具类IdWorker.java
基础微服务搭建
pom.xml引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐data‐jpa</artifactId> </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‐connector‐java</artifactId> </dependency>
<dependency>
<groupId>com.tensquare</groupId> <artifactId>tensquare_common</artifactId>
<version>1.0‐SNAPSHOT</version>
</dependency>
创建启动类
package com.tensquare.base;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import util.IdWorker;
@SpringBootApplication
@EnableEurekaClient
public class BaseApplication {
public static void main(String[] args) {
SpringApplication.run(BaseApplication.class,args);
}
@Bean
public IdWorker idWorker(){
return new IdWorker(1,1);
}
}
创建application.yml
server:
port: 9001
spring:
application:
name: tensquare-base
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.66.128:3306/tensquare_base?characterEncoding=utf-8&useSSL=false
username: root
password: root
jpa:
database: mysql
show-sql: true
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:6868/eureka/
instance:
prefer-ip-address: true