第一步:整體項目zb_project的pom配置

1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>zb-dubboDemo</groupId> 8 <artifactId>zb-Project</artifactId> 9 <packaging>pom</packaging> 10 <version>1.0-SNAPSHOT</version> 11 <modules> 12 <module>zb-common</module> 13 <module>zb-Server01</module> 14 <module>zb-web</module> 15 </modules> 16 17 <name>zb-Project</name> 18 <url>http://maven.apache.org</url> 19 20 <properties> 21 <java.version>1.8</java.version> 22 <java.encoding>utf-8</java.encoding> 23 <springframework.version>4.2.4.RELEASE</springframework.version> 24 <mybatis.version>3.3.1</mybatis.version> 25 <mybatis-spring.version>1.2.4</mybatis-spring.version> 26 <mysql.version>5.1.36</mysql.version> 27 <servlet.version>3.1.0</servlet.version> 28 <jedis.version>2.9.0</jedis.version> 29 <redisson.version>3.5.4</redisson.version> 30 <spring-data-redis.version>2.0.0.RELEASE</spring-data-redis.version> 31 <spring-session-data-redis.version>1.3.1.RELEASE</spring-session-data-redis.version> 32 <dubbo.version>2.5.5</dubbo.version> 33 <solr.version>7.1.0</solr.version> 34 <solr-spring-data.version>3.0.0.RELEASE</solr-spring-data.version> 35 <nexus.url>http://123.56.78.170:8082/nexus</nexus.url> 36 </properties> 37 38 <dependencies> 39 <!-- fastdfs --> 40 41 42 <!-- solr --> 43 <dependency> 44 <groupId>org.apache.solr</groupId> 45 <artifactId>solr-solrj</artifactId> 46 <version>4.10.1</version> 47 </dependency> 48 49 <dependency> 50 <groupId>org.springframework.data</groupId> 51 <artifactId>spring-data-solr</artifactId> 52 <version>${solr-spring-data.version}</version> 53 </dependency> 54 55 56 <dependency> 57 <groupId>javax.servlet</groupId> 58 <artifactId>jstl</artifactId> 59 <version>1.2</version> 60 </dependency> 61 62 <dependency> 63 <groupId>javax.servlet</groupId> 64 <artifactId>javax.servlet-api</artifactId> 65 <version>3.1.0</version> 66 </dependency> 67 68 <dependency> 69 <groupId>javax.servlet.jsp</groupId> 70 <artifactId>jsp-api</artifactId> 71 <version>2.1</version> 72 </dependency> 73 74 <!-- mysql 驅動start --> 75 <dependency> 76 <groupId>mysql</groupId> 77 <artifactId>mysql-connector-java</artifactId> 78 <version>${mysql.version}</version> 79 </dependency> 80 81 <dependency> 82 <groupId>org.mybatis</groupId> 83 <artifactId>mybatis-ehcache</artifactId> 84 <version>1.0.0</version> 85 </dependency> 86 87 <!-- mybatis分頁插件 --> 88 <dependency> 89 <groupId>com.github.pagehelper</groupId> 90 <artifactId>pagehelper</artifactId> 91 <version>4.1.0</version> 92 </dependency> 93 94 <dependency> 95 <groupId>com.alibaba</groupId> 96 <artifactId>druid</artifactId> 97 <version>1.0.3</version> 98 </dependency> 99 100 <dependency> 101 <groupId>log4j</groupId> 102 <artifactId>log4j</artifactId> 103 <version>1.2.17</version> 104 </dependency> 105 106 <dependency> 107 <groupId>org.slf4j</groupId> 108 <artifactId>slf4j-log4j12</artifactId> 109 <version>1.7.12</version> 110 </dependency> 111 112 <!-- CGLIB --> 113 <dependency> 114 <groupId>cglib</groupId> 115 <artifactId>cglib-nodep</artifactId> 116 <version>2.1_3</version> 117 </dependency> 118 119 <dependency> 120 <groupId>junit</groupId> 121 <artifactId>junit</artifactId> 122 <version>4.12</version> 123 <scope>test</scope> 124 </dependency> 125 126 <dependency> 127 <groupId>org.json</groupId> 128 <artifactId>json</artifactId> 129 <version>20151123</version> 130 </dependency> 131 132 <!-- jdbc --> 133 <dependency> 134 <groupId>org.mybatis</groupId> 135 <artifactId>mybatis-spring</artifactId> 136 <version>${mybatis-spring.version}</version> 137 </dependency> 138 139 <dependency> 140 <groupId>org.mybatis</groupId> 141 <artifactId>mybatis</artifactId> 142 <version>${mybatis.version}</version> 143 </dependency> 144 <dependency> 145 <groupId>commons-io</groupId> 146 <artifactId>commons-io</artifactId> 147 <version>2.0.1</version> 148 </dependency> 149 150 <dependency> 151 <groupId>commons-logging</groupId> 152 <artifactId>commons-logging</artifactId> 153 <version>1.1.3</version> 154 </dependency> 155 156 <dependency> 157 <groupId>commons-codec</groupId> 158 <artifactId>commons-codec</artifactId> 159 <version>1.9</version> 160 </dependency> 161 162 <dependency> 163 <groupId>commons-validator</groupId> 164 <artifactId>commons-validator</artifactId> 165 <version>1.3.1</version> 166 </dependency> 167 168 <dependency> 169 <groupId>commons-digester</groupId> 170 <artifactId>commons-digester</artifactId> 171 <version>1.8</version> 172 </dependency> 173 174 <dependency> 175 <groupId>commons-lang</groupId> 176 <artifactId>commons-lang</artifactId> 177 <version>2.4</version> 178 </dependency> 179 180 <dependency> 181 <groupId>commons-beanutils</groupId> 182 <artifactId>commons-beanutils-core</artifactId> 183 <version>1.7.0</version> 184 </dependency> 185 186 <dependency> 187 <groupId>commons-collections</groupId> 188 <artifactId>commons-collections</artifactId> 189 <version>3.2.1</version> 190 </dependency> 191 192 <dependency> 193 <groupId>commons-fileupload</groupId> 194 <artifactId>commons-fileupload</artifactId> 195 <version>1.3.2</version> 196 </dependency> 197 198 <dependency> 199 <groupId>org.apache.commons</groupId> 200 <artifactId>commons-lang3</artifactId> 201 <version>3.5</version> 202 </dependency> 203 204 205 <!-- spring --> 206 <dependency> 207 <groupId>org.springframework</groupId> 208 <artifactId>spring-core</artifactId> 209 <version>${springframework.version}</version> 210 </dependency> 211 212 <dependency> 213 <groupId>org.springframework</groupId> 214 <artifactId>spring-beans</artifactId> 215 <version>${springframework.version}</version> 216 </dependency> 217 218 <dependency> 219 <groupId>org.springframework</groupId> 220 <artifactId>spring-context</artifactId> 221 <version>${springframework.version}</version> 222 </dependency> 223 224 <dependency> 225 <groupId>org.springframework</groupId> 226 <artifactId>spring-context-support</artifactId> 227 <version>${springframework.version}</version> 228 </dependency> 229 230 <dependency> 231 <groupId>org.springframework</groupId> 232 <artifactId>spring-test</artifactId> 233 <version>${springframework.version}</version> 234 <scope>test</scope> 235 </dependency> 236 237 <dependency> 238 <groupId>org.springframework</groupId> 239 <artifactId>spring-tx</artifactId> 240 <version>${springframework.version}</version> 241 </dependency> 242 243 <dependency> 244 <groupId>org.springframework</groupId> 245 <artifactId>spring-web</artifactId> 246 <version>${springframework.version}</version> 247 </dependency> 248 249 <dependency> 250 <groupId>org.springframework</groupId> 251 <artifactId>spring-webmvc</artifactId> 252 <version>${springframework.version}</version> 253 </dependency> 254 255 <dependency> 256 <groupId>org.springframework</groupId> 257 <artifactId>spring-aspects</artifactId> 258 <version>${springframework.version}</version> 259 </dependency> 260 261 <dependency> 262 <groupId>org.springframework</groupId> 263 <artifactId>spring-expression</artifactId> 264 <version>${springframework.version}</version> 265 </dependency> 266 267 <dependency> 268 <groupId>org.springframework</groupId> 269 <artifactId>spring-jdbc</artifactId> 270 <version>${springframework.version}</version> 271 </dependency> 272 273 <dependency> 274 <groupId>aopalliance</groupId> 275 <artifactId>aopalliance</artifactId> 276 <version>1.0</version> 277 </dependency> 278 279 <dependency> 280 <groupId>org.aspectj</groupId> 281 <artifactId>aspectjrt</artifactId> 282 <version>1.7.3</version> 283 </dependency> 284 <dependency> 285 <groupId>org.javassist</groupId> 286 <artifactId>javassist</artifactId> 287 <version>3.20.0-GA</version> 288 </dependency> 289 <dependency> 290 <groupId>org.aspectj</groupId> 291 <artifactId>aspectjweaver</artifactId> 292 <version>1.6.10</version> 293 <scope>runtime</scope> 294 </dependency> 295 296 <dependency> 297 <groupId>org.springframework</groupId> 298 <artifactId>spring-aop</artifactId> 299 <version>${springframework.version}</version> 300 <exclusions> 301 <exclusion> 302 <groupId>commons-logging</groupId> 303 <artifactId>commons-logging</artifactId> 304 </exclusion> 305 </exclusions> 306 </dependency> 307 <!--極光推送依賴 start--> 308 <dependency> 309 <groupId>cn.jpush.api</groupId> 310 <artifactId>jpush-client</artifactId> 311 <version>3.2.17</version> 312 </dependency> 313 <dependency> 314 <groupId>cn.jpush.api</groupId> 315 <artifactId>jiguang-common</artifactId> 316 <version>1.0.7</version> 317 </dependency> 318 <!--極光推送依賴 end--> 319 <!-- json依賴包 --> 320 <dependency> 321 <groupId>com.fasterxml.jackson.core</groupId> 322 <artifactId>jackson-core</artifactId> 323 <version>2.5.0</version> 324 </dependency> 325 326 <dependency> 327 <groupId>com.fasterxml.jackson.core</groupId> 328 <artifactId>jackson-databind</artifactId> 329 <version>2.5.0</version> 330 </dependency> 331 332 <dependency> 333 <groupId>com.fasterxml.jackson.core</groupId> 334 <artifactId>jackson-annotations</artifactId> 335 <version>2.5.0</version> 336 </dependency> 337 338 <dependency> 339 <groupId>com.alibaba</groupId> 340 <artifactId>fastjson</artifactId> 341 <version>1.2.4</version> 342 </dependency> 343 344 <!--dom4j--> 345 <dependency> 346 <groupId>dom4j</groupId> 347 <artifactId>dom4j</artifactId> 348 <version>1.6.1</version> 349 </dependency> 350 351 <dependency> 352 <groupId>jaxen</groupId> 353 <artifactId>jaxen</artifactId> 354 <version>1.1.1</version> 355 </dependency> 356 357 <dependency> 358 <groupId>commons-httpclient</groupId> 359 <artifactId>commons-httpclient</artifactId> 360 <version>3.0</version> 361 </dependency> 362 363 <dependency> 364 <groupId>org.apache.poi</groupId> 365 <artifactId>poi</artifactId> 366 <version>3.9</version> 367 </dependency> 368 369 <dependency> 370 <groupId>org.apache.poi</groupId> 371 <artifactId>poi-ooxml</artifactId> 372 <version>3.9</version> 373 </dependency> 374 375 <dependency> 376 <groupId>com.aliyun.oss</groupId> 377 <artifactId>aliyun-sdk-oss</artifactId> 378 <version>2.5.0</version> 379 </dependency> 380 381 <dependency> 382 <groupId>eu.bitwalker</groupId> 383 <artifactId>UserAgentUtils</artifactId> 384 <version>1.20</version> 385 </dependency> 386 387 <!-- freemarker begin --> 388 <dependency> 389 <groupId>org.freemarker</groupId> 390 <artifactId>freemarker</artifactId> 391 <version>2.3.20</version> 392 </dependency> 393 394 <!-- Dubbo --> 395 <dependency> 396 <groupId>com.alibaba</groupId> 397 <artifactId>dubbo</artifactId> 398 <version>${dubbo.version}</version> 399 <exclusions> 400 <exclusion> 401 <groupId>org.springframework</groupId> 402 <artifactId>spring</artifactId> 403 </exclusion> 404 <exclusion> 405 <groupId>org.jboss.netty</groupId> 406 <artifactId>netty</artifactId> 407 </exclusion> 408 </exclusions> 409 </dependency> 410 411 <dependency> 412 <groupId>com.101tec</groupId> 413 <artifactId>zkclient</artifactId> 414 <version>0.10</version> 415 <exclusions> 416 <exclusion> 417 <groupId>org.slf4j</groupId> 418 <artifactId>slf4j-log4j12</artifactId> 419 </exclusion> 420 </exclusions> 421 </dependency> 422 423 <dependency> 424 <groupId>io.netty</groupId> 425 <artifactId>netty-all</artifactId> 426 <version>4.1.16.Final</version> 427 </dependency> 428 429 <dependency> 430 <groupId>org.apache.zookeeper</groupId> 431 <artifactId>zookeeper</artifactId> 432 <version>3.4.10</version> 433 </dependency> 434 435 <dependency> 436 <groupId>com.netflix.curator</groupId> 437 <artifactId>curator-framework</artifactId> 438 <version>1.3.3</version> 439 </dependency> 440 441 <!-- 緩存 --> 442 <dependency> 443 <groupId>redis.clients</groupId> 444 <artifactId>jedis</artifactId> 445 <version>${jedis.version}</version> 446 </dependency> 447 448 <dependency> 449 <groupId>org.springframework.data</groupId> 450 <artifactId>spring-data-redis</artifactId> 451 <version>${spring-data-redis.version}</version> 452 </dependency> 453 454 <dependency> 455 <groupId>org.springframework.session</groupId> 456 <artifactId>spring-session-data-redis</artifactId> 457 <version>${spring-session-data-redis.version}</version> 458 </dependency> 459 460 <dependency> 461 <groupId>org.redisson</groupId> 462 <artifactId>redisson</artifactId> 463 <version>${redisson.version}</version> 464 </dependency> 465 466 <dependency> 467 <groupId>org.apache.velocity</groupId> 468 <artifactId>velocity</artifactId> 469 <version>1.7</version> 470 </dependency> 471 </dependencies> 472 473 474 <build> 475 <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> 476 <plugins> 477 <plugin> 478 <artifactId>maven-clean-plugin</artifactId> 479 <version>3.0.0</version> 480 </plugin> 481 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> 482 <plugin> 483 <artifactId>maven-resources-plugin</artifactId> 484 <version>3.0.2</version> 485 </plugin> 486 <plugin> 487 <artifactId>maven-compiler-plugin</artifactId> 488 <version>3.7.0</version> 489 </plugin> 490 <plugin> 491 <artifactId>maven-surefire-plugin</artifactId> 492 <version>2.20.1</version> 493 </plugin> 494 <plugin> 495 <artifactId>maven-jar-plugin</artifactId> 496 <version>3.0.2</version> 497 </plugin> 498 <plugin> 499 <artifactId>maven-install-plugin</artifactId> 500 <version>2.5.2</version> 501 </plugin> 502 <plugin> 503 <artifactId>maven-deploy-plugin</artifactId> 504 <version>2.8.2</version> 505 </plugin> 506 </plugins> 507 </pluginManagement> 508 </build> 509 </project>
第二步:公共工具的子項目zb-common的pom配置

<?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"> <parent> <artifactId>zb-Project</artifactId> <groupId>zb-dubboDemo</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>zb-common</artifactId> <name>zb-common</name> <packaging>jar</packaging> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>juh</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>jurt</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.openoffice</groupId> <artifactId>ridl</artifactId> <version>3.0.1</version> </dependency> <!--<dependency>--> <!--<groupId>org.slf4j</groupId>--> <!--<artifactId>slf4j-jdk14</artifactId>--> <!--<version>1.5.6</version>--> <!--</dependency>--> <dependency> <groupId>org.openoffice</groupId> <artifactId>unoil</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.artofsolving</groupId> <artifactId>jodconverter</artifactId> <version>2.2.1</version> <exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.0.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.20.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
第三布:server子項目配置
1.server-entity(server中存放逆向工程生成的實體,mapper接口,mapper.xml)
2.server-service(存放服務接口)
<1.sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <plugins> <!-- com.github.pagehelper為PageHelper類所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 4.0.0以后版本可以不設置該參數 --> <property name="dialect" value="mysql"/> <!-- 該參數默認為false --> <!-- 設置為true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 --> <!-- 和startPage中的pageNum效果一樣--> <property name="offsetAsPageNum" value="true"/> <!-- 該參數默認為false --> <!-- 設置為true時,使用RowBounds分頁會進行count查詢 --> <property name="rowBoundsWithCount" value="true"/> <!-- 設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 --> <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)--> <property name="pageSizeZero" value="true"/> <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 --> <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最后一頁 --> <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 --> <property name="reasonable" value="true"/> <!-- 3.5.0版本可用 - 為了支持startPage(Object params)方法 --> <!-- 增加了一個`params`參數來配置參數映射,用於從Map或ServletRequest中取值 --> <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默認值 --> <!-- 不理解該含義的前提下,不要隨便復制該配置 --> <property name="params" value="pageNum=pageHelperStart;pageSize=pageHelperRows;"/> <!-- 支持通過Mapper接口參數來傳遞分頁參數 --> <property name="supportMethodsArguments" value="false"/> <!-- always總是返回PageInfo類型,check檢查返回類型是否為PageInfo,none返回Page --> <property name="returnPageInfo" value="none"/> </plugin> </plugins> </configuration>
<2.log4j.properties

log4j.rootLogger=DEBUG,stdout,A1 ,A2 log4j.appender.A1=org.apache.log4j.ConsoleAppender #log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=logs/info.log log4j.appender.A1.Threshold=INFO log4j.appender.A1.layout=org.apache.log4j.PatternLayout #log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %t [%-5p]%c : %m%n log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %l %m%n log4j.appender.A2=org.apache.log4j.ConsoleAppender #log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender log4j.appender.A2.File=logs/error.log log4j.appender.A2.Threshold=ERROR log4j.appender.A2.layout=org.apache.log4j.PatternLayout #log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %t [%-5p]%c : %m%n log4j.appender.A2.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %l %m%n ### 把日志信息輸出到控制台 ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout ###顯示SQL語句部分 log4j.logger.com.ibatis=DEBUG #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG #log4j.logger.java.sql.Connection=DEBUG #log4j.logger.java.sql.Statement=DEBUG #log4j.logger.java.sql.PreparedStatement=DEBUG
<3.jdbc.properties

driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/zb-project?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&zeroDateTimeBehavior=convertToNull jdbc.username=root jdbc.password=root validationQuery=SELECT 1
<4.spring-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--加載數據庫配置--> <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/> <!-- myBatis信息 --> <!-- 1.配置數據源 使用的是Druid數據源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化連接大小 --> <property name="initialSize" value="0" /> <!-- 連接池最大使用連接數量 --> <property name="maxActive" value="20" /> <!-- 連接池最小空閑 --> <property name="minIdle" value="0" /> <!-- 獲取連接最大等待時間 --> <property name="maxWait" value="60000" /> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> <!-- 用來檢測有效sql --> <property name="validationQuery" value="${validationQuery}" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打開removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分鍾 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 關閉abanded連接時輸出錯誤日志 --> <property name="logAbandoned" value="true" /> <!-- 監控數據庫 --> <property name="filters" value="mergeStat" /> </bean> <!--2.配置SqlSessionFactoryBean--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="zb.mapper.entity"/> <property name="configLocation" value="classpath:sqlMapConfig.xml" /> <!-- 自動掃描mapper.xml包 --> <property name="mapperLocations" value="classpath*:zb.mappers/*.xml" /> </bean> <!-- 3.自動掃描dao(mapper)層包,該類會自動掃描sqlSessionFactory,不需配置 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="zb.mapper.api" /> <!--這個屬性,可有可無--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 4.進行事務配置 --> <!--4.1.配置事務管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!--方式一:注解式事務配置(當dubbo服務通過包掃描注冊服務時,選用這種方式,且服務要改為接口實現形式)--> <!--<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>--> <!--方式二:xml形式的事務配置--> <!-- 4.2.配置事務增強(指定增強方法名的匹配規則) --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="select*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <!--⚫4.3.配置切入點和切面--> <aop:config> <!-- 切入點 --> <aop:pointcut expression="execution(* com.zbservice.LoginServiceImpl.*(..))" id="pointcut1"/> <!-- 切面,即表示把哪個增強用在哪個切入點上 --> <aop:advisor advice-ref="transactionAdvice" pointcut-ref="pointcut1"/> </aop:config> </beans>
<5.spring-aop.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--配置spring加強業務的信息(切面增強配置)--> <!--實例化增強類(advice)--> <bean id="zq" class="com.aopZengQiang.ZengQiang"></bean> <!-- 配置AOP的操作 --> <aop:config> <!-- 配置切入點,對LoginServiceImpl類里面的所有方法都增強 --> <aop:pointcut expression="execution(* com.zbservice.LoginServiceImpl.*(..))" id="pointcut1"></aop:pointcut> <!-- 配置切面,aop:aspect標簽里面使用屬性ref,ref屬性值寫增強類的bean的id值 --> <aop:aspect ref="zq"> <!-- 增強類型 method屬性:增強類的方法名稱,pointcut-ref屬性:切入點的id值--> <!-- 前置通知 --> <aop:before method="zqMethod1" pointcut-ref="pointcut1"></aop:before> <!-- 后置通知 --> <!--<aop:after-returning method="zqMethod2" pointcut-ref="pointcut1"></aop:after-returning>--> <!-- 環繞通知 --> <!--<aop:around method="zqMethod3" pointcut-ref="pointcut1"></aop:around>--> </aop:aspect> </aop:config> </beans>
<6.spring-registry.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!--dubbo配置--> <dubbo:application name="zb-server01" version="1.0"/> <dubbo:registry protocol="zookeeper" address="zookeeper://114.55.95.79:2181?backup=114.55.31.202:2181,116.62.28.7:2181" /> <dubbo:protocol name="dubbo" port="20883"/> <dubbo:provider timeout="100000" /> <!--注冊發布服務--> <!--方式一:包掃描--> <!--注解方式掃描注有com.alibaba.dubbo.config.annotation.Service的包,此種情況不能用xml事務配置--> <!--<dubbo:annotation package="com.zbservice"/>--> <!--方式二:注入bean--> <bean id="loginServiceImpl" class="com.zbservice.LoginServiceImpl"/> <dubbo:service interface="service.LoginService" ref="loginServiceImpl" protocol="dubbo" timeout="100000"/> </beans>
<7.spring-context.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 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"> <context:component-scan base-package="com.zbservice" /> <import resource="classpath:spring/spring-mybatis.xml" /> <import resource="classpath:spring/spring-registry.xml" /> <import resource="classpath:spring/spring-application.xml" /> </beans>
定義一個服務啟動入口類

