亿级流量架构|day01-京淘环境搭建

1. 项目环境配置

修改eclipse文档编码为UTF-8

配置JDK

Window中JDK

检测是否有JAVA_HOME

检查是否有path

Path ;%JAVA_HOME%/bin

关闭校验

添加maven

2. maven配置

2.1 maven作用

说明:

Maven是一站式的项目管理工具.负责项目中jar包管理/依赖.

Maven可以实现项目的自动的打包部署.

Mvn install/mvn package命令

依赖说明:

Maven可以实现jar包自动依赖的下载.同时依赖具有传递性.

A.jar-----B.10.jar-----C.2.0.jar

使用原则:

Maven的使用必须基于网络!!!!

2.2 maven使用原理

部件:1.本地仓库  2.私服镜像  3.中央仓库

 

2.3 修改本地仓库路径

1. 配置仓库

 

2. 配置私服镜像

<!-- maven 镜像服务器配置 -->
<mirror>
	<id>nexus</id>
	<name>Tedu Maven</name>
	<mirrorOf>*</mirrorOf>
	<url>http://maven.tedu.cn/nexus/content/groups/public/</url>
</mirror>

3. 添加JDK配置

<profile>    
    <id>jdk18</id>    
    <activation>    
        <activeByDefault>true</activeByDefault>    
        <jdk>1.8</jdk>    
    </activation>    
    <properties>    
        <maven.compiler.source>1.8</maven.compiler.source>    
        <maven.compiler.target>1.8</maven.compiler.target>    
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
    </properties>     
</profile>

2.4 编辑本地仓库路径

 

更新完成后保存.

3. maven高级

3.1 Mavenjar包如何自动依赖

说明:Maven加载jar包的过程

  1. 根据POM文件的坐标首先到本地仓库/私服镜像中查询jar包.
  2. 在引入jar包文件之前,需要先加载该jar包的pom.xml文件,对其中依赖的jar包再次解析.
  3. 解析完成后.实现jar包的自动依赖.

 

3.2 Maven的jar包如何保证不被篡改

SHA1介绍:

安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。

王小云提出了密码哈希函数的碰撞攻击理论,即模差分比特分析法,提高了破解了包括MD5、SHA-1在内的5个国际通用哈希函数算法的概率;给出了系列消息认证码MD5-MAC等的子密钥恢复攻击和HMAC-MD5的区分攻击;提出了格最短向量求解的启发式算法二重筛法;设计了中国哈希函数标准SM3,该算法在金融、国家电网、交通等国家重要经济领域广泛使用。 [1] 

 

3.3 Mavenjar包依赖关系

如果parent项目中依赖jar包.但是自己项目同样依赖jar包则以自己的依赖为准.

 

3.4 如何解决jar包冲突问题

依赖A-----B.1.0.jar     

依赖C-----B.2.0.jar

解决思路:去除低版本jar包.

3.5 如何确定jar包版本关系

说明:架构师准备项目时需要保证jar包版本匹配.

网址: http://mvnrepository.com/

Jar包依赖关系

4. 项目构建

4.1 分布式项目中存在的问题

问题描述:

1.根据项目拆分的思想,可以将项目根据垂直拆分和水平拆分.将大型项目拆分为不同的小项目但是jar包管理几份??如果jar包多份,将来扩展不易.

 

4.2 分布式项目中jar包如何管理

说明:采用parent的形式,将项目中公共的jar包进行管理.其他的项目只需要继承parent即可.实现了jar包的统一管理.

 

4.3 分布式项目中工具类如何管理

说明:如果将工具代码分别保存到不同的项目中,如果对工具类方法进行编辑.则需要修改多次.对编程不易.

 

4.4 解决方案

说明:在分布式项目中需要使用jar包的统一管理方式,还有工具类的统一的管理方式.所以创建jt-parent和jt-common.

把上述的2个项目叫做业务的支持系统

将jt-manage/jt-cart/jt-web/jt-order等项目称之为业务系统.搭建一个大型的项目.必须添加业务的支撑系统.

 

4.5 京淘项目划分

序号

项目名称

主要作用

1

