路漫漫其修远兮,吾将上下而求索
这个商城项目正式开始了,我把这个项目叫启明星(venus),本周开始我每周都会集成一个小功能到项目中,日常会用到的spring-cloud和spring-boot的各类组件,还有一个商城项目应该有的各类接口,包括移动端甚至小程序,相关的方法还有这些年积攒的经验我都会记下来,感兴趣的朋友可以关注后续内容哦。
本节所有代码可以在gitlab上获取,地址:
https://gitlab.com/Flnn/venus.git
一、使用的主要框架以及版本
1. spring-cloud-alibaba 2.2.3.RELEASE
2. spring-cloud Hoxton.SR8
3. dubbo 2.7.8
4. spring-boot 2.2.10.RELEASE
二、注册中心
nacos作为注册中心,我这里就简单使用单节点模式启动了,下载好以后解压,进入bin目录,执行制定的启动命令即可。
nacos官网链接:nacos
下载链接:nacos下载
操作系统不同执行的命令也不一样,windows是:
startup.cmd -m standalone
linux和Mac是:
sh startup.sh -m standalone
非生产环境nacos启动单机模式也就可以了,但是生产上千万不要这样,出于健壮性考虑,生产环境需要配置集群模式。
三、目录结构划分
1、后端的java项目可以简单的分为两类,一类是服务提供者项目,例如venus-product,venus-user,venus-order; 一类是服务消费者项目,例如venus-webapp;dubbo的服务提供者,可以理解为一个个的service项目,而消费者,则是一个个的web-api项目。这样相当于controller和service拆分,两个都可以独立扩展。
2、对于服务提供者,一个项目又包含了5个子项目,每一个项目的含义如下:
这应该是很细的拆分了,消费者或者其他service需要引用本项目的资源的时候,只需要将model和service接口层加入依赖即可。
几个要点
1、spring-boot的项目为什么没有继承spring-boot-parent??
其实继承spring-boot-parent并不是必选的,换一种方式可以达到一样的目的,本项目通过idea建立的时候,因为要规划三个层级的结构,所以只能使用maven最简单的骨架来创建项目,想要让项目达到一样的效果,可以在父项目pom文件中加入以下内容:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、配置profiles
profiles在maven项目的pom文件中定义,然后在application.properties配置的时候使用pom.xml中定义的变量,然后在idea中就可以勾选某个profiles激活。如下图:左边定义profile,右边勾选。
3、日志logback
spring-boot项目中默认的是logback,本身性能足够优秀,我也就直接使用它了,定义logback的配置文件logback-spring.xml。而我因为可能在windows和Mac上编码,两边日记存储目录不一样,我就使用profile专门做了一个mac的(其实启动的时候加上一个jvm参数制定一下日志文件路径也可以,但是我最不喜欢启动时加jvm参数,所以...)。
日志配置没什么花头,网上可参考的也很多,具体配置就不赘述了,不过这里面倒是有一个地方值得细讲一下,那就是彩虹日志。不知道大家有没有注意过,如果你没有指定日志配置文件,你的spring-boot项目启动时打印在控制台的日志格式非常好看,还带了不同颜色来区分内容。像下面这样:
这种日志格式看着也舒服啊。怎么实现的呢?
首先在application.properties中加入一行配置:
spring.output.ansi.enabled=always
然后在日志配置文件logback-spring.xml中定义格式,spring-boot内置的输出格式可以直接引入进来。
注意控制太输出格式是${CONSOLE_LOG_PATTERN} ,而输出到文件中的格式是${FILE_LOG_PATTERN},我之前因为文件输出格式也配置了console_log_pattern结果发现文件打开里面会有很多乱码存在,因为这个问题排查了半天。