關於e3mall項目的實戰

day1:

安排:

分佈式:html

按照功能點把系統拆分紅獨立的功能,單獨爲某一結點添加服務器.
		例如:訂單系統須要兩臺 而單點登陸系統須要10臺...
複製代碼

SOA:前端

面向服務的架構 ,是把業務層和服務層拆分,而不是根據功能拆分 
複製代碼

後臺工程搭建java

用Maven搭建:
		e3-parent:父工程,打包方式pom,管理jar包的程序員
			|		項目中全部工廠都應該繼承父工程.
			|-e3-common:通用的工具類通用的pojo,打包方式jar
			|-e3-manager:服務層工程.聚合工程,Pom工程
				|-e3-manager-dao   jar
				|-e3-manager-pojo  jar
				|-e3-manager-interface	jar
				|-e3-manager-service	jar
				|-e3-manager-web	表現層工廠,打包方式war

	**須要在manager的pom裏面設置tomcat ,而後訪問local:host:8080
複製代碼

逆向工程建立表node

mapper放到dao
	pojo放到pojo
複製代碼

ssm整合mysql

1.dao層
	mybatis的配置文件:SqlMapConfig.xml
		不須要配置任何內容,須要有文件頭,文件必須存在
	applicationContext-dao.xml(spring配置文件)
	mybatis整合spring,經過spring管理SqlSessionFactory mapper代理對象,須要mybatis
		和spring 的整合包
		
2.service層:
	applicationContext-service.xml:
	全部的service實現類都放在spring容器中管理,並有spring管理事務

3.表現層
	Springmvc框架,由springmvc管理controller
	springmvc的三大組件

作法:在e3-manager-web下面recouces中建立
	conf:db.properties
	mybatis:SqlMapConfig.xml
	spring:applicationContext-dao.xml    管理dao層數據
			applicationContext-service.xml管理service層數據
			applicationContext-trans.xml	管理trans層數據
			
整合測試

svn:建新庫java-EE32
複製代碼

問題存疑:

  • SOA:沒學過.linux

  • !!maven 的tomcat插件使用會報錯!!nginx

  • 解決了一部分:在pom裏面加了一個...true...git

    svn沒學過程序員

解決了的問題:

  • 1.在interface裏面建serviceImpl,但由於Intefface裏面的pom中沒配置spring的jar包,因此一直失敗

day2:

  • 單一應用架構 :當網站流量很小時,只需一個應用,將全部功能都部署在一塊兒,以減小部署節點和成本。此時,用於簡化增刪改查工做量的數據訪問框架(ORM)是關鍵。
  • 垂直應用架構 : 當訪問量逐漸增大,單一應用增長機器帶來的加速度愈來愈小,將應用拆成互不相干的幾個應用,以提高效率。 此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
  • 分佈式服務架構 : 當垂直應用愈來愈多,應用之間交互不可避免,將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。 此時,用於提升業務複用及整合的 分佈式服務框架(RPC) 是關鍵。
  • 流動計算架構 : 當服務愈來愈多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增長一個調度中心基於訪問壓力實時管理集羣容量,提升集羣利用率。 此時,用於提升機器利用率的 資源調度和治理中心(SOA) 是關鍵。

安排:把後臺改爲soa框架 dubbo 安裝zookeeper

作了什麼?

  1. 把工程改成soa框架github

    因爲宜立方商城是基於soa的架構,表現層和服務層是不一樣的工程。因此要實現商品列表查詢須要兩個系統之間進行通訊。

如何實現遠程通訊?

一、Webservice:效率不高基於soap協議。項目中不推薦使用。
二、使用restful形式的服務:http+json。不少項目中應用。若是服務太多,服務之間調用關係混亂,須要治療服務。
三、使用dubbo。使用rpc協議進行遠程調用,直接使用socket通訊。傳輸效率高,而且能夠統計出系統之間的調用關係、調用次數。
複製代碼
  1. Zookeeper:

    • 能夠做爲集羣的管理工具使用。
    • 能夠集中管理配置文件。

    要先把zookeeper啓動,而後開啓linux中的tomcat,再而後開啓eclipce中的manager manager-web 的clean tomcat7:run

開啓pagehelper

1.先把pageHelper工程導進來
2.在manager-servic 中的sqlMapCOnfig中配置plugin
		<plugin interceptor="com.github.pagehelper.PageHelper">
		<!-- 設置數據庫類型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種數據庫-->        
    	<property name="dialect" value="mysql"/>
3.新建pageHelper類(test中)
在interface中的ItemService中定義EasyUIDataGridResult接口
在service 中的ItemService中實現類
表現層:在web中的COntroller中調用
複製代碼

問題存疑:

對於dubbo不熟悉,須要瞭解
複製代碼

DAY3

安排:

  • 商品類目選擇
  • Nginx的介紹以及配置..

作了什麼?

準備工做

先開虛擬機 開啓zookeeper,而後啓動manager ,manager-web cd zookeeper-3.4.6/bin ./zkServer.sh start

1. 商品類目選擇

**實現層:**
- [ ] 先在common的pojo中創建EasyUITreeNode,id text state屬性 get/set
- [ ] 而後在interface中聲明ItemCatSerice接口
- [ ] 在service中創建ItemCatServiceImpl實現類繼承上述接口
``` java
@Autowired
private TbItemCatMapper ItemCatMapper;
@Override
public List<EasyUITreeNode> getItemCatlist(long parentId) {
	//根據parentId查詢子節點列表
	TbItemCatExample example=new TbItemCatExample();
	Criteria criteria = example.createCriteria();
	//設置查詢條件
	criteria.andParentIdEqualTo(parentId);
	//執行查詢
	List<TbItemCat> list = ItemCatMapper.selectByExample(example);
	//建立返回結果List
	List<EasyUITreeNode> resultList=new ArrayList<>();
	//把列表轉換成EasyUITreeoce列表
	for (TbItemCat tbItemCat : list) {
		EasyUITreeNode node=new EasyUITreeNode();
		//設置屬性
		node.setId(tbItemCat.getId());
		node.setText(tbItemCat.getName());
		node.setState(tbItemCat.getIsParent()?"closed":"open");
		//添加到結果列表
		resultList.add(node);
	}
	return resultList;
}

``` 
- [ ] 而後再service.xml中暴露服務	<dubbo:serviceinterface="cn.e3mall.service.ItemCatService" ref="itemCatServiceImpl" timeout="600000"/>

**表現層:**
- [ ] 在web中創建ItemCatController  
 ``` java
-@Autowired
private ItemCatService itemCatService;

@RequestMapping("/item/cat/list")
@ResponseBody
public List<EasyUITreeNode> getItemCatList(
		@RequestParam(name="id",defaultValue="0")Long parentId){
	//調用服務查詢節點列表
	List<EasyUITreeNode> list = itemCatService.getItemCatlist(parentId);
	return list;
``` 
- [ ] 而後在web的springmvc中引用dubbo服務
<dubbo:reference interface="cn.e3mall.service.ItemCatService" id="itemCatService" />
複製代碼

2.Nginx: 是一款高性能的http服務器/反向代理服務器以及電子郵件代理服務器

  • 作HTTP服務器
  • 虛擬主機,能夠實如今一臺服務器虛擬出多個網站
  • 反向代理,負載均衡

    linux開啓nginx:cd /usr/local/ 而後cd nginx 開啓sbin/nginx 關閉 sbin/nginx -s quit 刷新 sbin/nginx -s reload 查詢是否開啓-aux|grep nginx 修改域名端口.. cd /usr/local/ cd nginx vim nginx.conf,在裏面改域名和端口

反向代理: 我有兩個網站天貓 淘寶,只有一個公用ip,爲了節約成本,一個域名只能綁定一個ip 而後兩個分別部署到兩個tomcat中,而後服務端到nginx中,由它來決定到哪一個服務器 經過一個nginx做爲入口,根據不一樣的請求轉發到不一樣的地方

負載均衡: 在upstream中加一個server ip地址:端口號; 兩臺服務器用同一個網址時一人一次 (例如訪問www.sina.com時index.html每人一次,若是IAOweight則是按權重分配) 實現高可用:(瞭解)

問題存疑:

  • 對於nginx的主要做用不夠了解,需複習

DAY4