jt-manage

京淘后台管理系统 负责商品的更新和维护

2

jt-web

京淘前台系统,主要负责商品的展现

3

jt-cart

京淘购物车系统,负责用户购物车信息维护

4

jt-sso

京淘单点登陆系统,实现session数据共享

5

jt-order

京淘订单系统,负责订单维护

6

jt-search

京淘项目的全文检索

7

jt-rabbitMQ

消息队列系统

8

jt-parent

负责jar包的管理和依赖

9

jt-common

管理工具类文件

5. 构建jt-parent

5.1 创建项目

5.2 添加jar包文件

<!-- 集中定义依赖版本号 -->
<properties>
	<junit.version>4.10</junit.version>
	<spring.version>4.1.3.RELEASE</spring.version>
	<mybatis.version>3.2.8</mybatis.version>
	<mybatis.spring.version>1.2.2</mybatis.spring.version>
	<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
	<mysql.version>5.1.32</mysql.version>
	<bonecp-spring.version>0.8.0.RELEASE</bonecp-spring.version>
	<druid.version>1.0.29</druid.version>
	<mapper.version>2.3.2</mapper.version>
	<pagehelper.version>3.4.2</pagehelper.version>
	<jsqlparser.version>0.9.1</jsqlparser.version>
	<slf4j.version>1.6.4</slf4j.version>
	<jstl.version>1.2</jstl.version>
	<servlet-api.version>2.5</servlet-api.version>
	<jsp-api.version>2.0</jsp-api.version>
	<joda-time.version>2.5</joda-time.version>
	<commons-lang3.version>3.3.2</commons-lang3.version>
	<commons-fileupload.version>1.3.1</commons-fileupload.version>
	<jackson.version>2.4.2</jackson.version>
	<httpclient.version>4.3.5</httpclient.version>
	<jedis.version>2.6.2</jedis.version>
</properties>

