首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring + Spring MVC + MyBatis 高性能 Web 架構實戰:Maven 多模組、Shiro 安全、Druid 連接池、Ehcache、分頁插件全套源碼解析

     編輯:Java 相關知識

本文基於開源項目 quick4j,深度解析企業級 Java Web 基礎架構:Maven 依賴管理、Web.xml 配置、Spring 核心容器、MyBatis 整合、Shiro 權限、Druid 監控、Ehcache 緩存、MyBatis 分頁插件、Log4j 日誌、國際化驗證,提供可直接生產落地的完整配置體系。

項目結構


quick4j
├── src/main/java          # Java 源碼 (controller/service/dao/model)
├── src/main/resources     # 配置文件 (spring, mybatis, shiro, ehcache, log4j)
├── src/main/webapp        # Web 資源 (JSP, 靜態資源)
├── src/test/java          # 測試代碼 (含 MyBatis Generator 配置)
├── pom.xml                # Maven 核心配置
└── quick4j.sql            # 數據庫腳本

核心技術棧版本 (pom.xml 關鍵依賴)

  • Spring 4.0.2 / Spring MVC
  • MyBatis 3.2.2 + mybatis-spring 1.2.2
  • MySQL Connector 5.1.30 / Druid 1.0.5
  • Shiro 1.2.3 (認證授權 + Ehcache 緩存)
  • Jackson 1.9.13 (JSON)
  • Hibernate Validator 5.1.1 (JSR-303)
  • AspectJ 1.6.12 (AOP)
  • Netty 4.0.18 (高性能網絡)

關鍵配置文件解析

1. web.xml - 應用入口

  • ContextLoaderListener 加載 applicationContext.xml、applicationContext-shiro.xml。
  • CharacterEncodingFilter 強制 UTF-8。
  • DelegatingFilterProxy 代理 shiroFilter。
  • DispatcherServlet 攔截 /rest/*,REST 風格最佳性能。
  • 錯誤頁面映射 404/500/401 (Shiro 無權限)。

2. applicationContext.xml - Spring 核心容器

  • 組件掃描:base-package="com.eliteams.quick4j"。
  • 屬性佔位符:PropertyPlaceholderConfigurer 載入 application.properties。
  • Druid 數據源:完整連接池參數 (初始/最小/最大、驗證查詢、PSCache、監控 Filter)。
  • MyBatis 整合:SqlSessionFactoryBean (dataSource + configLocation + mapperLocations) + MapperScannerConfigurer 掃描 DAO 接口。
  • 聲明式事務:DataSourceTransactionManager + tx:advice (insert/update/delete REQUIRED 回滾、select/count 唯讀) + aop:config 切面 Service 層 + tx:annotation-driven 支援 @Transactional。
  • CGLIB 代理:aop:aspectj-autoproxy proxy-target-class="true"。
  • Ehcache 緩存:cache:annotation-driven + EhCacheCacheManager。

3. application.properties - 環境配置


jdbc.url=jdbc:mysql://localhost:3306/quick4j?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=admin123
ds.initialSize=1
ds.minIdle=1
ds.maxActive=20
ds.maxWait=60000
ds.timeBetweenEvictionRunsMillis=60000
ds.minEvictableIdleTimeMillis=300000

4. mybatis-config.xml - MyBatis 核心配置

  • 分頁插件:PaginationResultSetHandlerInterceptor + PaginationStatementHandlerInterceptor 實現物理分頁。
  • 性能優化設置:lazyLoadingEnabled=true、aggressiveLazyLoading=false、mapUnderscoreToCamelCase=true、localCacheScope=SESSION、jdbcTypeForNull=OTHER。
  • 類型別名:掃描 com.eliteams.quick4j.web.model、enums 包。

5. spring-mvc.xml - Spring MVC 配置

  • 掃描 Controller 包。
  • mvc:annotation-driven + Hibernate Validator + 國際化 MessageSource。
  • 視圖解析器 InternalResourceViewResolver (前綴 /WEB-INF/views/,後綴 .jsp)。
  • 文件上傳 CommonsMultipartResolver (10GB 上限)。
  • Jackson JSON 輸出 (解決 IE AJAX 下載問題)。
  • Shiro 授權註解攔截 AuthorizationAttributeSourceAdvisor。

6. applicationContext-shiro.xml - 安全框架

  • ShiroFilterFactoryBean:anon 靜態資源/登錄頁,authc 其他受保護。
  • DefaultWebSecurityManager + 自定義 Realm (需實現 doGetAuthenticationInfo/doGetAuthorizationInfo)。
  • Ehcache 緩存授權信息。
  • LifecycleBeanPostProcessor 管理 Shiro Bean 生命週期。

7. 數據庫設計 quick4j.sql

標準 RBAC 模型:user、role、permission、user_role、role_permission 五表,支援細粒度權限控制 (如 user:create)。

運行效果截圖

登錄頁

主界面

快速啟動步驟

  1. Clone 項目:git clone https://github.com/Eliteams/quick4j.git
  2. 建庫執行 quick4j.sql。
  3. 修改 application.properties 數據庫連接。
  4. Maven 安裝:mvn clean install。
  5. 部署到 Tomcat 7/8/9,訪問 https://localhost:8080/quick4j/rest/index。
  6. 默認賬號:starzou / 密碼 123456 (BCrypt 加密存儲)。

架構亮點總結

維度方案收益
連接池Druid監控、防火牆、PSCache、SQL 統計
分頁MyBatis 攔截器物理分頁無感知、跨數據庫、避免內存溢出
緩存Ehcache + Spring Cache 注解聲明式、支援 JSR-107、分佈式可擴展
事務AOP + 注解雙模式Service 層統一、方法級精細控制
安全Shiro Realm + 註解授權輕量、非侵入、支援 Session 共享
驗證Hibernate Validator + 國際化JSR-303 標準、前後端統一錯誤碼
日誌SLF4J + Log4j DailyRolling按天切割、生產級輸出格式

這套架構經過生產環境驗證,核心優勢在於配置集中化、組件解耦合、性能監控內建、安全權限完備。建議作為微服務拆分前的單體最佳實踐基線,或作為學習 Spring 生態整合的標準教材。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved