一、精灵商场项目架构设计
1.1 电商行业特点
1.2 传统架构项目设计
缺点:采用传统的架构设计时,将所有的模块都写在一起,如果当模块出现问题时,将导致整个项目乃至tomcat服务器都不能正常执行
1.3 分布式架构
1.3.1 分布式概念
特点:对外统一,对内独立
根据特定的规则将项目进行拆分,一部分出现问题不会影响整个服务器运行,分布式实现了系统间架构之间的松耦合
1.3.1.1 项目垂直拆分
按照业务的功能(模块)将项目进行拆分
1.3.1.2 项目水平拆分
在垂直拆分的基础之上,按照代码调用的"层级"进行拆分
1.3.2 高并发
概念:单位时间内,有大量的用户访问服务器会造成高并发.
影响:官网不能访问,用户访问受限等.
常识:tomcat服务器 220个/秒 150个/秒
1.3.3 集群
概念:由多台(tomcat)服务器组成共同为用户提供服务的配置称之为集群
1.3.4 高可用
当服务器出现了问题,可以实现自动化的故障迁移;一般搭建集群时,都需要实现高可用
1.3.5 海量数据的处理
项目每天都会产生大量的数据,需要大数据技术
1.4 分布式系统优化
1.4.1 jar包如何维护
利用父级项目管理jar包.子级项目只需要继承即可
1.4.2 工具ApI如何管理
采用工具类项目的形式进行管理,项目需要依赖工具类
二、精灵项目创建
2.1 创建父级工程
通过
spring Initializr
直接创建父工程
项目名:
jl
Springboot版本为2.1.9
项目结构
父工程的pom.xml配置
注意 : 因为父工程没有启动类,所以父级项目中 不要添加插件,否则不法打包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jl</groupId>
<artifactId>jl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>jl</name>
<description>jlmall</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--springBoot动态的引入springMVC全部的配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入aop支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--引入测试类 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--添加属性注入依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--支持热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--引入数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
<scope>runtime</scope>
</dependency>
<!--引入druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--spring整合redis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<!--springBoot整合JSP添加依赖 -->
<!--servlet依赖 注意与eureka整合时的问题 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!--jstl依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--使jsp页面生效 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--添加httpClient jar包 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!--添加Quartz的支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
</dependencies>
<!--父级项目中 不要添加插件 -->
</project>
2.2 创建 jl-common 子工程
通过Module创建子工程
使用maven 简单工程创建子工程
jl-common
结构目录
2.3 创建 jl-manage 子工程
使用maven 简单工程创建
pom.xml 设置 打包方式为 war,在
Project Structure
里设置webapp资源路径
jl-manage
项目结构
jl-manage
的 pom.xml 配置信息
添加jl-common
依赖
添加跳过测试类打包的插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>jl</artifactId>
<groupId>com.jl</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jl-manage</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.jl</groupId>
<artifactId>jl-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--跳过测试类打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.3 导入静态资源文件
编辑jl-manage各个层文件,目录如下
2.4 创建jl-manage的启动类SpringBootRun
package com.jl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.jl.mapper")
public class SpringBootRun {
public static void main(String[] args) {
SpringApplication.run(SpringBootRun.class, args);
}
}
2.5 Idea问题:jsp找不到静态资源,报404错误
原因: 由于idea默认扫描父级工程下的
webapp
目录下的静态资源
所以jl-manage
子工程下的webapp
静态资源找不到
解决方法: 指定SpringBootRun
启动程序 去扫描 当前子模块下的webapp
目录的静态资源
(1) 第一种方式 : 修改内置的Tomcat配置(推荐) 庄老板
(2) 第二种方式 : 增加一个config配置类王老板
package com.jl.config;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
import java.io.File;
@Component
public class ServerConfig implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
factory.setDocumentRoot(new File("s")); //s为jl-manage的webapp本地路径
}
}