第一课 SpringBoot微信点餐系统课程介绍和环境搭建
tags:
- Java
- 慕课网
categories:
- 环境搭建
- 日志框架
文章目录
第一节 项目介绍
1.1 项目设计
- 功能模块划分
- 角色划分
- 部署架构
- 数据库设计
1.2 角色划分
- 买家(手机端)
- 卖家(PC端)
1.3 功能模块
1.4 部署架构
-
这里支持分布式部署。图上tomate 是多台服务器
-
系统的演进过程
-
微服务的两大门派。
- 阿里系: Dubbo做服务化治理,Zookeeper做服务注册中心 , SpringMVC或SpringBoot
- Spring Cloud栈:Spring Cloud,Netflix Eureka, SpringBoot
第二节 环境搭建
2.1 编辑器IDEA
- Idea官网下载:https://www.jetbrains.com/zh-cn/idea/download/other.html
- 旗舰版本Ultimate 2017.1.6 并破解。
# 课程环境安装在centos7.3上 用这三个破解 http://lookdiv.com/index/index/indexcodeindex.html
http://idea.iteblog.com/key.php
http://intellij.mandroid.cn/
http://idea.imsxm.com/
# 创建桌面快捷方式
cd 桌面
touch idea.desktop
vi idea.desktop
# 写入
[Desktop Entry]
Name=idea
Exec=/home/qnhyn/idea/bin/idea.sh %u
Type=Application
Icon=/home/qnhyn/idea/bin/idea.png
Terminal=false
2.2 JDK环境配置
- jdk 1.8.0_111 安装路径/usr/local/jdk1.8.0_111
# 1. 安装jdk 删除系统自带jdk 一句删除和多次删除
rpm -qa | grep java
rpm -e --nodeps `rpm -qa | grep java`
# noarch文件可以不用删除
javapackages-tools-3.4.1-11.el7.noarch
tzdata-java-2020a-1.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
# 其他的都删了
su root
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-0.el7_8.x86_64
# 查看是否删除成功
java -version
# 直接 搜jdk-8u111-linux-x64.tar.gz下载 官网下载
tar -zvxf jdk-8u111-linux-x64.tar.gz -C /usr/local
# 设置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_111
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 使其生效
source /etc/profile
java -version
2.3 nginx环境配置
- nginx 1.11.7 安装路径/usr/local/nginx 重启nginx -s reload
# 1. 安装nginx 先安装依赖
yum install -y gcc gcc-c++ autoconf automake
yum install -y zlib zlib-devel openssl openssl-devel pcre-devel
wget http://nginx.org/download/nginx-1.11.7.tar.gz
tar -zxvf nginx-1.11.7.tar.gz -C /usr/local && cd /usr/local/nginx-1.11.7/
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module
make && make install
# 开启端口服务
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --reload
# 验证,在浏览器中数据, 看到Nginx欢迎页面。
http://IP/
/usr/local/nginx/nginx -s reload # 重启
/usr/local/nginx/nginx # 启动
/usr/local/nginx/nginx -s stop # 停止
2.4 mysql环境配置
- mysql 5.7.17
- 配置/etc/my.conf
- 账号:root 密码:123456
- 端口:3306 启动:systemctl start mysqld
# 安装mysql
# 官网下载 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
# 创建mysql的用户和组
useradd mysql
tar -zvxf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
mv mysql-5.7.17-linux-glibc2.5-x86_64/ mysql
chown -R mysql:mysql /usr/local/mysql/
# 这里会生成默认密码 W>zJE,yS7%Ii
cd /usr/local/mysql
./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
# 否覆盖系统的 /etc/my.cnf 原文件,输入:y
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
# vim /etc/my.cnf 注释掉最下面的
# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
cd /usr/local/mysql/ && ./support-files/mysql.server start
chkconfig --add mysqld
chkconfig mysqld on
# 修改密码
mysql -uroot -p
SET PASSWORD = PASSWORD('123456');
# MySQL 远程授权 all privileges 全部权限,GRANT 可以立刻生效,创建了一个账户名为 root , 密码 123456,% 表示所有的 ip都可以访问读取数据库的账号
grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;
quit;
# 在CentOS7中安装mysql可视化操作workbench
wget http://repo.mysql.com/yum/mysql-tools-community/el/7/x86_64/mysql-workbench-community-6.2.5-1.el7.x86_64.rpm
sudo yum install rpm mysql-workbench-community-6.2.5-1.el7.x86_64.rpm
sudo yum install tinyxml
2.5 redis环境配置
- redis 3.2.8
- 路径: /usr/local/redis
- 配置: /etc/redis.conf
- 端口:6379 密码:123456
- 启动: systemctl start redis
# 安装redis-3.2.8
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar -zxvf redis-3.2.8.tar.gz -C /usr/local
cd redis-3.2.8
make
make install
# 配置Redis 默认也行
./utils/install_server.sh
# 查看开机启动
chkconfig --list
# Redis服务查看
ps -ef | grep redis
# redis基本操作
/etc/init.d/redis_6379 restart
2.5 MEAVN环境配置
- Meavn 3.3.9
mkdir /usr/local/maven && cd /usr/local/maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -zxvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 maven
vi /etc/profile
# 在/etc/profile的文件末尾添加以下配置:
export M2_HOME=/usr/local/maven/maven
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$M2_HOME/bin:$PATH
source /etc/profile
# mvn -version验证命令是否有效
mvn -version
# 修改成阿里云地址 sudo vi /usr/local/maven/maven/conf/settings.xml 搜mirror
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
第三节 创建项目和选择日志框架
3.1 项目初始化
- 然后直接先只选上Web就行。
- 进入工程右键运行。
3.2 日志框架选择
- 日志框架是一套能实现日志输出的工具包
- 它能够描述系统运行状态的所有时间都可以算作日志
- 数据库崩溃
- 用户下线
- 接口超时
- 日志框架的能力
- 定制输出目标
- 定制输出格式
- 携带上下文信息
- 运行时选择性输出
- 灵活的配置
- 优异的性能
- 常见的日志框架如下:
5 这里选择:SLF4j + Logback配合
- JUL虽然来自官方但是太过简陋,所以不用
- jboss-logging 自诞生之初就不是为了服务大众很快就被淘汰了
- Log4j作者写了Log4j2和Logback和SLF4j, 因为作者觉得Log4j太烂所以开发了Logback(它才是实际意义上的Log4j2)。
- Log4j2 apache只是借了一个名字来用,它太优秀和太先进,有过度设计的嫌疑,很多情况下对框架支持程度不好。容易采坑。它优于Logback在于它的超高性能,而我们大概率用不上。
- 因为SLF4j和Logback同一个作者。所以选择SLF4j和Logback
3.3 日志框架使用
- test.java.com.qnhyn.sell下新建一个LoggerTest类进行测试。右键运行test1函数。
- 级别在info之下的其实不会输出。这里一定要传入当前类LoggerTest.class,如果传入其他类,报错在其他类上,过去找,你能找个毛?
- 普通写法如下。每次写都得绑定到自身类上,很麻烦
package com.qnhyn.sell;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {
private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);
@Test
public void test1(){
logger.debug("debug...");
logger.info("info...");
logger.error("error...");
}
}
- 注解写法如下。首先在idea中settings中安装Lombok插件。在pom文件加入lombok的依赖( )
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
- 写法比之前方便很多,log
package com.qnhyn.sell;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1(){
log.debug("debug...");
String name = "imooc" ;
String password = "123456";
// 这种变量输出不够友好 多了头疼
log.info("name: " + name + " ,password: " + password);
// 占位符方式输出 简单方便
log.info( "name: {}, password:{} ", name, password);
log.info("info...");
log.error("error...");
}
}
3.4 Logback的配置
- Logback的配置分为两种:
- application.yml 这种方法相对比较简单,只能配置日志的路径、日志输出格式等简单配置
- logback-spring.xml 可以进行复杂配置。比如:区分info和error配置,每天产生日志文件。
- application.yml 配置。
- pattern.console 置日志输出的格式。%d日期 %msg信息 %n换行
- pattern.level 置日志输出的级别
- file.name 指定日志输出的地址名称
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://127.0.0.1/sell?characterEncoding=utf-8&useSSL=false
jpa:
show-sql: true
server:
context-path: /sell
logging:
# 日志输出格式配置
pattern:
console: "%d - %msg%n"
level: debug
# 日志输出目录配置 默认输出spring.log
# file:
# path: /home/qnhyn/log
# 日志输出为文件sell.log
file:
name: /home/qnhyn/log/sell.log
debug:
# 指定某个类类的日志级别
# com.imooc.LoggerTest: debug
- logback-spring.xml 日志配置。先把上面日志配置给删除或者屏蔽掉
- 配置项用在root下(整个项目都适用),ref=“consoleLog” 指向的是上面的名字
- 具体配置说明如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果根据范围过滤掉ThresholdFilter其他级别日志 因为info级别比较低 以上级别都会打出来-->
<!--这里设置过滤级别LevelFilter-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!--如果匹配到禁止掉, 没有匹配到-->
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略 imeBasedRollingPolicy每天输出成一个文件-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径, 这里注意要提前创建目录并给权限 sudo chmod -R 777 /home/qnhyn/logout/sell/-->
<fileNamePattern>
/home/qnhyn/logout/sell/info.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<!--让错误日志修改到另外的目录中-->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--根据范围过滤掉其他级别日志 这里error级别比较高所以可以这么配-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径, 这里注意要提前创建目录并给权限 sudo chmod -R 777 /home/qnhyn/logout/sell/-->
<fileNamePattern>
/home/qnhyn/logout/sell/error.%d.log
</fileNamePattern>
</rollingPolicy>
</appender>
<root level="info">
<!--指定使用的日志配置-->
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>
- 可以自己看一下springboot的默认日志配置
- spring-boot/2.3.5.RELEASE/spring-boot-2.3.5.RELEASE.jar!/org/springframework/boot/logging/logback/base.xml
- spring-boot/2.3.5.RELEASE/spring-boot-2.3.5.RELEASE.jar!/org/springframework/boot/logging/logback/default.xml
- spring-boot/2.3.5.RELEASE/spring-boot-2.3.5.RELEASE.jar!/org/springframework/boot/logging/logback/console-appender.xml