Maven多模組+dubbo+zookeeper分散式架構搭建SSM專案
Maven多模組的構建:
一、總體結構預覽
|----parent模組
|-----manage聚合工程模組
| |------pojo類
| |------dao層
| |------service介面層
| |------service實現層
|-----common公共元件
|-----web表現層
Parent父類模組:集中統一管理專案中需要jar包的版本號,打包方式pom;
Manage聚合工程模組:繼承parent模組,集中管理pojo、dao、serivice各層元件,manage模組打包方式為pom包;
pojo繼承manage模組,存放實體類,打包為jar;
dao繼承manage模組,負責與資料庫互動,打包為jar;
service介面繼承manager模組,提供服務模組的抽象介面,為暴露對外訪問介面,打包為jar;
service實現層繼承manage模組,用來實現介面,實現業務邏輯,打包為war;
common公共元件模組:繼承parent模組,管理公共元件,如log4j等,打包為jar;
web表現層直接繼承父類,也為控制器層,打包為war包,通過網路通訊與servic介面連結,實現遠端訪問;下面開始丟擲實戰程式碼演示。
二,業務程式碼的具體實現,本專案搭建為SSM框架:
(1).parent
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ssm</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 1.管理jar包的版本 -->
<properties>
<--這裡放入jar包版本,維護室只需要更新該這裡的jar包版本,由於繼承關係,子類模組直接更新-->
<zookeeper.version>3.4.7</zookeeper.version>
</properties>
<!-- 2.新增加jar包 -->
<dependencyManagement>
<dependencies>
<dependence>
這裡放入依賴檔案的座標,版本用el表示式即可
<dependence>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<!-- 配置外掛 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- 配置jdk的版本 -->
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
</project>
(2).common公共元件模組:將需要的jar包從父類依賴進自己的pom.xml中
<projectxmlns="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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ssm</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.ssm</groupId>
<artifactId>ssm-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<denpendence>
這裡寫入依賴的檔案jar包座標
<dependence>
</dependencies>
</project>
(3).manage模組,這個時專案整體業務邏輯的核心點,建立的manage為聚合工程,在manage聚合工程中建立model模組,分別為pojo,dao,service,一級serviceInterface,
模組建完後會在父類工成manage顯示如下:
<modules>
<module>ssm-dao</module>
<module>ssm-service</module>
<module>ssm-pojo</module>
<module>ssm-interface</module>
</modules>
當服務叢集規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分散式服務架構不會帶來阻力:
<!-- 新增依賴,依賴common元件 -->
<dependencies>
<dependency>
<groupId>com.ssm</groupId>
<artifactId>ssm-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- 新增編譯外掛 -->
<build>
<plugins>
<!-- tomcat外掛 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
<!-- jdk外掛 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!-- 配置jdk的版本 -->
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
這裡不在贅述manage下面的子模組的建立,只介紹下最重要的service,在service層裡面需要整合spring和mybatis框架,所以這裡搭建框架的步驟也不再敘述,先看下結構:
直接上配置檔案:其中有dubbo相關配置檔案,這裡先寫進去,一會慢慢介紹
<!-- 1.配置資料庫連線池 -->
<!-- 載入配置檔案 -->
<context:property-placeholderlocation="classpath:properties/db.properties" />
<!-- 資料庫連線池 -->
<bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<property name="url"value="${jdbc.url}" />
<propertyname="username" value="${jdbc.username}" />
<propertyname="password" value="${jdbc.password}" />
<propertyname="driverClassName" value="${jdbc.driver}" />
<propertyname="maxActive" value="10" />
<propertyname="minIdle" value="5" />
</bean>
<!-- 2.配置SqlSessionFactory -->
<!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的-->
<!-- 事務管理器 -->
<beanid="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--資料來源 -->
<propertyname="dataSource" ref="dataSource" />
</bean>
<!--通知 -->
<tx:adviceid="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--傳播行為 -->
<tx:methodname="save*" propagation="REQUIRED" />
<tx:methodname="insert*" propagation="REQUIRED" />
<tx:methodname="add*" propagation="REQUIRED" />
<tx:methodname="create*" propagation="REQUIRED" />
<tx:methodname="delete*" propagation="REQUIRED" />
<tx:methodname="update*" propagation="REQUIRED" />
<tx:methodname="find*" propagation="SUPPORTS"read-only="true" />
<tx:methodname="select*" propagation="SUPPORTS"read-only="true" />
<tx:methodname="get*" propagation="SUPPORTS"read-only="true" />
</tx:attributes>
</tx:advice>
<!--切面 -->
<aop:config>
<aop:advisoradvice-ref="txAdvice"
pointcut="execution(*com.ssm.service.*.*(..))" />
</aop:config>
<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 資料庫連線池 --><property name="dataSource"ref="dataSource" /><!-- 載入mybatis的全域性配置檔案 --><property name="configLocation"value="classpath:mybatis/SqlMapConfig.xml" /></bean><!--3.Mapper對映檔案的包掃描器
--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage" value="com.ssm.dao" /></bean>
<!-- 配置包掃描器,掃描所有帶@Service註解的類 -->
<context:component-scanbase-package="com.ssm.service"/>
<!-- service層釋出dubbo服務 -->
<!-- 提供方應用資訊,用於計算依賴關係 -->
<dubbo:applicationname="ssm-manager" />
<!-- 註冊中心的地址 -->
<dubbo:registryprotocol="zookeeper" address="192.168.40.129:2181" />
<!-- 用dubbo協議在20880埠暴露服務 -->
<dubbo:protocol name="dubbo"port="20880" />
<!-- 宣告需要暴露的服務介面,interface為介面,ref為實現類 -->
<dubbo:serviceinterface="com.ssm.inter.UserServiceInter"ref="userService" timeout="300000"/>
在service層需要提供對外發布的介面,來註冊至zookeeper註冊中心,來供web表現層來呼叫,這裡需要注意的是:dubbo:service interface="提供的時服務層的介面"ref="介面的實現類"
(4).web層:控制器層,這裡使用springmvc:先看結構圖:
其實這裡就是一個springmvc框架而已,在這裡說明下spring於springmvc的區別:spring和springmvc時喲個父子容器,springmvc可以訪問spring容器,但是反過來不成立,或許有人開始質疑,
為什麼不用springmvc直接代替spring容器呢?事實上代替不了,spring框架有著天然的可融合性,與其他的框架可以方便整合起來。所以還是不同的,各司其職。
<?xmlversion="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd ">
<!-- 掃描包路徑:多個包使用逗號隔開 -->
<context:component-scanbase-package="com.ssm.controller"></context:component-scan>
<!-- 配置mvc的註解驅動 -->
<mvc:annotation-driven/>
<!-- 靜態資源不被攔截 -->
<mvc:default-servlet-handler/>
<!-- 對映器作用:請求的URL和Bean名字對映 -->
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 介面卡作用:鑑別專案Bean可以作為SpringWeb MVC中的處理器-->
<beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 檢視解析器 -->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix"value="/"/>
<property name="suffix"value=".jsp"/>
</bean>
<!-- 檔案解析器 -->
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<propertyname="defaultEncoding" value="UTF-8"/>
<!-- 指定所上傳檔案的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個檔案,而是所有檔案的容量之和 -->
<propertyname="maxUploadSize" value="200000"/>
</bean>
<!-- json資料型別轉換 -->
<beanid="mappingJackson2HttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<propertyname="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 註解介面卡:響應體 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<propertyname="messageConverters">
<list>
<refbean="mappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<!-- 引用dubbo服務 -->
<dubbo:applicationname="ssm-web" />
<dubbo:registryprotocol="zookeeper" address="192.168.40.129:2181"/>
<dubbo:referenceinterface="com.ssm.inter.UserServiceInter"id="userServiceInter"/>
</beans>
這裡dubbo為引用服務的介面,需要接入zookeeper註冊中心的地址來通過和zookeeper註冊中西通訊,來間接訪問遠端的服務埠,進行資料的請求和響應。
使用dubbo為中間層不僅專案維護起來帶來便捷,使得各模組的功能更加清晰。由於分散式系統中每個伺服器中部署的程式碼只負責一個功能,使用dubbo有如下好處:
1.監控中心宕掉不影響使用,只是丟失部分取樣資料
2.資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務
3.註冊中心對等叢集,任意一臺宕掉後,將自動切換到另一臺
4.註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊
5.服務提供者無狀態,任意一臺宕掉後,不影響使用
6.服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復
7.當服務叢集規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分散式服務架構不會帶來阻力。
相關推薦
Maven多模組+dubbo+zookeeper分散式架構搭建SSM專案
Maven多模組的構建: 一、總體結構預覽 |----parent模組 |-----manage聚合工程模組 | |------pojo類 | |------dao層 | |------service介面層
springboot + dubbo + zookeeper 註冊中心 + maven多模組專案框架搭建具體操作
1. 專案搭建前瞭解: Maven多模組專案可以解決專案中出現多個相同的jar包和service介面以及實體類物件的問題,可以將相同的提取成一個專案來維護管理,然後其他需要用到則只要引用jar包即可使用。 2. 將springboot + dubbo + zookeeper專案進行拆分: 生
Maven多模組,Dubbo分散式服務框架,SpringMVC,前後端分離專案,基礎搭建,搭建過程出現的問題
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apac
springboot的maven多模組專案架構微服務搭建--跳過springmvc單一專案直接構建多模組並衍化為微服務專案
總想對微服務架構做一個小小的總結,不知如何下手,最近覺得還是從搭建微服務的過程來入手,對於springboot的maven專案從構建多模組架構進而衍化為常用的微服務架構來做個記錄吧。 首先,建立多個springboot專案,專案結構如圖: 裁剪後如右側 建立完成後,先解釋一下:s
springboot的maven多模組專案架構微服務搭建——依賴方式的多模組演化為微服務專案
在上一篇依賴方式多模組的基礎上對專案進行改造。主要改造user-service專案,service要配置mapper。mybatis及資料庫相關的東西,後面的介面消費方user就不再需要了 注意:以下程式碼是在不同場所的機器上寫的,資料庫什麼的會有不同,結構也會有不同,最終的程式碼會以其中一個傳遞到本人gi
在windows環境搭建dubbo+zookeeper分散式服務架構
Dubbo背景和簡介 Dubbo開始於電商系統,因此在這裡先從電商系統的演變講起。 1.單一應用框架(ORM) 當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本。 缺點:單一的系統架構,使得在開發過程
使用maven多模組構建dubbo第一個分散式HelloWorld
至於為什麼要用maven多模組構建專案,和dubbo是做什麼的就不多說了,直接開始。 首先建立一個maven專案作為root模組 命名為mydubbo,並刪除其中的src目錄(不需要) 除外我們需要Spring,zookeeper的依賴 mydubbo->pom.x
《Maven實戰》讀書筆記--(1)使用intellij idea搭建並配置maven多模組專案
本文使用intellij idea搭建Maven3多模組專案,並進行配置相關配置,以實現專案的構建打包。 專案結構 multi-module-project是我們的專案名稱,其中包含多個模組: mmp-dal模組:資料訪問層,提供對原始資料(主要指資料庫)的操作
Struts2+Spring+Hibernate整合開發(Maven多模組搭建)
Struts2+Spring+Hibernate整合開發(Maven多模組搭建) 0.專案結構 Struts2:web層 Spring:物件的容器 Hibernate:資料庫持久化操作 1.父模組匯入和管理所有需要的jar包 <?xml v
Eclipse搭建基於Springboot的Maven多模組工程
1,寫在前面的話 1.1,我想說點啥 公司提供介面服務的專案要進行重構,主旨是構建基於Springboot的Maven多模組聚合工程.因之前接觸Springboot較少,於是就在網上查閱資料,查了好多部落格發現大部分都是寫用idea構建的,部分用Ec
Springboot整合dubbo構建maven多模組專案(四)
在中,我們配置了一個dubbo專案,包含三個模組springboot-dubbo-api、springboot-dubbo-server和springboot-dubbo-client,並且在springboot-dubbo-server和springboot-dubbo-c
ssm+maven多模組專案搭建
不多說了,spring+springMVC+mybatis+maven的多模組web專案(使用的是idea)1,使用idea建立一個多模組的maven專案2,專案的maven和Tomcat配置這裡就不多說了。專案結構先看一下:3,pom.xml檔案,新增自己需要的吧,就是一些
eclipse上搭建maven多模組Java Web專案
1、模組化需求及專案模組說明 手頭上有個已上線的系統,但因老闆的特殊要求,系統需要不斷的修改。還有就是公司市場部不定期地在舉行一些微信活動,每一個活動都是週期性的,活動完了這個功能就要在系統中移除。 系統中就有三種模組:已經在系統中正常執行不需要再變更的模組
Maven多模組專案搭建
專案大的時候一般都要分模組,或者引入第三方框架的時候,那麼我們該如何實際操作呢,知道以下幾點就可以完美搭建Maven分模組的專案 1.彙總所有模組的專案根目錄的pom.xml 檔案中的 <modules> </modules>中新增所有子模組專案的
Springboot整合dubbo構建maven多模組專案(一)- 專案建立和pom.xml中jar包配置
以前一直用Spring作為容器構建專案,但是看到Spring官網一直在推Springboot,最重要的是Springboot確實避免自己尋找多個jar包(大多數情況下,可能自己都不記得該引入哪些jar包)和jar包之間衝突的問題,同時省掉了在整合其他框架時候
搭建SpringBoot工程(Maven多模組版)
一、搭建一個Maven 多模組專案 我們意思一下,假設我們構建的專案就這三個模組 springboot-front web層 springboot-service 業務層 springboot-dao 資料持久層 依賴關係如下: 依賴依賴springboot
dubbo+zookeeper 分散式專案搭建
一、簡介1.1 dubbo介紹Dubbo是阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。1.2主要核心部件Remoting: 網路通訊框架,實現了 sync-over-async 和 r
Maven多模組工程搭建
一、工程結構: 其中ds 系統中包含兩個模組,分別為ds-service和ds-admin 二、搭建如上工程結構步驟如下: 1、建立父專案ds,在Eclipse裡面New -> Maven Project;記得勾選Create a simple proj
搭建maven多模組工程
搭建maven多模組工程 一、概要 作業系統:win7 變成語言:java web容器:tomcat IDE工具:STS(Spring Tool Suite) 專案管理工具:maven 搭建環境: 1、安裝jdk 一鍵式安裝,下一步下一步即可 安裝完畢配置環境變數:JA
分布式框架Maven Springmvc mybatis,Dubbo ZooKeeper,Redis,FastDFS,ActiveMQ
摘要: Jeesz目前包括以下模塊項目,後臺系統管理系統,RestFul獨立服務系統、Scheduler定時調度系統、內容管理(CMS)系統、在線辦公(OA)系統、我的待辦(Task服務)、我的收藏(Bookmark服務)。 後臺管理系統包括企業組織架構(用戶管理、機構管理、區域管理)