Springboot&&LinuX

一、现学习规划

Springboot

概念介绍:全新框架,简化Spring应用的初始搭建以及开发过程

Springboot核心:自动装配

微服务阶段

javase:OOP

mysql:持久化

html+css+js+jquery+框架:视图,框架不熟练,css不好;

javaweb:独立开发MVC三层架构的网站了:原始

ssm:企业级框架:简化了我们的开发流程,配置也开始较为复杂

war:tomcat运行

715348851

spring再简化:SpringBoot-jar:内嵌tomcat;微服务架构!

路线图

Springboot&&LinuX

二、Spring Boot概念

1.回顾

1.1、什么是Spring?

Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者: Rod Johnson (音乐学博士)。

Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

1.2、Spring是如何简化Java开发的?主要是AOP、IOC

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

1、基于POJO的轻量级和最小侵入性编程;

2、通过IOC,依赖注入(DI)和面向接口实现松耦合;

3、基于切面(AOP)和惯例进行声明式编程;

4、通过切面和模版减少样式代码;

1.3、什么是SpringBoot

​ 学过javaweb的同学就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat,跑出一个Hello Wolrld程序,是要经历特别多的步骤;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot。什么是SpringBoot呢,就是一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can “just run”,能迅速的开发web应用,几行代码开发一个http接口。

​ Spring Boot基于Spring 开发,Spirng Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring 的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,多数Spring Boot应用只需要很少的Spring 配置。同时它集成了大晨常用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用

​ 简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包, spring boot整合了所有的框架。Spring Boot出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,Spring Boot已经当之无愧成为Java领域最热门的技术。

Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门
  • 开箱即用,提供各种默认配置来简化项目配置
  • 内嵌式容器简化Web项目
  • 没有冗余代码生成和XML配置的要求

1.4、Spring Boot和Spring的对比

Spring程序缺点

  • 依赖设置繁琐
  • 配置繁琐

SpringBoot程序优点

  • 起步依赖(简化依赖配置)
  • 自动配置(简化常用工程相关配置)
  • 辅助功能(内置服务器,…)

三、微服务概念

业务:service :userService ==>模块!

springMVC,contrller ==>提供接口!

3.1、什么是微服务?

​ 微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成—系列小服务的组合;可以通过http的方式进行互通。要说微服务架构,先得说说过去我们的单体应用架构。

3.2、单体应用架构

​ 所谓单体应用架构(all in one)是指,我们将一个应用的中的所有应用服务都封装在一个应用中。

​ 无论是ERP、CRM或是其他什么系统,你都把数据库访问,web访问,等等各个功能放到一个war包内。

优点:易于开发和测试;也十分方便部署;当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。

缺点:哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包、部署这个应用war包。特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。

3.2、微服务架构

all in one的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后在负载均衡。

所谓微服务架构,就是打破之前all in one的架构方式,把每个功能元素独立出来。把独立出来的功能元素的动态组合,需要的功能元素才去拿来组合,需要多一些时可以整合多个功能元素。所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制。

优点:

  1. 节省了调用资源。
  2. 每个功能元素的服务都是一个可替换的、可独立升级的软件代码。

四、第一个SpringBoot程序

4.1、配置

  • jdk:1.8
  • Maven:3.6.5
  • springboot:最新版

应用:IDEA

官方:一个快速生成的网站!下载后导入

IDEA:直接新建项目即可

4.2、相关更改

更改端口号:

#更改端接口号
server.port=8081

Springboot&&LinuX

更改banner.txt

////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/---'\____                           //
//                    .'  \\|     |//  .                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  -  ___/-. /                       //
//                ___. .'  /--.--\  . . ___                     //
//              ."" '<  .___\_<|>_/___.'  >'"".                  //
//            | | :  - \.;\ _ /;./ -  : | |                 //
//            \  \ -.   \_ __\ /__ _/   .- /  /                 //
//      ========-.____-.___\_____/___.-____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            &#x4F5B;&#x7956;&#x4FDD;&#x4F51;       &#x6C38;&#x4E0D;&#x5B95;&#x673A;     &#x6C38;&#x65E0;BUG                    //
////////////////////////////////////////////////////////////////////
</|>