<dependencies>
	<!-- 单元测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>${junit.version}</version>
		<scope>test</scope>
	</dependency>

	<!-- Spring -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aspects</artifactId>
		<version>${spring.version}</version>
	</dependency>
	
	
	<!-- Mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>${mybatis.version}</version>
	</dependency>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>${mybatis.spring.version}</version>
	</dependency>
	<dependency>
		<groupId>com.github.miemiedev</groupId>
		<artifactId>mybatis-paginator</artifactId>
		<version>${mybatis.paginator.version}</version>
	</dependency>

	
	<!-- MySql -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>${mysql.version}</version>
	</dependency>

	<!--引入阿里druid监控  -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>${druid.version}</version>
	</dependency>

	<!-- 通用Mapper -->
	<dependency>
		<groupId>com.github.abel533</groupId>
		<artifactId>mapper</artifactId>
		<version>${mapper.version}</version>
	</dependency>

	<!-- 分页插件 -->
	<dependency>
		<groupId>com.github.pagehelper</groupId>
		<artifactId>pagehelper</artifactId>
		<version>${pagehelper.version}</version>
	</dependency>
	<dependency>
		<groupId>com.github.jsqlparser</groupId>
		<artifactId>jsqlparser</artifactId>
		<version>${jsqlparser.version}</version>
	</dependency>

	<!-- 连接池 -->
	<dependency>
		<groupId>com.jolbox</groupId>
		<artifactId>bonecp-spring</artifactId>
		<version>${bonecp-spring.version}</version>
	</dependency>

	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-log4j12</artifactId>
		<version>${slf4j.version}</version>
	</dependency>

	<!-- Jackson Json处理工具包 -->
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>${jackson.version}</version>
	</dependency>

	<!-- httpclient -->
	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
		<version>${httpclient.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpmime</artifactId>
		<version>4.3.1</version>
	</dependency>
	
	<!-- 消息队列 -->
	<dependency>
		<groupId>com.rabbitmq</groupId>
		<artifactId>amqp-client</artifactId>
		<version>3.5.1</version>
	</dependency>
	<dependency>
	       <groupId>org.springframework.amqp</groupId>
	       <artifactId>spring-rabbit</artifactId>
	       <version>1.4.0.RELEASE</version>
	</dependency>

	<!-- JSP相关 -->
	<dependency>
		<groupId>jstl</groupId>
		<artifactId>jstl</artifactId>
		<version>${jstl.version}</version>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>${servlet-api.version}</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jsp-api</artifactId>
		<version>${jsp-api.version}</version>
		<scope>provided</scope>
	</dependency>

	<!-- 时间操作组件 -->
	<dependency>
		<groupId>joda-time</groupId>
		<artifactId>joda-time</artifactId>
		<version>${joda-time.version}</version>
	</dependency>

	<!-- Apache工具组件 -->
	<dependency>
		<groupId>org.apache.commons</groupId>
		<artifactId>commons-lang3</artifactId>
		<version>${commons-lang3.version}</version>
	</dependency>
	<!-- 文件上传组件 -->
	<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>${commons-fileupload.version}</version>
	</dependency>

	<!-- jedis -->
	<dependency>
		<groupId>redis.clients</groupId>
		<artifactId>jedis</artifactId>
		<version>${jedis.version}</version>
	</dependency>

	<!--添加spring-datajar包  -->
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-redis</artifactId>
		<version>1.4.1.RELEASE</version>
	</dependency>
	
	<!-- 字符加密、解密 -->
	<dependency>
		<groupId>commons-codec</groupId>
		<artifactId>commons-codec</artifactId>
		<version>1.9</version>
	</dependency>

	<!-- 数据校验 -->
	<dependency>
		<groupId>org.hibernate</groupId>
		<artifactId>hibernate-validator</artifactId>
		<version>5.1.3.Final</version>
	</dependency>
</dependencies>

6. 构建工具类项目

6.1 创建项目

 

6.2 添加继承

说明:jt-parent必须是pom类型

 

6.3 导入工具类

说明:将课前资料中的工具类项目中src文件导入项目中

说明:编辑完工具类后,分别将jt-parent和jt-common打包

7. 构建jt-manage

7.1 创建项目

1.选择骨架

2.编辑项目

3.补全项目文件路径

 

7.2 添加继承和依赖

1. 继承

2. 依赖

继承和依赖的关系:

继承:获取父级项目全部的jar包(多)

依赖:某些项目中需要引入额外的jar包 所以采用依赖的方式.(单个)

8. tomcat插件

8.1 传统tomcat服务器弊端

1. eclipse中整合tomcat时,配置繁琐.

2. tomcat使用一段时间后,tomcat启动时间越来越长.

因为里边的项目变多了,生成了大量的临时文件.造成启动慢

3. 搭建tomcat集群时,必须修改端口 8005/8080/8009

 

8.2 Tomcat插件介绍

说明:tomcat插件在程序启动时,会开启单独的线程加载tomcat,在tomcat中部署的项目,只有在线程工作时才能正常访问.即使生成了大量的临时文件则也在内存中.当线程关闭(tomcat服务).

搭建tomcat集群时只需要修改8080端口即可.

 

8.3 Tomcat插件配置

1.添加插件

<build>
	<plugins>
		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<port>8091</port>
				<path>/</path>
			</configuration>
		</plugin>
	</plugins>
</build>

2.配置启动项

3.添加源码

4.tomcat启动报错

图中表示tomcat端口被占用.关闭服务即可.

5.打包报错

如果出现上述报错,则按照顺序jt-parent/jt-common/jt-manage

9. 项目水平拆分

9.1 概念描述

说明:按照程序的层级进行拆分(聚合项目)

View层----Controller----Service------dao-------pojo

 

9.2 项目创建

1. 创建项目jt-aa

2. 项目类型划分

Jt-aa-controller  war包

Jt-aa-service   jar包

Jt-aa-dao          jar包

Jt-aa-pojo         jar包

 

9.3 水平拆分项目创建规则

1. 选择模块类型

2. 创建子模块

3. 根据规则创建模块项目

 

9.4 水平拆分后项目依赖关系

依赖顺序:

Controller----Service------dao-------pojo

添加继承和依赖

1.父级项目继承

2.aa中的依赖

3.聚合项目详情

打包:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值