开发模型:
以微服务划分。
接口是解耦和的,现在是每个服务是独立的了,就没必要写接口了。
访问地址:http://localhost:9001/label
---------------------------------------------01----------------------02--------------------------------------------
UML建模:
powerdesigner:架构师设计数据库的工具。用来谈业务的。
UML建模语言。
-------------------------------------------------------03-----------------------------------------------------------
项目说明:
模块的划分:
common:是公用的。
我们看下这个公共模块的代码:
第一个实体类:PageResult:
第二个实体类:Result:
第三个实体类:StatusCode:
本机的swagger看接口:
-----------------------------------------------------------------------------------04-----------------------------------------------------------------------------------
Restful:
面试问题:幂等和安全问题
安全:脏读什么的
幂等:在操作成功的前提下会不会对数据库造成额外的影响,举个例子比如订单你点一次返回的时候可能信号不好,又点击了一次。
GET:安全幂等
POST:不安全不幂等
DELETE:不安全幂等
PUT:不安全幂等
-----------------------------------------------------------------------------------05-----------------------------------------------------------------------------------
mysql微服务。
配置文件:这个是虚拟机的网卡的配置文件。
看下这个配置文件是如何配置的,用的时候再看就可以。
制作mysql容器。
注意上面的语句有密码:123456
-e:后面为初始化变量
3306:3306:宿主机的端口:容器的,mysql默认端口
docker的自启动:
https://blog.csdn.net/xtjatswc/article/details/86586769
https://segmentfault.com/a/1190000019783852?utm_source=tag-newest
-----------------------------------------------------06-------------------------------------------------------------
执行建表语句
----------------------------------------------------------------------------07------------------------------------------------------------------------------------------
如何创建一个父子工程:
第一步:父亲工程没有pom就不能在子工程用父亲工程的资源了。
第二步:
父工程什么都不要。
父工程不写代码,删掉src的东西。
导入pom。
--------------------------------------------------------------------------08--------------------------------------------------------------------------------------------
构建公共的子模块:
第一步:new一个module,然后直接不用模板。
第二步:创建返回值的实体类。
第三步:写分页的实体类
第四步:状态码
-----------------------------------------------------09-------------------------------------------------------------
雪花算法:64bit。
1:不用的
41:时间戳可以使用到2082年
10:工作机器id可以支持1024台机器
12:序列号可以1毫秒产生4096个自增序列id
分布式id生成器。
二进制的64位,2的64次方。
时间戳是毫秒值的相减,2的41次方。
前五位数 为宿主机器 后五位为微服务的id。
12:随机数真正的随机数。
1秒产生26万个id。超了放在消息队列中。
两个微服务操作一张表:都用雪花算法不用主键自增。
美团的全局ID:https://www.cnblogs.com/imstudy/p/11573025.html
-----------------------------------------------------10-------------------------------------------------------------
基础微服务的crud:
问答。
用模板:
生成项目:base
我们分析下pom的结构:
这个不能去掉。
1.clean2.编译3.发布4.安装
最后的pom:
结论:不建议用模板。
我们写pom文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<artifactId>tensquare_common</artifactId>
<groupId>com.tensquare</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>mysql</artifactId>
<groupId>mysql-connector-java</groupId>
</dependency>
</dependencies>
-------------------------------------------------------11------------------------------------------------------------
base的准备工作:
spring:
application:
name: temsquare-base
这个语句的作用:是eureak的注册的名字,细节,必须中间是横杠。
注意一个知识点:
driverClassName是一样的,都可以识别。
完整的:
server:
port: 9001
spring:
application:
name: temsquare-base
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.244.136:3306/tensquare_base?characterEncoding=utf‐8
username: root
password: 123456
jpa:
database: mysql
show-sql: true
接下来写启动类:
注意跨域不在这里面写。在Controller里面写。
写好入口文件。
-------------
接下来我们用id生成器。
id生成器的原则就是谁用谁放在容器里面。
//将id生成器放在容器里面
@Bean
public IdWorker idWorker(){
return new IdWorker(1,1);
}
讲下源码:
springboot在启动的时候会检索这个文件:
这个就是spring的入口,写web.xml的
点进去:
----------------------------------------------------------12---------------------------------------------------------
写一个controller:
跨域注解:cnblogs.com/mmzs/p/9167743.html
总结:1和3要一样的,要是不一样要保持1和2一样。
基本得crud严格按照接口文档书写:
写实体类。
注意一点分布式得开发要写这个一定要写,加这句话才能在不同平台之间使用io流进行传输。:
写带分页得Dao:
写Service。
在controller写service。
---------------------------------------------------------------13-----------------------------------------------------
postman测试:
swagger地址:http://localhost/#/default/post_label
---------------------------------------------------------------14-----------------------------------------------------
异常处理:
只对Exception处理,可以加别的。
@RestControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result error( Exception e) {
e.printStackTrace();
return new Result(false, StatusCode.ERROR, e.getMessage());
}
}
----------------------------------------------------------26--------------------------------------------------------------
规范的层次结构示例代码:
1.Controller:
跨域请求写在这里。
2.Service
3.Dao
4.实体类