Springboot&&LinuX

五、原理初探

自动配置:

1、 pom.xml

  • spring-boot-dependencies:核心依赖在父工程中!
  • 我们在引入依赖的时候,不需要指定版本,SpringBoot具有版本仓库

parent

  1. 开发SpringBoot程序要继承spring-boot-starter-parent
  2. spring-boot-starter-parent中定义了若干个依赖管理
  3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
  4. 继承parent的形式也可以采用引入依赖的形式实现效果

stater

SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的

2、 启动器


    org.springframework.boot
    spring-boot-starter

3、 主程序

package com.aaron;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author Administrator
 * 程序的主入口:不可删改
 * 本身就是Spring的一个组件
 */
@SpringBootApplication
public class HelloSpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringBootApplication.class, args);//相当于一个容器
    }

}

SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目

SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

4、辅助功能

  1. 内嵌Tomcat服务器是SpringBoot辅助功能之一,另外还有jetty(相对更加轻量,但是负载型远不及tomcat)、undertow(负载型勉强跑赢tomcat)
  2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给spring容器管理
  3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

六、REST风格

6.1、REST简介

​ REST是(Representational State Transfer)的缩写,表现形式状态的转换,即资源的访问格式

6.2、表现形式

http: //localhost/user/1
http: //localhost/user

优点:隐藏资源的访问行为,无法通过地址得知对资源是何种操作、书写简化!

Springboot&&LinuX

查询:GET

添加:POST

修改:PUT

删除:DELETE

约定大于配置

七、Windows端口

Springboot&&LinuX

八、常量单位

Springboot&&LinuX

Springboot&&LinuX

转换语法规则

Springboot&&LinuX

密码尽量用双引号,避免识别错误

九、加载测试专有属性

1、properties

在启动测试环境时可以通过properties参数设置测试环境专用的属性

Springboot&&LinuX

优势:比多环境开发中的测试环境影响范围更小,仅对当前测试类有效

2、args

在启动测试环境时可以通过args参数设置测试环境专用的传入参数

Springboot&&LinuX

3、测试类中启动web服务器

Springboot&&LinuX

Springboot&&LinuX

4、虚拟调用(AutoConfigureMockMvc)

Springboot&&LinuX

Springboot&&LinuX

5、匹配相应执行状态

Springboot&&LinuX

6、业务层事务回滚

Springboot&&LinuX

7、随机测试数据

Springboot&&LinuX

8、内嵌数据库

Springboot&&LinuX

十、Redis

1、安装运行

Springboot&&LinuX
tar -zxvf redis-7.0.3.tar.gz -C /usr/local

//进入目录
yum install gcc-c++
make
//src下
make install

Springboot&&LinuX

启动命令行小BUG:

Springboot&&LinuX

Springboot&&LinuX
//登录
src/redis-cli -h localhost -p 6379 -a Max123456

后台运行

Springboot&&LinuX

Windows远程连接

先在vim redis.conf

Springboot&&LinuX

Springboot&&LinuX

杀进程!!!重启!!!即可

ps -ef |grep redis

kill -9 端口号

//重启
src/redis-server ./redis.conf

Springboot&&LinuX
.\redis-cli.exe -h 1.14.182.21 -p 6379 -a Max123456

Springboot&&LinuX

2、基本用法

Springboot&&LinuX

Springboot&&LinuX

1.字符串

Springboot&&LinuX

2.哈希

Springboot&&LinuX

3.列表list(可重复,队列)

Springboot&&LinuX

4.set无序集合

Springboot&&LinuX

Springboot&&LinuX

3、整合

先导入包、同时cmd启动Redis

package com.aaron;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

@SpringBootTest
class Springboot10RedisApplicationTests {

  @Autowired(required = false)
  private RedisTemplate redisTemplate;
  @Test
  void SetRedisTemplate() {
    ValueOperations valueOperations = redisTemplate.opsForValue();
    valueOperations.set("age",22);
  }

  @Test
  void GetRedisTemplate() {
    ValueOperations valueOperations = redisTemplate.opsForValue();
    Object age = valueOperations.get("age");
    System.out.println(age);
  }

  @Test
  void HSetRedisTemplate() {
    HashOperations hashOperations = redisTemplate.opsForHash();
    hashOperations.put("info","a","aa");
    hashOperations.put("info","a1","a123");
  }

  @Test
  void HGetRedisTemplate() {
    HashOperations hashOperations = redisTemplate.opsForHash();
    Object o = hashOperations.get("info", "a");
    Object o1 = hashOperations.get("info", "a1");
    System.out.println(o);
    System.out.println(o1);
  }
}

4、使用

Springboot&&LinuX

Springboot&&LinuX

Springboot&&LinuX

十一、MongoDB

概念:MongoDB是一个开源、高性能、无模式的文档型数据库。NoSQL数据库产品中的一种,是最像关系型数据库的非关系型数据库

1、应用场景

Springboot&&LinuX

Springboot&&LinuX

Springboot&&LinuX

十二、缓存

缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质

使用缓存可以有效的减少低速数据读取过程的次数(例如磁盘IO),提高系统性能

Springboot&&LinuX

Springboot&&LinuX

十三、Linux基础命令

Springboot&&LinuX
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33

Springboot&&LinuX

Springboot&&LinuX
//编码
echo 'LANG="en_US.UTF-8"' >> /etc/profile
source /etc/profile

Springboot&&LinuX

1、查看目录ls

Springboot&&LinuX

2、显示文件类容cat

Springboot&&LinuX
cat /etc/profile

3、拷贝文件cp

