1. 程式人生 > >(五)springmvc+mybatis+zookeeper分布式架構 整合 - maven構建根項

(五)springmvc+mybatis+zookeeper分布式架構 整合 - maven構建根項

nload nvi 0.11 file maven基礎 des 自動生成 4.0 down

從今天開始,我們將對代碼的每一個構建做詳細的記錄,能夠幫助大家如何快速構建dubbo分布式企業架構。

導語:在dubbo分布式架構構建之前,請大家務必掌握maven的相關技能,因為架構中大量使用maven技術進行項目構建,有不熟的朋友可以在網上找一些資料學習。

  1. 準備技能

開發語言:JAVA/J2EE

項目構建管理:Maven

持續集成方案:Jenkins

SOA服務: Dubbo、zookeeper、Restful

SSO單點登錄:Redis、JWT、Restful

分布式緩存:Redis

分布式消息中間件:zookeeper+kafka

分布式文件:FastDFS

數據庫連接池:Alibaba Druid

核心框架:Spring framework、Spring MVC、Apache Shiro、MyBatis

前端框架:Bootstrap + html5 + CSS3

  1. 創建maven基礎項目,其中只需要配置pom.xml文件和打包的文件即可,代碼如下:

    
    <span style="font-size: 16px;"><?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">  
        <modelVersion>4.0.0</modelVersion>  
    
        <groupId>com.sml.sz</groupId>  
        <artifactId>ant-project</artifactId>  
        <version>1.0.0</version>  
        <packaging>pom</packaging>  
    
        <name>ant-project</name>  
        <url>http://maven.apache.org</url>  
        <inceptionYear>2015-2016</inceptionYear>  
    
        <properties>  
            <!-- 框架通用包版本設置 -->  
            <spring.version>4.2.2.RELEASE</spring.version>  
            <validator.version>5.1.1.Final</validator.version>  
            <mybatis.version>3.2.8</mybatis.version>  
            <mybatis-spring.version>1.2.2</mybatis-spring.version>  
            <shiro.version>1.2.3</shiro.version>  
            <druid.version>1.0.11</druid.version>  
            <ehcache.version>2.6.9</ehcache.version>  
            <ehcache-web.version>2.0.4</ehcache-web.version>  
            <sitemesh.version>2.4.2</sitemesh.version>  
            <activiti.version>5.15.1</activiti.version>  
            <wink.version>1.4</wink.version>  
            <sso.client.version>3.2.1</sso.client.version>  
    
            <!-- 通用工具包版本設置 -->  
            <slf4j.version>1.7.7</slf4j.version>  
            <commons-lang3.version>3.3.2</commons-lang3.version>  
            <commons-io.version>2.4</commons-io.version>  
            <commons-codec.version>1.9</commons-codec.version>  
            <commons-fileupload.version>1.3.1</commons-fileupload.version>  
            <commons-beanutils.version>1.9.1</commons-beanutils.version>  
            <jackson.version>2.2.3</jackson.version>  
            <fastjson.version>1.1.40</fastjson.version>  
            <xstream.version>1.4.7</xstream.version>  
            <guava.version>17.0</guava.version>  
            <dozer.version>5.5.1</dozer.version>  
            <email.version>1.4.7</email.version>  
            <poi.version>3.9</poi.version>  
            <freemarker.version>2.3.20</freemarker.version>  
    
            <!-- 基礎環境設置 -->  
            <jdk.version>1.6</jdk.version>  
            <tomcat.version>2.2</tomcat.version>  
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
            <downloadSources>true</downloadSources>  
    
            <!-- jdbc驅動版本設置 -->  
            <mysql.driver.version>5.1.30</mysql.driver.version>  
        </properties>  
    
        <dependencies>  
            <!-- 單元測試 -->  
            <dependency>  
                <groupId>junit</groupId>  
                <artifactId>junit</artifactId>  
                <version>4.11</version>  
                <scope>test</scope>  
            </dependency>  
            <!-- Tomcat 如果存在就不需要將servlet-api.jar、jsp-api.jar一起打包 -->  
            <dependency>  
                <groupId>javax.servlet</groupId>  
                <artifactId>servlet-api</artifactId>  
                <version>2.5</version>  
                <scope>provided</scope>  
            </dependency>  
            <dependency>  
                <groupId>javax.servlet.jsp</groupId>  
                <artifactId>jsp-api</artifactId>  
                <version>2.1</version>  
                <scope>provided</scope>  
            </dependency>  
        </dependencies>  
    
        <dependencyManagement>  
            <dependencies>  
                <!-- ant 工具jar -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-utils</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- ant 公共配置jar -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-config</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- ant 核心框架jar -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-framework</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- ant 代碼自動生成業務jar -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-core-gen</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- ant 會員業務jar -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-core-member</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
    
                <!-- ant RestFul服務系統 -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-web-service</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- ant admin後臺管理系統 -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-web-admin</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
    
                <!-- dubbo begin -->  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-member-facade</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <dependency>  
                    <groupId>com.sml.sz</groupId>  
                    <artifactId>ant-member-service</artifactId>  
                    <version>${project.version}</version>  
                </dependency>  
                <!-- dubbo end -->  
            </dependencies>  
        </dependencyManagement>  
    
        <build>  
            <pluginManagement>  
                <plugins>  
                    <!-- maven -->  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-antrun-plugin</artifactId>  
                        <version>1.7</version>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-compiler-plugin</artifactId>  
                        <version>2.3.2</version>  
                        <configuration>  
                            <source>1.5</source>  
                            <target>1.5</target>  
                            <!-- 去除臨時文件 -->  
                            <excludes>  
                                <exclude>**/*.keep</exclude>  
                                <exclude>**/*.keep.*</exclude>  
                                <exclude>*.bak</exclude>  
                                <exclude>*.contrib</exclude>  
                            </excludes>  
                            <showDeprecation>true</showDeprecation>  
                            <compilerArgument>-Xlint:unchecked,deprecation,fallthrough,finally</compilerArgument>  
                            <fork>true</fork>  
                            <encoding>${project.build.sourceEncoding}</encoding>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-jar-plugin</artifactId>  
                        <version>2.3.1</version>  
                        <executions>  
                            <execution>  
                                <goals>  
                                    <goal>test-jar</goal>  
                                </goals>  
                            </execution>  
                        </executions>  
                        <configuration>  
                            <archive>  
                                <manifest>  
                                    <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>  
                                    <addDefaultImplementationEntries>true</addDefaultImplementationEntries>  
                                </manifest>  
                            </archive>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-release-plugin</artifactId>  
                        <version>2.1</version>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-resources-plugin</artifactId>  
                        <version>2.4.3</version>  
                        <configuration>  
                            <!-- 去除臨時文件 -->  
                            <excludes>  
                                <exclude>**/*.keep</exclude>  
                                <exclude>**/*.keep.*</exclude>  
                                <exclude>*.bak</exclude>  
                                <exclude>*.contrib</exclude>  
                            </excludes>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-site-plugin</artifactId>  
                        <version>2.1.1</version>  
                        <configuration>  
                            <inputEncoding>${project.build.sourceEncoding}</inputEncoding>  
                            <outputEncoding>${project.build.sourceEncoding}</outputEncoding>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-source-plugin</artifactId>  
                        <version>2.1.2</version>  
                        <executions>  
                            <execution>  
                                <id>attach-sources</id>  
                                <goals>  
                                    <goal>jar</goal>  
                                    <goal>test-jar</goal>  
                                </goals>  
                            </execution>  
                        </executions>  
                        <configuration>  
                            <excludeResources>false</excludeResources>  
                            <attach>true</attach>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-war-plugin</artifactId>  
                        <version>2.4</version>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-ear-plugin</artifactId>  
                        <version>2.9</version>  
                        <configuration>  
                            <version>5</version>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-surefire-plugin</artifactId>  
                        <version>2.6</version>  
                        <configuration>  
                            <testFailureIgnore>true</testFailureIgnore>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>org.apache.maven.plugins</groupId>  
                        <artifactId>maven-surefire-report-plugin</artifactId>  
                        <version>2.6</version>  
                        <configuration>  
                            <parallel>both</parallel>  
                        </configuration>  
                    </plugin>  
                    <plugin>  
                        <groupId>com.google.code.maven-replacer-plugin</groupId>  
                        <artifactId>replacer</artifactId>  
                        <version>1.5.1</version>  
                        <executions>  
                            <execution>  
                                <phase>prepare-package</phase>  
                                <goals>  
                                    <goal>replace</goal>  
                                </goals>  
                            </execution>  
                        </executions>  
                    </plugin>  
    
                    <!-- 讀取系統配置的properties文件,避免寫入profile中,各自模塊使用的時候註意修改路徑 -->  
                    <plugin>  
                        <groupId>org.kuali.maven.plugins</groupId>  
                        <artifactId>properties-maven-plugin</artifactId>  
                        <version>2.0.1</version>  
                        <configuration>  
                            <locations>  
                                <location>${basedir}/../project_${profile}.properties</location>  
                            </locations>  
                        </configuration>  
                        <executions>  
                            <execution>  
                                <phase>prepare-package</phase>  
                                <goals>  
                                    <goal>read-project-properties</goal>  
                                </goals>  
                            </execution>  
                        </executions>  
                    </plugin>  
                </plugins>  
            </pluginManagement>  
        </build>  
        <profiles>  
            <profile>  
                <id>dev</id>  
                <activation>  
                    <activeByDefault>true</activeByDefault>  
                </activation>  
                <properties>  
                    <project>  
                        dev  
                    </project>  
                </properties>  
            </profile>  
            <profile>  
                <id>sit</id>  
                <activation>  
                    <property>  
                        <name>environment.type</name>  
                        <value>sit</value>  
                    </property>  
                </activation>  
                <properties>  
                    <project>  
                        sit  
                    </project>  
                </properties>  
            </profile>  
            <profile>  
                <id>uat</id>  
                <activation>  
                    <property>  
                        <name>environment.type</name>  
                        <value>uat</value>  
                    </property>  
                </activation>  
                <properties>  
                    <project>  
                        uat  
                    </project>  
                </properties>  
            </profile>  
            <profile>  
                <id>performance</id>  
                <activation>  
                    <property>  
                        <name>environment.type</name>  
                        <value>performance</value>  
                    </property>  
                </activation>  
                <properties>  
                    <project>  
                        performance  
                    </project>  
                </properties>  
            </profile>  
            <profile>  
                <id>production</id>  
                <activation>  
                    <property>  
                        <name>environment.type</name>  
                        <value>production</value>  
                    </property>  
                </activation>  
                <properties>  
                    <project>  
                        production  
                    </project>  
                </properties>  
            </profile>  
        </profiles>  
    
        <modules>  
            <!-- ant 工具jar -->  
            <module>ant-utils</module>  
    
            <!-- ant 公共配置jar -->  
            <module>ant-config</module>  
    
            <!-- ant 核心框架jar -->  
            <module>ant-framework</module>  
    
            <!-- ant 代碼自動生成業務jar -->  
            <module>ant-core-gen</module>  
    
            <!-- ant 會員業務jar -->  
            <module>ant-core-member</module>  
    
            <!-- ant admin後臺管理系統 -->  
            <module>ant-web-admin</module>  
    
            <!-- ant Restful服務管理系統 -->  
            <module>ant-web-service</module>  
    
            <!-- ant member Dubbo服務接口 -->  
            <module>ant-member-facade</module>  
    
            <!-- ant member Dubbo服務提供者 -->  
            <module>ant-member-service</module>  
        </modules>  
        <description>ant平臺的super工程,定義了整合ant項目群的基本信息,以及依賴項和插件信息、maven的自定義信息</description>  
    </project></span>  

2. 創建打包腳本:測試、生成等

build_SIT-no-test.bat
<span style="font-size: 16px;">set MAVEN_OPTS= -Xms128 -Xmx256m  
mvn clean package --define maven.test.skip=true --define environment.type=sit</span>  

build_UAT-no-test.bat
<span style="font-size: 16px;">set MAVEN_OPTS= -Xms128 -Xmx256m  
mvn clean package --define maven.test.skip=true --define environment.type=uat</span>  

build_PROD-no-test.bat
<span style="font-size: 16px;">set MAVEN_OPTS= -Xms128 -Xmx256m  
mvn clean package --define maven.test.skip=true --define environment.type=pro</span>  


3. 創建打包的properties文件:

project_sit.properties

解釋: 裏面可以配置打包的信息,比如:ip、域名、包名等

4. 代碼結構如下:

![](http://i2.51cto.com/images/blog/201802/11/804030794653d1ad7d28f509f1e2c588.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

(五)springmvc+mybatis+zookeeper分布式架構 整合 - maven構建根項