项目说明:
(避免并发问题(1000并发一个Tomcat500并发)&Tomcat 集群(session问题,配置广播信息)&配置Session(Tomcat的Session复制占用带宽,网络风暴)&多集群(tomcat集群5个作用)&受限制的复制带宽(10000并发)&警惕网络风暴&分布式消息跟踪系统设计(系统与系统之间通信协作,集群一套代码部署多份,分布式一个系统拆分多个子系统,团队隔离不干扰,系统扩展方便)&缓存模式&SOAP 简介&(查询商品一样的服务,代码没办法复用)&WebService& RPC服务框架:Dubbo&(服务使用Dubbo中间件进行管理调用服务)&ActiveMQ & JMS(系统之间解耦))
项目框架:
SSM框架的搭建说明
(pom.xml配置(Parent跳过骨架,需不要继承其他)&Manager(统一定义版本号,propereties,dependencyManagement依赖管理管理版本号,不会依赖jar包,只是统一定义版本号)&添加jacksonJSON解析处理类库并运行(spring必须要依赖jackson)&创建buildxml 文件(指定字符集与Java编译插件,tomcat的插件)&)
taotao-parent
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
pom
4.12
4.2.4.RELEASE
3.2.8
1.2.2
1.2.15
5.1.32
1.6.4
2.4.2
1.0.9
4.3.5
1.2
2.5
2.0
2.5
3.3.2
1.3.2
3.3
3.4.2-fix
0.9.1
1.3.1
2.7.2
4.10.3
2.5.3
3.4.7
0.1
5.11.2
2.3.23
2.2.2
joda-time
joda-time
${joda-time.version}
org.apache.commons
commons-lang3
${commons-lang3.version}
org.apache.commons
commons-io
${commons-io.version}
commons-net
commons-net
${commons-net.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
org.apache.httpcomponents
httpclient
${httpclient.version}
org.quartz-scheduler
quartz
${quartz.version}
junit
junit
${junit.version}
test
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
com.github.miemiedev
mybatis-paginator
${mybatis.paginator.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-jms
${spring.version}
org.springframework
spring-context-support
${spring.version}
jstl
jstl
${jstl.version}
javax.servlet
servlet-api
${servlet-api.version}
provided
javax.servlet
jsp-api
${jsp-api.version}
provided
commons-fileupload
commons-fileupload
${commons-fileupload.version}
redis.clients
jedis
${jedis.version}
org.apache.solr
solr-solrj
${solrj.version}
com.alibaba
dubbo
${dubbo.version}
org.apache.zookeeper
zookeeper
${zookeeper.version}
com.github.sgroschupf
zkclient
${zkclient.version}
org.apache.activemq
activemq-all
${activemq.version}
org.freemarker
freemarker
${freemarker.version}
${project.artifactId}
org.apache.maven.plugins
maven-resources-plugin
2.7
UTF-8
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.7
1.7
UTF-8
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
( Commons组件(新建web project 目录级别平级的一个jar包,平级目录也可以继承partent配置)&依赖注入(Dependency Injection)(依赖传递与实际依赖))
taotao-common
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
com.taotao
taotao-common
0.0.1-SNAPSHOT
joda-time
joda-time
org.apache.commons
commons-lang3
org.apache.commons
commons-io
commons-net
commons-net
com.fasterxml.jackson.core
jackson-databind
org.apache.httpcomponents
httpclient
org.quartz-scheduler
quartz
junit
junit
test
org.slf4j
slf4j-log4j12
pojo类
package com.taotao.common.pojo;
import java.io.Serializable;
import java.util.List;
public class EasyUIDataGridResult implements Serializable{
private long total;
private List rows;
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
}
(构建WAR文件(创建聚合工厂下面再创建模块,选择pom,也要继承父工程,DAO选择模块打包方式jar包)&依赖(项目之间的依赖)Tbmcat Admin webapp&解决中文乱码&MyBatis逆向工程(Dao依赖pojo,打包方式Jar包,添加MyBatis依赖)&编写Service层处理逻辑(调用服务通过接口调用,打包方式为jar,依赖pojo,service聚合工程是war包要把jar包聚合进来,war包要有web目录工程,服务层要用到spring容器)&Web Service(src/main/webapp相当于webroot根目录需要有一个WEB-INF/web.xml)&web.xml文件(乱码过滤器只有表现层post提交才需要,)&)
taotao-manager做为聚合项目要进行统一管理
taotao-manager
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
com.taotao
taotao-manager
0.0.1-SNAPSHOT
pom
com.taotao
taotao-common
0.0.1-SNAPSHOT
taotao-manager-dao
taotao-manager-pojo
taotao-manager-interface
taotao-manager-service
org.apache.tomcat.maven
tomcat7-maven-plugin
/
8080
(简单配置Spring(web要独立运行,Maven工程,打包war)&创建web.xml文件(web项目可独立部署))
(启动Web应用程序&列出已经部署的Web应用程序&配置Web应用服务器Tomcat(Tomcat插件是Maven插件不要本地安装Tomcat,从公网下载tomcat的jar包放在仓库,也是Java开发直接运行,tomcat插件有个path/ 启动工程的工程名,不需要工程名) &port:查看服务容器端口状态(不配port默认8080)&Clean生命周期()&通过M2Release 插件管理Maven 版本发布&修改启动端口&编译打包运行&启动应用(Maven build clean tomcat7:run )&打包和运行(Update project刷新pom文件之间的依赖关系,Maven install)&的<welcome>简单标签(启动访问就能看到,))
(聚合(所有war包都会把jar包加入进去,有个聚合工厂,有任何修改不需要安装,运行聚合工程manager,Maven build )&Clean生命周期(把之前编译的目标文件删除之后,再重新编译一遍)&)
(在Eclipse中创建Library库(打成jar包,访问jar包里的配置文件,在最终运行的war包中service下的lib下的配置文件中,都是classpath)&创建MyBatis映射的相关文件(main/resources/)&配置applicationContext.xml文件(mybatis与spring的整合,配置数据库连接池,SqlSessionFactory,Mapper映射文件的包扫描器,加载配置文件context-property-placeholderlocation=”classpath:propertiees/db.properties”后面不能有空格)&MapperScannerConfigurer(包扫描器,加载全局的配置文件必须要有,basePackage)&Spring整合MyBatis(sqlSessionFactory dataSource name=”configuration” value=”classpath:mybatis/sqlMapConfig.xml”)&sqlSessionFactory创建&)
(创建Service对象(扫描所有带service注解的类放在容器中,context:component-scan base-package=””子包也能扫描到)&启用自动配置注解&hibernatetransactionmanager的实现(事务管理器DataSourceTransactionManager指定数据源)&数据库通知(txAdvice通知,以save等单词开头会开启事务,read-only不需要开启事务)&应用切面(advisor
Advice-ref=”txAdvice” pointcut=”execution(* com.taotao.service.*.*(..))”)&)
(初始化pring 应用(web.xml )&Spring容器&ContextLoaderListener(初始化srpigng容器,加载context-param contextConfigLocation param-value classpath:spring/application-*.xml)&DispatcherServlet(前端控制器,)&DispatcherServlet的初始化&父子容器(spring父容器ContextLoaderListener,配置前端控制器之后子容器DispatcherServlete初始化,子容器可以访问父容器,父容器不可以访问子容器,父容器Dao或者Service,子容器放入Controller,子容器可以注入Dao)&)
taotao-manager-pojo
pom.xml
4.0.0
com.taotao
taotao-manager
0.0.1-SNAPSHOT
taotao-manager-pojo
4.0.0
com.taotao
taotao-manager
0.0.1-SNAPSHOT
taotao-manager-pojo
taotao-manager-dao
pom.xml
4.0.0
com.taotao
taotao-manager
0.0.1-SNAPSHOT
taotao-manager-dao
com.taotao
taotao-manager-pojo
0.0.1-SNAPSHOT
org.mybatis
mybatis
org.mybatis
mybatis-spring
com.github.miemiedev
mybatis-paginator
com.github.pagehelper
pagehelper
mysql
mysql-connector-java
com.alibaba
druid
src/main/java
**/*.xml
taotao-manager-interface
pom.xml
4.0.0
com.taotao
taotao-manager
0.0.1-SNAPSHOT
taotao-manager-interface
com.taotao
taotao-manager-pojo
0.0.1-SNAPSHOT
ItemService
package com.taotao.service;
import com.taotao.common.pojo.EasyUIDataGridResult;
import com.taotao.pojo.TbItem;
public interface ItemService {
TbItem getItemById(long itemId);
EasyUIDataGridResult getItemList(int page, int rows);
}
taotao-manager-service
pom.xml
4.0.0
com.taotao
taotao-manager
0.0.1-SNAPSHOT
taotao-manager-service
war
com.taotao
taotao-manager-dao
0.0.1-SNAPSHOT
com.taotao
taotao-manager-interface
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects
org.springframework
spring-jms
org.springframework
spring-context-support
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
web.xml
taotao-manager
index.jsp
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
SqlMapConfig.xml
spring
applicationContext-dao.xml
applicationContext-service.xml
applicationContext-trans.xml
ItemServiceImpl.java
package com.taotao.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.pojo.EasyUIDataGridResult;
import com.taotao.mapper.TbItemMapper;
import com.taotao.pojo.TbItem;
import com.taotao.pojo.TbItemExample;
import com.taotao.service.ItemService;
/**
* 商品管理Service
* Title: ItemServiceImpl
* Description:
* Company: www.itcast.cn
* @version 1.0
*/
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(long itemId) {
TbItem item = itemMapper.selectByPrimaryKey(itemId);
return item;
}
@Override
public EasyUIDataGridResult getItemList(int page, int rows) {
//设置分页信息
PageHelper.startPage(page, rows);
//执行查询
TbItemExample example = new TbItemExample();
List list = itemMapper.selectByExample(example);
//取查询结果
PageInfo pageInfo = new PageInfo(list);
EasyUIDataGridResult result = new EasyUIDataGridResult();
result.setRows(list);
result.setTotal(pageInfo.getTotal());
//返回结果
return result;
}
}
(Spring注解驱动设计模式(mvc约束前缀,mvc:annotation-driven)&视图和视图解析器&(bean InternalResourceViewResolver property name=”prefix” value=”/WEB-INF/jsp/”)@Controller注解(包扫描器,扫描带controller注解的内容,context;component-scan base-package=”com.”)&解决中文乱码(post乱码过滤器CharacterEncodingFilter,前端控制器servlet-name DispatchercontextConfigLocationclasspath:spring/springmvc.xml )&load-on-startup Servlet(load-on-startup tomcat启动加载servlet)&对象/关系数据库映射(ORM)(拦截形式url-pattern>/ 拦截所有请求,不要/*会拦截jsp,也会拦截静态资源)&)
(资源和表现层(服务层表现层分开了,工程与工程之间相互调用)&WebService(webService效率不高,使用Dubbo实现服务层与表现层之间通信)&)
(修改字符集(新建数据库,选择字符集)&脚本文件安装(sql脚本文件,右键运行脚本文件,创建工程中用到的表并且导入测试数据,)& MyBatis逆向工程(逆向工程配置文件,连接数据库配置信息与生成pojo存放路径,逆向生成代码分为三类,pojo,一种mapper映射文件与Mapper接口,)&逆向工程配&逆向数据文件生成类&运行测试方法&测试生成的数据文件&)
taotao-manager-web
pom.xml
4.0.0
com.taotao
taotao-parent
0.0.1-SNAPSHOT
com.taotao
taotao-manager-web
0.0.1-SNAPSHOT
war
com.taotao
taotao-common
0.0.1-SNAPSHOT
com.taotao
taotao-manager-interface
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects
org.springframework
spring-jms
org.springframework
spring-context-support
jstl
jstl
javax.servlet
servlet-api
provided
javax.servlet
jsp-api
provided
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
org.apache.tomcat.maven
tomcat7-maven-plugin
/
8081
web.xml
taotao-manager-web
index.jsp
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
taotao-manager-web
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc.xml
1
taotao-manager-web
/
springmvc.xml
PageController.java
package com.taotao.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 页面展示Controller
* Title: PageController
* Description:
* Company: www.itcast.cn
* @version 1.0
*/
@Controller
public class PageController {
@RequestMapping("/")
public String showIndex() {
return "index";
}
@RequestMapping("/{page}")
public String showPage(@PathVariable String page) {
return page;
}
}
ItemController.java
package com.taotao.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.common.pojo.EasyUIDataGridResult;
import com.taotao.pojo.TbItem;
import com.taotao.service.ItemService;
/**
* 商品管理Controller
* Title: ItemController
* Description:
* Company: www.itcast.cn
* @version 1.0
*/
@Controller
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping("/item/{itemId}")
@ResponseBody
public TbItem getItemById(@PathVariable Long itemId) {
TbItem tbItem = itemService.getItemById(itemId);
return tbItem;
}
@RequestMapping("/item/list")
@ResponseBody
public EasyUIDataGridResult getItemList(Integer page, Integer rows) {
EasyUIDataGridResult result = itemService.getItemList(page, rows);
return result;
}
}
(Spring集成Dubbo&远程过程调用协议(关系越来越多,调用越来越乱,需要服务治理工具Dubbo,统一注册管理工具)&)
(基于Dubbo实现分布式调用跟踪系统方案(每次调用服务去注册中心调用服务,provider与consumer之间进行通信)&基于ZooKeeper实现分布式配置管理平台方案(zookeeper作为注册中心,集群管理工具)&ooKeeper的下载与集群安装&)
(安装Zookeeper(rm -rf * 客户端连接zookeeper默认端口2181)&重要的Linux基础命令&SSH和文件传输(scp和sftp)(SecureCRT,)&创建和修改配置文件(mkdir data )&vim程序编辑器(cd ll bin ll conf vim zoo.cfg pwd dataDir) &打包命令:tar(tar zxf zookeeper-3.tar.gz) &XFS文件系统的备份与还原&复制、删除与移动:cp、rm、mv&相对路径与绝对路径(mv zoo.cfg)& start:启动服务容器( ./zkServer.sh start ./status)& stop:停止服务容器(./zkServer.sh stop)&)
(Dubbo配置(发布服务dubbo:service interface ref直接引入容器中的bean对象启动容器自动发布服务,引入Dubbo相关的Jar包,发布Dubbo服务要配置注册中心的application的name与注册中心的地址)& Dubbo Bean的加载(调用服务dubbo:reference id来引用服务)&long与double的操作不是原子的&注解@Autowired()&排除依赖&基于schema设计解析&基于XML配置实现&服务暴露的实现原理&本地服务的暴露机制(service模块添加对interface模块的引用)&排除依赖&(要把Duubo引入的低版本的Netty与Spring排除))
(单注册中心消费原理&Dubbo远程调用&Dubbo调用介绍&@ResponseBody转换为JSON的秘密(响应Json数据)&Feign声明式调用 406(如果没有把jackSon的jar包加入会发生406的错误)&使用jackson在服务端将JSON字符串转换成各种Java数据类型&)
(Mapper映射文件(解决mapper映射文件不发布的问题,没有把xml文件发布到target目录下,要在build中配置directory路径)&)
(复制、删除与移动:cp、rm、mv &微服务监控中心(Dubbo的监控中心是一个war包,发布到tomcat中启动cp dubbo-admin.war tomcat/webapps/dubbo-admin.war bin/startup.sh tail -f logs/catalina.log。推荐把监控中心与注册中心(zookeeper)安装在一台服务器上,监控连接zookeeper来判断调用关系,如果不再同一台机器,需要修改dubbo-adim中WEB-INF/下的dubbo.properties配置文件,修改zookeeper的地址即可)&)
(静态资源映射(mvc:resources location=”/css/” mapping=”/css/**”是url路径下的多级目录)&点缀 EasyGrid&)
(MyBatis插件机制(xml文件中配置分页插件,plugin在执行查询之前拦截sql语句拼接sql语句,再配置上数据库的方言dialect)&使用MyBatis分页插件pagehelper(startPage两个参数,第几页,每页大小)&从getBean()方法开始&)
(RequestMapping注解(形参名称与参数一致即可映射过来)&)
(源码分析(Debugger需要在configuration中添加源代码/source 添加对应的Java project模块,要注意是否为Spring的@service注解,Dubbo也有service注解)&)
(SVN配置仓库(创建SVN仓库)&应用基于主干的开发实践(代码放在trunk主干里,在分支里开发完毕,之后要把修改内容合并到主干里,发布之后就要建立一个分支,主干向前开发,有bug在分支里修改,保证主干内容是最新的)&基于特性分支的开发(tag标签,根据书签去取哪一个版本)&配置SVN资源库(Copy URL,)&将项目发布到服务器(share Project,创建新的SVN资源库,使用项目名称,之后再trunk下新建一个项目,看到本地与服务端的差异,+要上传的,同步刷新区别,不要把setting project上传服务端添加svn igonore,WINDOW perference SVN Ingore resources Add .settings .project .classPath)&提交(Commit)修改(提交之前先更新,之后提交,提交聚合工厂,不要提交模块会重复提交,要忽略target再提交,先提交pom文件夹,提交之后刷新一下,底下的子文件dao,interface,pojo,service隐藏逻辑删除引用,引用存在的Maven工程)&同步(Update)本地文件()&)
(使用Eclipse作为SVN客户端(SVN资源库研究,废弃位置,千万不能在SVN资源库删除代码,Import 从SVN检出项目,可以多选检出,不要后退)&converter (转为Maven工程,先转parent,再转common,最后Configure-Convert to Maven Project))