Springboot&&LinuX
cp hello.txt itcast/
cp hello.txt ./hi.txt
cp -r itcast/ ./itheima/
cp -r itcast/* ./itheima/

4、拷贝移动mv

Springboot&&LinuX
mv hello.txt hi.txt
mv hi.txt itheima/
mv hi.txt itheima/hello.txt
mv itcast/ itheima/
mv itcast/ itheima/

5、打包压缩tar

Springboot&&LinuX

Springboot&&LinuX
//打包
tar -cvf hello.tar ./*
tar -zcvf hello.tar.gz ./*

//解包
tar -xvf hello.tar
tar -zxvf hello.tar.gz
tar -zxvf hello.tar.gz -C lusr/local

6、文本编辑vim

Springboot&&LinuX
yum install vim

Springboot&&LinuX

7、查找find&grep

Springboot&&LinuX

Springboot&&LinuX

十四、软件安装

1、JDK

Springboot&&LinuX
//解压
tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local

vim /etc/profile
//配置环境变量
JAVA_HOME=/usr/local/jdk1.8.0_271
PATH=$JAVA_HOME/bin:$PATH

//加载配置文件
source /etc/profile

2、Tomcat

Springboot&&LinuX
tar -zxvf apache-tomcat-8.5.81.tar.gz -C /usr/local

Springboot&&LinuX
ps -ef | grep tomcat

Springboot&&LinuX
//查看防火墙状态(systemctl status firewalld、 firewall-cmd --state)
//暂时关闭防火墙(systemctl stop firewalld)
//永久关闭防火墙(systemctl disable firewalld)
//开启防火墙(systemctl start firewalld)
//开放指定端口(firewall-cmd --zone=public --add-port=8080/tcp --permanent)
//关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)
//立即生效(firewall-cmd --reload)
//查看开放的端口(firewall-cmd --zone=public --list-ports)

Springboot&&LinuX

3、MySQL

Springboot&&LinuX
rpm -qa
rpm -qa | grep mysql
rpm -qa | grep mariadb

Springboot&&LinuX
//卸载
rpm -e --nodeps 软件名称

Springboot&&LinuX
mkdir /usr/local/mysql

tar -xvf mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar  -C  /usr/local/mysql

Springboot&&LinuX
rpm -ivh mysql-community-common-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-debuginfo-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-debug-8.0.29-1.el7.x86_64.rpm
rpm -ivh mysql-community-test-8.0.29-1.el7.x86_64.rpm --nodeps

Springboot&&LinuX
service mysqld stop

//查看服务状态
systemctl status mysqld

//启动服务
systemctl start mysqld

//开机启动
systemctl enable mysqld

//查看已经启动的服务
netstat-tunlp
netstat -tunlp | grep mysql

//查看Mysql进程
ps -ef | grep mysql

Springboot&&LinuX
//查看文件内容
cat /var/log/mysqld.log
//查看文件内容包含password
cat /var/log/mysqld.log | grep password

Springboot&&LinuX
mysql -uroot -p                               &#x767B;&#x5F55;mysql(&#x4F7F;&#x7528;&#x4E34;&#x65F6;&#x5BC6;&#x7801;&#x767B;&#x5F55;)
#&#x4FEE;&#x6539;&#x5BC6;&#x7801;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'qazWsx>+&3ed';

set global validate_password.length=6;        &#x8BBE;&#x7F6E;&#x5BC6;&#x7801;&#x957F;&#x5EA6;&#x6700;&#x4F4E;&#x4F4D;&#x6570;
set global validate_password.policy=LOW;      &#x8BBE;&#x7F6E;&#x5BC6;&#x7801;&#x5B89;&#x5168;&#x7B49;&#x7EA7;&#x4F4E;&#xFF0C;&#x4FBF;&#x4E8E;&#x5BC6;&#x7801;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x6210;root

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Max123456';

SELECT user,host FROM mysql.user;
RENAME USER 'root'@'localhost' TO 'root'@'%';

ALTER USER 'root'@'%' IDENTIFIED BY 'Max123456' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Max123456';

//root&#x6700;&#x9AD8;&#x6743;&#x9650;
grant all privileges on *.* to 'root'@'%' with grant option;

#&#x5F00;&#x542F;&#x8BBF;&#x95EE;&#x6743;&#x9650;
grant all on *.* to 'root'@'%'identified by 'Max123456';
flush privileges;

4、lrzsz(rz可以打开上传)

Springboot&&LinuX

十五、文件部署

1、手工部署

Springboot&&LinuX

Springboot&&LinuX
nohup java -jar boot工程.jar &> XXX.log &   //后台运行java -jar命令,并将日志输出到XX.log文件
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> hello.log &
more XXX.log

Springboot&&LinuX

关闭进程

Springboot&&LinuX

2、脚本部署

Springboot&&LinuX

Springboot&&LinuX

Springboot&&LinuX
tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local

cd /
vim /etc/profile  //修改配置文件,加入如下内容
export MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

source /etc/profile

mvn -version

vim /usr/local/apache-maven-3.5.4/conf/settings.xml

修改配置文件内容如下

/usr/local/repo

Springboot&&LinuX

Springboot&&LinuX

十六、Mysql的主从复制

Springboot&&LinuX

Springboot&&LinuX

1、主数据库操作

Springboot&&LinuX
[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志
server-id=100     #[必须]服务器唯一ID

重启

Springboot&&LinuX
systemctl restart mysqld

Springboot&&LinuX
set global validate_password.policy=LOW;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Max123456';

Springboot&&LinuX
show master status;

2、从库操作

Springboot&&LinuX
server-id=101 #[必须]服务器唯一ID

重启

systemctl restart mysqld

Springboot&&LinuX
stop slave;

change master to master_host='1.14.182.21', master_user='root', master_password='Max123456', master_log_file='mysql-bin.000001', master_log_pos=439;

start slave;

Springboot&&LinuX

Springboot&&LinuX
show slave status\G;

//错误
//从库命令行输入
stop slave;
// 数字1 的位置可以设置大一点,这样就可以跳过更多的执行语句,否则还可能有错误
set global sql_slave_skip_counter=1;
start slave;

十七、Sharding-JDBC

Springboot&&LinuX

1、导入坐标

Springboot&&LinuX

    org.apache.shardingsphere
    sharding-jdbc-spring-boot-starter
    4.0.0-RC1

2、规则配写

server:
  port: 8080
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID
spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://1.14.182.21:3306/rw?characterEncoding=utf-8
        username: root
        password: Max123456
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.121.128:3306/rw?characterEncoding=utf-8
        username: root
        password: Max123456
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true

pom文件


    4.0.0

        org.springframework.boot
        spring-boot-starter-parent
        2.4.5

    com.itheima
    rw_demo
    1.0-SNAPSHOT

        1.8

            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1

            org.springframework.boot
            spring-boot-starter-web
            compile

            org.projectlombok
            lombok
            1.18.20

            com.alibaba
            fastjson
            1.2.76

            commons-lang
            commons-lang
            2.6

            mysql
            mysql-connector-java
            runtime

            com.baomidou
            mybatis-plus-boot-starter
            3.4.2

            com.alibaba
            druid-spring-boot-starter
            1.1.23

                org.springframework.boot
                spring-boot-maven-plugin
                2.4.5

3、配置文件中允许bean覆盖

  main:
    allow-bean-definition-overriding: true

瑞吉项目


    4.0.0

        org.springframework.boot
        spring-boot-starter-parent
        2.7.1

    com.Aaorn
    reggie_take_out
    1.0-SNAPSHOT

        1.8

            com.aliyun
            aliyun-java-sdk-core
            4.6.0

            com.aliyun
            aliyun-java-sdk-dysmsapi
            2.2.1

            org.springframework.boot
            spring-boot-starter

            org.springframework.boot
            spring-boot-starter-test
            test

            org.springframework.boot
            spring-boot-starter-web
            compile

            com.baomidou
            mybatis-plus-boot-starter
            3.5.2

            org.projectlombok
            lombok

            com.alibaba
            fastjson
            2.0.7

            commons-lang
            commons-lang
            2.6

            mysql
            mysql-connector-java
            runtime

            com.alibaba
            druid-spring-boot-starter
            1.2.11

            org.springframework.boot
            spring-boot-starter-data-redis

            org.springframework.boot
            spring-boot-starter-cache

            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1

                org.springframework.boot
                spring-boot-maven-plugin

server:
  port: 8080
spring:
  application:
    name: reggie_take_out
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://1.14.182.21:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: Max123456
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.121.128/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        username: root
        password: Max123456
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #轮询
      # 最终的数据源名称
      name: dataSource
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true

 数据源德鲁伊
 datasource:
   druid:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://1.14.182.21:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
     username: root
     password: Max123456
  redis:
    password: Max123456
    host: 1.14.182.21
    database: 15
    port: 6379
  cache:
    redis:
      time-to-live: 1800000

 MybatisPlus
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID

reggie:
  path: /usr/local/app/reggie/photos/

十八、Nginx负载均衡

1、概述

Nginx是一款轻量级的web_服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类

型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler .ru站点(俄文:Paw6nep)开发的,第一个公开版本0.1.0发布于2004年10月4日。

官网: https : / /nginx.org/

2、下载安装

安装过程:
1、安装依赖包yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

2、下载Nginx安装包wget https : / /nginx.org/download/nginx-1.22.0.tar.gz

3、解压tar -zxvf nginx-1.22.0.tar.gz

4、cd nginx-1.22.0

5、./configure –prefix=/usr/local/nginx

6、make && make install

目录结构:

Springboot&&LinuX

3、基本操作

3.1、查看版本号:

//切换到sbin目录
cd usr/local/nginx/sbin/
//输入命令
./nginx -v

3.2、检查配置文件是否正确

//检查文件
./nginx -t

//打开配置文件
vim /usr/local/nginx/conf/nginx.conf

3.3、启动&停止

//启动Nginx服务使用如下命令:
./nginx

//停止Nginx服务使用如下命令:
./nginx -s stop

//启动完成后可以查看Nginx进程:
ps -ef | grep nginx

//当修改Nginx配置文件后,需要重新加载才能生效,可以使用下面命令重新加载配置文件:
./nginx -s reload

配置全局可启动nginx

//打开配置文件
vim etc/profile
//追加环境变量
PATH=/usr/local/nginx/sbin:$JAVA_HOME/bin:$PATH
//立即生效
source etc/profile

4、配置文件结构

Springboot&&LinuX

5、具体应用

5.1、部署静态资源

Springboot&&LinuX

5.2、反向代理

正向代理:

Springboot&&LinuX

反向代理:

Springboot&&LinuX

正向代理与反向代理最简单的区别: 正向代理隐藏的是用户,反向代理隐藏的是服务器

和正向代理不同,反向代理相当于是为目标服务器工作的,当你去访问某个网站时,你以为你访问问的是目标服务器,其实不然,当你访问时,其实是由一个代理服务器去接收你的请求,

正向:客户端到服务器;反向:服务器到客户端;

Springboot&&LinuX

反向代理服务器:

server {
    listen 82;
    server_name localhost;
    location / {
        proxy_pass http://192.168.121.129:8080;
        #反向代理配置,将请求转发到指定服务
    }
}

5.3、负载均衡

未涉及

十九、前后端分离开发

Springboot&&LinuX

1、开发流程

Springboot&&LinuX

2、Swagger

导入POM文件依赖


    com.github.xiaoymin
    knife4j-spring-boot-starter
    3.0.2

配置:

package com.Aaron.reggie.config;

import com.Aaron.reggie.utils.JacksonObjectMapper;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.List;

/**
 * @Author: AlaskaBoo @Date: 2022-07-11 00:21
 */
