谷粒商城学习笔记(一)
知识点
环境/工具
Maven:可以将每个微服务组织起来(管理项目与项目之间的关系)
Docker:容器管理,快速部署项目或环境
MySQL:经典数据库
Redis:缓存数据库,老版本(4.x)没有自动持久化,新版本(7.x)有自动持久化
PowerDesigner:能够通过设计图生成SQL脚本文件
人人开源:快速构建后台管理系统,快速生成MVC架构代码,人人开源Gitee。
- renren-fast:是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付【接私活利器】
- renren-fast-vue:基于vue、element-ui构建开发,实现renren-fast后台管理前端功能,提供一套更优的前端解决方案
- renren-generator:人人开源项目的代码生成器,可在线生成entity、xml、dao、service、html、js、sql代码,减少70%以上的开发任务
NACOS
NACOS官网,项目使用的是1.1.3
版本,可查看NACOS 1.x官方文档。
注册中心
项目老版本Spring-Cloud-Alibaba微服务-NACOS注册中心案例
配置步骤
修改
pom.xml
文件,引入 Nacos Discovery Starter。1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>在应用的
/src/main/resources/application.properties
(yaml也是可以的)配置文件中配置 Nacos Server 地址。1
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
在SpringBoot启动类上使用
@EnableDiscoveryClient
注解开启服务注册与发现功能。1
2
3
4
5
6
7
public class GulimallCouponApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallCouponApplication.class, args);
}
}
配置中心
项目老版本Spring-Cloud-Alibaba微服务-NACOS配置中心案例
配置步骤
修改
pom.xml
文件,引入 Nacos Config Starter。1
2
3
4<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>在应用的
/src/main/resources/bootstrap.properties
配置文件中配置 Nacos Config 元数据。1
2spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=127.0.0.1:8848完成上述两步后,应用会从 Nacos Config 中获取相应的配置,并添加在 Spring Environment 的 PropertySources 中。这里我们使用 @Value 注解来将对应的配置注入到 SampleController 的 userName 和 age 字段,并添加 @RefreshScope 打开动态刷新功能。
1
2
3
4
5
6
7
8
9
class SampleController {
String userName;
int age;
}
配置中心相关名词:
- 命名空间
- 配置集:所有配置的集合
- 配置集ID:类似于文件名
- 配置分组
谷粒商城使用命名空间来隔离各个服务的配置,然后使用分组来区分不同环境的配置(开发、生产)
指定命名空间与组
默认命名空间为public
,默认组为DEFAULT_GROUP
。
在/src/main/resources/bootstrap.properties
中,加入如下内容:
1 | # 命名空间的ID |
扩展配置
可将某个配置拆分为多个配置
1 | spring.application.name=gulimall-coupon |
Feign
配置步骤(参考)
导入spring-cloud-openfeign依赖
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>在
feign
包下编写Feign接口1
2
3
4
5
6
7
8
9
10
11
12package cn.insectmk.gulimall.member.feign;
import cn.insectmk.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
// 应用名称
public interface CouponFeignService {
R memberList();
}SpringBoot启动类开启OpenFeign客户端并配置Feign接口所在的包
1
2
3
4
5
6
7
8
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}调用案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26package cn.insectmk.gulimall.member.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import cn.insectmk.common.utils.R;
public class MemberController {
private MemberService memberService;
private CouponFeignService couponFeignService;
public R test(){
R r = couponFeignService.memberList();
return R.ok()
.put("coupons", r.get("coupons"))
.put("message", r.get("message"))
.put("msg", "调用成功!");
}
}
网关
配置步骤
导入spring-cloud-gateway坐标
1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>同样需要做服务注册/发现。
可以自己配置路由规则及其他配置,具体路由规则查看路由谓词工厂
1
2
3
4
5
6
7
8
9
10
11
12spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
前端
ES6
var与let的区别
结构表达式
1
2
3
4
5
6
7
8let [a,b,c] = [1,2,3]
let student = {
name: 'zhangsan',
age: 17
}
let {stuName, stuAge} = student字符串扩展函数(有很多)
- startWith()
- endWith()
字符串模板:就是反引号,可以用插值表达式
${}
函数优化
参数能够配合解构表达式使用
参数默认值
1
2
3function doSome(num1, num2 = 1) {
}不定参数
1
2
3function doSome(...nums) {
}箭头函数
- this指向问题
对象优化
- 对象扩展函数
- 对象声明简写
- 对象中的箭头函数的this不能使用,只能用对象名访问属性
- 对象扩展运算符
拷贝(深拷贝)
1
2
3
4
5
6let student = {
name: 'zhangsan',
age: 17
}
let zhangSan = {...student}扩展
1
2
3
4
5
6
7
8
9let studentName = {
name: 'zhangsan',
}
let studentAge = {
age: 72
}
let student = {...studentName, ...studentAge}
数组扩展
- map():可以处理数组中的每一元素并返回。
- reduce():可以处理数组中的每一个元素,并且遍历时下一次能使用上次的结果。
Promise
模块化
export与export default的区别:
export可重复多次,并且需要用对象的某个属性接收。export default为一次性全部导出,只能使用一次,并且导出内容为一个对象,可以用任意名称的变量接收。
Vue2
- MVVM
- 声明式渲染
- 双向绑定
- 事件处理
- 动态class
- 动态style
- 事件修饰符
- 按键修饰符
- 遍历
- 判断
- 计算属性
- 监听器
- 过滤
- 组件
- 生命周期、钩子函数
Webpack
使用Vue-cli快速构建Vue前端工程。
构建步骤
安装全局webpack包
1
npm install webpack -g
安装全局vue-cli包
1
npm install @vue/cli-init
使用webpack模板初始化项目
1
vue init webpack <projecct-name>
ElementUI
在Vue工程使用ElementUI组件库
安装ElementUI
1
npm i element-ui -S
在
main.js
中导入ElemenUI1
2
3
4
5
6
7
8
9
10
11import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';
Vue.use(ElementUI);
new Vue({
el: '#app',
render: h => h(App)
});
疑问
- var与let的区别
- export与export default的区别
踩坑
VirtualBox跟vagrant配置多次不成功,换成了VMware
Spring-Cloud-Alibaba版本问题
EasyConnect软件占用10000端口,导致项目无法启动