package start; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by zb547 on 2018/5/14. */ public class StartApplication { public static void main(String[] args) throws Exception { ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("spring/spring-context.xml"); System.out.println("server started..."); while (true) { Thread.sleep(100); } } }
3.server-serviceImpl(存放服務接口實現)
第四步:web項目創建
1.web.xml配置信息(基本)

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>zb-project</display-name> <welcome-file-list> <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file> </welcome-file-list> <!--springMVC配置--> <!--前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--釋放靜態資源--> <servlet-mapping> <!-- 假如靜態內容css和js放在 static 目錄下,由容器定義的 default servlet 處理 --> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> <!--spring配置--> <!--spring監聽器,優先級高於過濾器,配在哪都可以--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- <listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener>--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/spring-application.xml</param-value> </context-param> <!--過濾器設置編碼--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--自定義過濾器進行登陸判斷--> <!-- <filter> <filter-name>loginFilter</filter-name> <filter-class>zb.filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>--> </web-app>
2.spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?> <!--suppress ALL --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 自動掃描controller包下的所有類,如果@Controller注入為bean 並將bean依賴注入,即dubbo服務端暴露的Service注入到Controller中, 加上dubbo標簽可以用@Reference --> <dubbo:annotation package="zb.controller"/> <context:component-scan base-package="zb.controller" /> <!--springmvc注解驅動--> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <!-- 消息轉換器,當springMVC返回字符串時,進行字符串編碼設置 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html; charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- 消息轉換器,當springMVC接收和返回json數據格式調用的轉換器,進行字符串編碼設置 --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html; charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!--視圖解析器配在--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!--上傳文件用的--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <value>2048000000</value> </property> <property name="maxInMemorySize"> <value>2048000</value> </property> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean> </beans>
3.spring-application.xml

<?xml version="1.0" encoding="UTF-8"?> <!--suppress ALL --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <context:component-scan base-package="zb.controller" /> <!-- 消費方應用名,用於計算依賴關系,不是匹配條件,不要與提供方一樣 --> <dubbo:application name="zb-web"/> <!-- 使用zookeeper廣播注冊中心暴露服務地址 --> <dubbo:registry address="zookeeper://114.55.95.79:2181?backup=114.55.31.202:2181,116.62.28.7:2181"/> </beans>
ps:基本信息這樣,后期有待完善
web端可以完全用dubbo掃描形式(掃描dubbo的@Reference注解)進行服務獲取,如果服務端serviceImpl很多的話,也可以進行包掃描(dubbo的@Service)的形式
進行服務發布,但是對於需要添加事務的serviceImpl,需要進行(spring的@Service)的注解,然后spring.xml文件中dubbo的接口實現方式進行服務發布,然后進行注解形式的事務控制。