@Slf4j
@Configuration
@EnableSwagger2
@EnableKnife4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
  /**
   * 设置静态资源映射
   *
   * @param registry
   */
  @Override
  protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    log.info("开始静态资源映射...");
    registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
    registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
    registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  }

  /**
   * 扩展MVC框架的消息转换器
   *
   * @param converters
   */
  @Override
  protected void extendMessageConverters(List> converters) {
    // 创建消息转换器对象
    MappingJackson2HttpMessageConverter messageConverter =
        new MappingJackson2HttpMessageConverter();

    // 设置对象转换器,底层使用Jackson将Java对象转为json
    messageConverter.setObjectMapper(new JacksonObjectMapper());

    // 将上面的消息转换器对象追加到mvc框架的转换器容器
      converters.add(0,messageConverter);
  }

  @Bean
  public Docket createRestApi() {
    // 文档类型
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.Aaron.reggie.controller"))
            .paths(PathSelectors.any())
            .build();
  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("瑞吉外卖")
            .version("1.0")
            .description("瑞吉外卖接口文档")
            .build();
  }
}

过滤

// 不需要请求的路径
    String[] urls =
        new String[] {
          "/employee/login", "/employee/logout", "/backend/**", "/front/**","/common/**","/user/sendMsg","/user/login","/doc.html"
                ,"/webjars/**", "/swagger-resources", "/v2/api-docs"
        };

3、Swagger常用注解

Springboot&&LinuX

Original: https://www.cnblogs.com/Alaskaboo/p/16507866.html
Author: Alaskaboo
Title: Springboot&&LinuX

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643727/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球