①分布式应用程序简介
分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。
②分布式的作用
分散服务器的压力
大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。
l 横向:按功能划分。
l 纵向:N层架构,其中的一些层分布到不同的服务器上。
提供服务,功能重用
使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。
③实践操作(eclipse Maven项目)
1>创建工作环境——配置
Java环境变量:Window——>preference——>Java——>Installed JRE(找到安装好的jdk)
Maven:Window——>preference——>Maven——>User Settings——>Global Settings(在maven中config目录下找到settings.xml)
General:Window——>preference——>general——>workspace(改变编码格式设为UTF-8)
2>创建maven工程
configure页面中,packging打包为(jar:纯java文件 pom:父工程文件 war:web文件)
|1|先创建一个父工程,packging选择为pom,此工程只有src与pom.xml,将所有工程配置(jar包)全放在此工程里统一管理,其余工程为其子工程。这里列举常用的版本依赖代码如下:
1 <!-- 设置工程依赖版本号 --> 2 <properties> 3 <junit.version>4.12</junit.version> 4 <spring.version>4.3.14.RELEASE</spring.version> 5 <mybatis.version>3.4.5</mybatis.version> 6 <mybatis.spring.version>1.3.1</mybatis.spring.version> 7 <mybatis.paginator.version>1.2.15</mybatis.paginator.version> 8 <pagehelper.version>3.4.2-fix</pagehelper.version> 9 <mysql.version>5.1.32</mysql.version> 10 <slf4j.version>1.6.4</slf4j.version> 11 <jackson.version>2.4.2</jackson.version> 12 <druid.version>1.1.8</druid.version> 13 <httpclient.version>4.3.5</httpclient.version> 14 <jstl.version>1.2</jstl.version> 15 <servlet-api.version>2.5</servlet-api.version> 16 <jsp-api.version>2.0</jsp-api.version> 17 <joda-time.version>2.9.9</joda-time.version> 18 <commons-lang3.version>3.3.2</commons-lang3.version> 19 <commons-io.version>1.3.2</commons-io.version> 20 <commons-net.version>3.3</commons-net.version> 21 <jsqlparser.version>0.9.1</jsqlparser.version> 22 <commons-fileupload.version>1.3.1</commons-fileupload.version> 23 <jedis.version>2.7.2</jedis.version> 24 <solrj.version>4.10.3</solrj.version> 25 <dubbo.version>2.5.3</dubbo.version> 26 <zookeeper.version>3.4.7</zookeeper.version> 27 <zkclient.version>0.1</zkclient.version> 28 <activemq.version>5.11.2</activemq.version> 29 <freemarker.version>2.3.23</freemarker.version> 30 <quartz.version>2.2.2</quartz.version> 31 </properties> 32 33 <!-- 管理工程依賴jar包的版本號 --> 34 <dependencyManagement> 35 <dependencies> 36 <!-- 单元测试 --> 37 <dependency> 38 <groupId>junit</groupId> 39 <artifactId>junit</artifactId> 40 <version>${junit.version}</version> 41 <scope>test</scope> 42 </dependency> 43 <!-- 日志处理 --> 44 <dependency> 45 <groupId>org.slf4j</groupId> 46 <artifactId>slf4j-log4j12</artifactId> 47 <version>${slf4j.version}</version> 48 </dependency> 49 50 <!-- Apache COMMONS工具组件 --> 51 <dependency> 52 <groupId>org.apache.commons</groupId> 53 <artifactId>commons-lang3</artifactId> 54 <version>${commons-lang3.version}</version> 55 </dependency> 56 <dependency> 57 <groupId>org.apache.commons</groupId> 58 <artifactId>commons-io</artifactId> 59 <version>${commons-io.version}</version> 60 </dependency> 61 <dependency> 62 <groupId>commons-net</groupId> 63 <artifactId>commons-net</artifactId> 64 <version>${commons-net.version}</version> 65 </dependency> 66 67 <!-- 时间操作组件 --> 68 <dependency> 69 <groupId>joda-time</groupId> 70 <artifactId>joda-time</artifactId> 71 <version>${joda-time.version}</version> 72 </dependency> 73 74 <!-- JSP相关 --> 75 <dependency> 76 <groupId>jstl</groupId> 77 <artifactId>jstl</artifactId> 78 <version>${jstl.version}</version> 79 </dependency> 80 <dependency> 81 <groupId>javax.servlet</groupId> 82 <artifactId>servlet-api</artifactId> 83 <version>${servlet-api.version}</version> 84 <scope>provided</scope> 85 </dependency> 86 <dependency> 87 <groupId>javax.servlet</groupId> 88 <artifactId>jsp-api</artifactId> 89 <version>${jsp-api.version}</version> 90 <scope>provided</scope> 91 </dependency> 92 <!-- 文件上传组件 --> 93 <dependency> 94 <groupId>commons-fileupload</groupId> 95 <artifactId>commons-fileupload</artifactId> 96 <version>${commons-fileupload.version}</version> 97 </dependency> 98 99 <!-- Jackson Json处理工具包 --> 100 <dependency> 101 <groupId>com.fasterxml.jackson.core</groupId> 102 <artifactId>jackson-databind</artifactId> 103 <version>${jackson.version}</version> 104 </dependency> 105 106 <!-- httpclient --> 107 <dependency> 108 <groupId>org.apache.httpcomponents</groupId> 109 <artifactId>httpclient</artifactId> 110 <version>${httpclient.version}</version> 111 </dependency> 112 113 <!-- quartz任务调度框架 --> 114 <dependency> 115 <groupId>org.quartz-scheduler</groupId> 116 <artifactId>quartz</artifactId> 117 <version>${quartz.version}</version> 118 </dependency> 119 120 <!-- Mybatis --> 121 <dependency> 122 <groupId>org.mybatis</groupId> 123 <artifactId>mybatis</artifactId> 124 <version>${mybatis.version}</version> 125 </dependency> 126 <dependency> 127 <groupId>org.mybatis</groupId> 128 <artifactId>mybatis-spring</artifactId> 129 <version>${mybatis.spring.version}</version> 130 </dependency> 131 <dependency> 132 <groupId>com.github.miemiedev</groupId> 133 <artifactId>mybatis-paginator</artifactId> 134 <version>${mybatis.paginator.version}</version> 135 </dependency> 136 <dependency> 137 <groupId>com.github.pagehelper</groupId> 138 <artifactId>pagehelper</artifactId> 139 <version>${pagehelper.version}</version> 140 </dependency> 141 <!-- MySql --> 142 <dependency> 143 <groupId>mysql</groupId> 144 <artifactId>mysql-connector-java</artifactId> 145 <version>${mysql.version}</version> 146 </dependency> 147 <!-- 连接池 --> 148 <dependency> 149 <groupId>com.alibaba</groupId> 150 <artifactId>druid</artifactId> 151 <version>${druid.version}</version> 152 </dependency> 153 <!-- Spring --> 154 <dependency> 155 <groupId>org.springframework</groupId> 156 <artifactId>spring-context</artifactId> 157 <version>${spring.version}</version> 158 </dependency> 159 <dependency> 160 <groupId>org.springframework</groupId> 161 <artifactId>spring-beans</artifactId> 162 <version>${spring.version}</version> 163 </dependency> 164 <dependency> 165 <groupId>org.springframework</groupId> 166 <artifactId>spring-webmvc</artifactId> 167 <version>${spring.version}</version> 168 </dependency> 169 <dependency> 170 <groupId>org.springframework</groupId> 171 <artifactId>spring-jdbc</artifactId> 172 <version>${spring.version}</version> 173 </dependency> 174 <dependency> 175 <groupId>org.springframework</groupId> 176 <artifactId>spring-aspects</artifactId> 177 <version>${spring.version}</version> 178 </dependency> 179 <dependency> 180 <groupId>org.springframework</groupId> 181 <artifactId>spring-jms</artifactId> 182 <version>${spring.version}</version> 183 </dependency> 184 <dependency> 185 <groupId>org.springframework</groupId> 186 <artifactId>spring-context-support</artifactId> 187 <version>${spring.version}</version> 188 </dependency> 189 190 <!-- Redis客户端 --> 191 <dependency> 192 <groupId>redis.clients</groupId> 193 <artifactId>jedis</artifactId> 194 <version>${jedis.version}</version> 195 </dependency> 196 <!-- solr客户端 --> 197 <dependency> 198 <groupId>org.apache.solr</groupId> 199 <artifactId>solr-solrj</artifactId> 200 <version>${solrj.version}</version> 201 </dependency> 202 <!-- dubbo相关 --> 203 <dependency> 204 <groupId>com.alibaba</groupId> 205 <artifactId>dubbo</artifactId> 206 <version>${dubbo.version}</version> 207 </dependency> 208 <dependency> 209 <groupId>org.apache.zookeeper</groupId> 210 <artifactId>zookeeper</artifactId> 211 <version>${zookeeper.version}</version> 212 </dependency> 213 <dependency> 214 <groupId>com.github.sgroschupf</groupId> 215 <artifactId>zkclient</artifactId> 216 <version>${zkclient.version}</version> 217 </dependency> 218 <dependency> 219 <groupId>org.apache.activemq</groupId> 220 <artifactId>activemq-all</artifactId> 221 <version>${activemq.version}</version> 222 </dependency> 223 <dependency> 224 <groupId>org.freemarker</groupId> 225 <artifactId>freemarker</artifactId> 226 <version>${freemarker.version}</version> 227 </dependency> 228 </dependencies> 229 </dependencyManagement> 230 231 <build> 232 <!-- 工程插件管理 --> 233 <pluginManagement> 234 <plugins> 235 <plugin> 236 <groupId>org.eclipse.jetty</groupId> 237 <artifactId>jetty-maven-plugin</artifactId> 238 <version>9.0.0.v20130308</version> 239 </plugin> 240 </plugins> 241 </pluginManagement> 242 <plugins> 243 <!-- 资源文件拷贝插件 --> 244 <plugin> 245 <groupId>org.apache.maven.plugins</groupId> 246 <artifactId>maven-resources-plugin</artifactId> 247 <version>2.7</version> 248 <configuration> 249 <encoding>UTF-8</encoding> 250 </configuration> 251 </plugin> 252 <!-- java编译插件 --> 253 <plugin> 254 <groupId>org.apache.maven.plugins</groupId> 255 <artifactId>maven-compiler-plugin</artifactId> 256 <version>3.2</version> 257 <configuration> 258 <source>1.8</source> 259 <target>1.8</target> 260 <encoding>UTF-8</encoding> 261 </configuration> 262 </plugin> 263 </plugins> 264 </build>
(其中包含jetty插件,测试时常用jetty插件服务器,方便快捷,代码层级:build——pluginManagement——plugins——plugin)
|2|创建子工程(如常用工具集comments,选择jar包),此时要填写父工程相关信息。其pom.xml中有父工程的描述,包括版本号和groupId
|3|单个子工程中模块的创建,选择maven module并创建,如果需要引用其他工程(如dao层需要引用entity中的javaBean),则在pom.xml中加上相关依赖。
(其中web工程的pom.xml中需要将jetty配置引过来)