安排:

  • 圖片上傳(還未作) a.圖片服務器FastDFS b.圖片上傳功能實現
  • 富文本編輯器的使用KindEditor
  • 商品添加功能完成

作了什麼?

  1. 圖片服務器的安裝

    • 存儲空間可擴展
    • 提供一個統一的訪問方式
    • 使用FastDFS,分佈式文件系統,存儲空間能夠橫向擴展,能夠實現服務器的高可用,支持每一個節點有備份機

    首先得把虛擬機的網絡編輯器改爲192.168.25.0(而後能夠改回來) 而後開啓這個圖片服務器,導入這個測試的工程,install後在web中加入這個工程做爲jar包,而後在web中作一個測試方法便可(或者直接工具類) 而後192.168.25.133/group1/.....訪問便可

  2. kindEditor

    返回格式(json)

  3. 圖片上傳功能實現

    在pom.xml中把文件上傳組件粘貼到web pom中 在controller中寫程序代碼,在springmvc裏面掃描conf/recource.properties中的圖片服務器ip地址 或者直接用

    @Value("${IMAGE_SERVER_URL}")
    private  String IMAGE_SERVER_URL;
    
    @RequestMapping(value="/pic/upload",produces=MediaType.TEXT_PLAIN_VALUE+";charset=utf-8")
    @ResponseBody
    public String uploadFile(MultipartFile uploadFile) {
    	try {
    		// 把圖片上傳導圖片服務器
    		FastDFSClient fastDFSClient = new FastDFSClient("classpath:conf/client.conf");
    		//取文件擴展名
    		String originalString =uploadFile.getOriginalFilename();
    		String extName=originalString.substring(originalString.lastIndexOf(".")+1);
    		// 獲得一個圖片的地址和文件名
    		
    		String url=fastDFSClient.uploadFile(uploadFile.getBytes(), extName);
    		// 補充爲完整的url
    		url=IMAGE_SERVER_URL+url;
    		// 封裝到map中返回
    		Map resultMap=new HashMap<>();
    		resultMap.put("error", 0);
    		resultMap.put("url", url);
    		return JsonUtils.objectToJson(resultMap);
    	} catch (Exception e) {
    		e.printStackTrace();
    		Map resultMap=new HashMap<>();
    		resultMap.put("error", 1);
    		resultMap.put("message", "圖片上傳失敗");
    		return JsonUtils.objectToJson(resultMap);
    	}
    複製代碼
  4. 遊覽器兼容問題解決

  5. 富文本編輯器

  6. 商品添加功能實現

    • 把e3Result放到common中,用來(響應結果)
      • 注:由於要從service層傳到表現層,因此要實現序列化接口
    • 把IdUtils放到common中,用來生成id
    • 在ItemService中加接聲明E3Result addItem(TbItem item,String desc);
      • 由於Tbitem中沒有商品描述,因此要本身加上去 -在ItemServiceImpl加實現方法
    @Autowired
    private TbItemDescMapper itemDescMapper;
    	@Override
    public E3Result addItem(TbItem item, String desc) {
    	//生成商品id
    	long itemId=IDUtils.genItemId();
    	//補全item的屬性
    	item.setId(itemId);
    	//1-正常 2-下架 3-刪除
    	item.setStatus((byte) 1);
    	item.setCreated(new Date());
    	item.setUpdated(new Date());
    	//向商品表插入數據
    	itemMapper.insert(item);
    	//建立一個商品描述表對應的pojo對象
    	TbItemDesc itemDesc=new TbItemDesc();
    	//補全屬性
    	itemDesc.setItemId(itemId);
    	itemDesc.setItemDesc(desc);
    	itemDesc.setCreated(new Date());
    	itemDesc.setUpdated(new Date());
    	//向商品描述表插入數據
    	itemDescMapper.insert(itemDesc);
    	//返回成功
    	return E3Result.ok();
    複製代碼
    • 在ItemController中加一個方法
    @RequestMapping(value="/item/save",method=RequestMethod.POST)
    @ResponseBody
    public E3Result addItem(TbItem item,String desc) {
    	E3Result result = itemService.addItem(item, desc);
    	return result;
    }
    複製代碼

問題存疑:

相關文章
相關標籤/搜索