springmvc+mybatis多數據源配置,AOP注解動態切換數據源


springmvc與springboot沒多大區別,springboot一個jar包配置幾乎包含了所有springmvc,也不需要繁瑣的xml配置,springmvc需要配置多種jar包,需要繁瑣的xml配置,當然springmvc也可以使用java類來配置,但這種感覺沒有xml配置來的直觀。 

springboot+mybatis多數據源看這里

下面是springmvc+mybatis動態多數據源完整代碼:

數據源配置db.properties

 1  
 2 #datasource.driver=com.mysql.jdbc.Driver
 3  
 4 #datasource.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
 5  
 6 #datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db1
 7  
 8 #數據源1
 9  
10 datasource1.driver=com.mysql.jdbc.Driver
11  
12 datasource1.url=jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false
13  
14 datasource1.username=root
15  
16 datasource1.password=root
17  
18 #數據源2
19  
20 datasource2.driver=com.mysql.jdbc.Driver
21  
22 datasource2.url=jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=utf-8&useSSL=false
23  
24 datasource2.username=root
25  
26 datasource2.password=root
27  
28 #通用配置
29  
30 jdbc.initialSize=5
31  
32 jdbc.minIdle=5
33  
34 jdbc.maxIdle=20
35  
36 jdbc.maxActive=100
37  
38 jdbc.maxWait=100000
39  
40 jdbc.defaultAutoCommit=false
41  
42 jdbc.removeAbandoned=true
43  
44 jdbc.removeAbandonedTimeout=600
45  
46 jdbc.testWhileIdle=true
47  
48 jdbc.timeBetweenEvictionRunsMillis=60000
49  
50 jdbc.numTestsPerEvictionRun=20

springmvc配置

  1 <?xml version="1.0" encoding="UTF-8"?>
  2  
  3 <beans xmlns="http://www.springframework.org/schema/beans"
  4  
  5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6  
  7 xmlns:tx="http://www.springframework.org/schema/tx"
  8  
  9 xmlns:aop="http://www.springframework.org/schema/aop"
 10  
 11 xmlns:context="http://www.springframework.org/schema/context"
 12  
 13 xmlns:mvc="http://www.springframework.org/schema/mvc"
 14  
 15 xsi:schemaLocation="
 16  
 17 http://www.springframework.org/schema/beans
 18  
 19 http://www.springframework.org/schema/beans/spring-beans.xsd
 20  
 21 http://www.springframework.org/schema/tx
 22  
 23 http://www.springframework.org/schema/tx/spring-tx.xsd
 24  
 25 http://www.springframework.org/schema/context
 26  
 27 http://www.springframework.org/schema/context/spring-context.xsd
 28  
 29 http://www.springframework.org/schema/mvc
 30  
 31 http://www.springframework.org/schema/mvc/spring-mvc.xsd
 32  
 33 http://www.springframework.org/schema/aop
 34  
 35 http://www.springframework.org/schema/aop/spring-aop.xsd ">
 36  
 37  
 38  
 39 <!--使用spring注解支持@RequestMapping, @Controller-->
 40  
 41 <mvc:annotation-driven />
 42  
 43 <!-- 掃描包下面spring注解,多個包以逗號分隔 -->
 44  
 45 <context:component-scan base-package="com.ss"/>
 46  
 47 <!-- 使用annotation自動注冊bean,並保證@Required,@Autowired的屬性被注入 -->
 48  
 49 <context:component-scan base-package="com.ss.controller">
 50  
 51 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
 52  
 53 </context:component-scan>
 54  
 55  
 56  
 57 <!-- 將無法mapping到Controller的path交給default servlet handler處理 -->
 58  
 59 <mvc:default-servlet-handler />
 60  
 61  
 62  
 63 <!-- 定義頁面文件的位置 -->
 64  
 65 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 66  
 67 <property name="prefix" value="/WEB-INF/views/" />
 68  
 69 <property name="suffix" value=".html" />
 70  
 71 </bean>
 72  
 73  
 74  
 75 <!-- 限制文件上傳大小
 76  
 77 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 78  
 79 <property name="defaultEncoding" value="UTF-8" />
 80  
 81 <property name="maxUploadSize" value="5242880" />
 82  
 83 </bean>
 84  
 85 -->
 86  
 87  
 88  
 89 <!-- 讓spring 去讀取指定路徑下的資源文件 注:maven下的pom.xml已經加載了資源文件了 -->
 90  
 91 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 92  
 93 <property name="locations" value="classpath:db.properties"/>
 94  
 95 </bean>
 96  
 97  
 98  
 99 <!-- 數據源1-->
100  
101 <bean id="datasource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
102  
103 <property name="driverClassName" value="${datasource1.driver}"/>
104  
105 <property name="url" value="${datasource1.url}"/>
106  
107 <property name="username" value="${datasource1.username}"/>
108  
109 <property name="password" value="${datasource1.password}"/>
110  
111 <property name="initialSize" value="${jdbc.initialSize}"/>
112  
113 <property name="minIdle" value="${jdbc.minIdle}"/>
114  
115 <property name="maxIdle" value="${jdbc.maxIdle}"/>
116  
117 <property name="maxActive" value="${jdbc.maxActive}"/>
118  
119 <property name="maxWait" value="${jdbc.maxWait}"/>
120  
121 <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
122  
123 <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
124  
125 <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
126  
127 <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
128  
129 <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
130  
131 <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
132  
133 <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
134  
135 </bean>
136  
137 <!-- 數據源2-->
138  
139 <bean id="datasource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
140  
141 <property name="driverClassName" value="${datasource2.driver}"/>
142  
143 <property name="url" value="${datasource2.url}"/>
144  
145 <property name="username" value="${datasource2.username}"/>
146  
147 <property name="password" value="${datasource2.password}"/>
148  
149 <property name="initialSize" value="${jdbc.initialSize}"/>
150  
151 <property name="minIdle" value="${jdbc.minIdle}"/>
152  
153 <property name="maxIdle" value="${jdbc.maxIdle}"/>
154  
155 <property name="maxActive" value="${jdbc.maxActive}"/>
156  
157 <property name="maxWait" value="${jdbc.maxWait}"/>
158  
159 <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
160  
161 <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
162  
163 <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
164  
165 <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
166  
167 <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
168  
169 <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
170  
171 <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
172  
173 </bean>
174  
175  
176  
177 <!-- 配置動態配置數據源 -->
178  
179 <bean id ="dynamicDataSource" class= "com.ss.config.DynamicDataSource">
180  
181 <!-- 默認使用dataSource1的數據源 -->
182  
183 <property name ="defaultTargetDataSource" ref="datasource1"></property>
184  
185 <property name ="targetDataSources">
187 <map key-type ="java.lang.String"> 
189 <entry key= "datasource1" value-ref="datasource1"></entry> 
191 <entry key= "datasource2" value-ref="datasource2"></entry> 
193 </map>
195 </property> 
199 </bean> 
203 <!-- mybatis事物相關配置 -->
204  
205 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
206  
207 <!-- 指定數據源——這里為動態多數據源 -->
208  
209 <property name="dataSource" ref="dynamicDataSource" />
210  
211 <!-- 指定mybatis-config.xml -->
212  
213 <property name="configLocation" value="classpath:mybatis-config.xml"></property>
214  
215 <!-- 指定實體類包 -->
216  
217 <property name="typeAliasesPackage" value="com.ss.model"/>
218  
219 <!-- 指定dao層對應的sql配置 -->
220  
221 <property name="mapperLocations" value="classpath:mapper/*.xml" />
222  
223 </bean>
224  
225 <!-- 掃描包下所有以@Mapper標識的接口-->
226  
227 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
228  
229 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
230  
231 <property name="basePackage" value="com.ss.dao" />
232  
233 </bean> 
239 <!-- 事務管理 -->
240  
241 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
242  
243 <property name="dataSource" ref="dynamicDataSource"></property>
244  
245 </bean>
246  
247 <!-- 使用聲明式事務 -->
248  
249 <tx:annotation-driven transaction-manager="txManager" />
253 <!-- 指定什么方法開始事務 attributes下面指定什么樣的方法注入事務 -->
254  
255 <tx:advice id="txAdvice" transaction-manager="txManager">
256  
257 <tx:attributes>
258  
259 <tx:method name="add*" propagation="REQUIRED"/>
260  
261 <tx:method name="save*" propagation="REQUIRED"/>
262  
263 <tx:method name="del*" propagation="REQUIRED"/>
264  
265 <tx:method name="insert*" propagation="REQUIRED"/>
266  
267 <tx:method name="update*" propagation="REQUIRED"/>
268  
269 <tx:method name="modify*" propagation="REQUIRED"/>
270  
271 <tx:method name="*" read-only="true"/>
272  
273 </tx:attributes>
274  
275 </tx:advice>
276  
277  
278  
279 <!-- 開啟注解配置 -->
280  
281 <context:annotation-config />
285 <!-- 開啟注解Aop -->
286  
287 <aop:aspectj-autoproxy proxy-target-class="true"/>
291 <!-- 配置數據庫注解aop -->
292  
293 <bean id="dataSourceAspect" class="com.ss.config.DynamicDataSourceAspect" />
298  
299 <aop:config>
300  
301 <!--
302  
303 切割點:pointcut
304  
305 第一個*:任意返回值
306  
307 第二個*:類名(任意類)
308  
309 第三個*:方法名(任意方法)
310  
311 (..):0-n參數,類型任意
312  
313 -->
314  
315 <aop:pointcut id="pointCut" expression="execution(* com.ss.service.*.*(..))" />
316  
317 <!--切割注入事物 ,植入事務:advisor-->
318  
319 <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
320  
321 <!-- 動態數據源切割
322  
323 <aop:aspect id="dynamicAspect" ref="dataSourceAspect">
324  
325 <aop:after pointcut-ref="pointCut" method="afterSwitchDS"/>
326  
327 <aop:before pointcut-ref="pointCut" method="beforeSwitchDS"/>
328  
329 </aop:aspect>
330  
331 -->
332  
333 </aop:config>
337 </beans>

mybatis配置

 

  1  
  2 <?xml version="1.0" encoding="UTF-8" ?>
  3  
  4 <!DOCTYPE configuration
  5  
  6 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  7  
  8 "http://mybatis.org/dtd/mybatis-3-config.dtd">
  9  
 10 <configuration>
 11  
 12 <properties>
 13  
 14 <property name="dialectClass" value="com.eliteams.quick4j.core.feature.orm.dialect.MySql5Dialect"/>
 15  
 16 </properties>
 17  
 18  
 19  
 20 <!-- 配置mybatis的緩存,延遲加載等等一系列屬性 -->
 21  
 22 <settings>
 23  
 24 <!-- 全局映射器啟用緩存 -->
 25  
 26 <setting name="cacheEnabled" value="true"/>
 27  
 28 <!-- 查詢時,關閉關聯對象即時加載以提高性能 -->
 29  
 30 <setting name="lazyLoadingEnabled" value="true"/>
 31  
 32 <!-- 對於未知的SQL查詢,允許返回不同的結果集以達到通用的效果 -->
 33  
 34 <setting name="multipleResultSetsEnabled" value="true"/>
 35  
 36 <!-- 允許使用列標簽代替列名 -->
 37  
 38 <setting name="useColumnLabel" value="true"/>
 39  
 40 <!-- 不允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作為鍵值),數據表的PK生成策略將被覆蓋 -->
 41  
 42 <setting name="useGeneratedKeys" value="false"/>
 43  
 44 <!-- 給予被嵌套的resultMap以字段-屬性的映射支持 FULL,PARTIAL -->
 45  
 46 <setting name="autoMappingBehavior" value="PARTIAL"/>
 47  
 48 <!-- 對於批量更新操作緩存SQL以提高性能 BATCH,SIMPLE -->
 49  
 50 <!-- <setting name="defaultExecutorType" value="BATCH" /> -->
 51  
 52 <!-- 數據庫超過25000秒仍未響應則超時 -->
 53  
 54 <!-- <setting name="defaultStatementTimeout" value="25000" /> -->
 55  
 56 <!-- Allows using RowBounds on nested statements -->
 57  
 58 <setting name="safeRowBoundsEnabled" value="false"/>
 59  
 60 <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. -->
 61  
 62 <setting name="mapUnderscoreToCamelCase" value="true"/>
 63  
 64 <!-- MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT
 65  
 66 local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. -->
 67  
 68 <setting name="localCacheScope" value="SESSION"/>
 69  
 70 <!-- Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values
 71  
 72 like NULL, VARCHAR or OTHER. -->
 73  
 74 <setting name="jdbcTypeForNull" value="OTHER"/>
 75  
 76 <!-- Specifies which Object's methods trigger a lazy load -->
 77  
 78 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
 79  
 80 <!-- 設置關聯對象加載的形態,此處為按需加載字段(加載字段由SQL指 定),不會加載關聯表的所有字段,以提高性能 -->
 81  
 82 <setting name="aggressiveLazyLoading" value="false"/>
 83  
 84  
 85  
 86 </settings>
 87  
 88 <!--
 89  
 90 <typeAliases>
 91  
 92 <package name="com.ss.dao"/>
 93  
 94 </typeAliases>
 95  
 96 -->
 97  
 98 <!--<plugins>-->
 99  
100 <!--<plugin interceptor="com.eliteams.quick4j.core.feature.orm.mybatis.PaginationResultSetHandlerInterceptor"/>-->
101  
102 <!--<plugin interceptor="com.eliteams.quick4j.core.feature.orm.mybatis.PaginationStatementHandlerInterceptor"/>-->
103  
104 <!--</plugins>-->
105  
106 </configuration>

數據源切換保存類

 1 package com.ss.config;
 2  
 3  
 4  
 5 /**
 6  
 7 * Created by pure on 2018-05-06.
 8  
 9 */
10  
11 public class DataSourceContextHolder {
12  
13 /**
14  
15 * 默認數據源
16  
17 */
18  
19 public static final String DEFAULT_DS = "datasource1";
20  
21  
22  
23 private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
24  
25  
26  
27 // 設置數據源名
28  
29 public static void setDB(String dbType) {
30  
31 System.out.println("切換到{"+dbType+"}數據源");
32  
33 contextHolder.set(dbType);
34  
35 }
36  
37  
38  
39 // 獲取數據源名
40  
41 public static String getDB() {
42  
43 //return (contextHolder.get());
44  
45 if(contextHolder.get()==null){
46  
47 return DEFAULT_DS;
48  
49 }else{
50  
51 return (contextHolder.get());
52  
53 }
54  
55 }
56  
57  
58  
59 // 清除數據源名
60  
61 public static void clearDB() {
62  
63 contextHolder.remove();
64  
65 }
66  
67 }

動態數據源類

 1 package com.ss.config;
 2  
 3  
 4  
 5 import org.springframework.core.annotation.Order;
 6  
 7 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 8  
 9  
10  
11 /**
12  
13 * Created by pure on 2018-05-08.
14  
15 */
16  
17 @Order(2)
18  
19 public class DynamicDataSource extends AbstractRoutingDataSource {
20  
21 @Override
22  
23 protected Object determineCurrentLookupKey() {
24  
25 System.out.println("當前數據源為"+DataSourceContextHolder.getDB());
26  
27 return DataSourceContextHolder.getDB();
28  
29 }
30 
31 }

 

自定義注解

 1 package com.ss.config;
 2  
 3  
 4  
 5 import java.lang.annotation.*;
 6  
 7  
 8  
 9 /**
10  
11 * 自定義注解
12  
13 */
14  
15 @Retention(RetentionPolicy.RUNTIME)
16  
17 @Target({ElementType.METHOD})
18  
19 @Documented
20  
21 public @interface DS {
22  
23 String value() default "datasource1";
24  
25 }

 

注解Aop切割類

  1 package com.ss.config;
  2  
  3  
  4  
  5 import org.aspectj.lang.JoinPoint;
  6  
  7 import org.aspectj.lang.annotation.After;
  8  
  9 import org.aspectj.lang.annotation.Aspect;
 10  
 11 import org.aspectj.lang.annotation.Before;
 12  
 13 import org.aspectj.lang.reflect.MethodSignature;
 14  
 15 import org.springframework.core.annotation.Order;
 16  
 17 import org.springframework.stereotype.Component;
 18  
 19  
 20  
 21 import java.lang.reflect.Method;
 22  
 23  
 24  
 25 /**
 26  
 27 * 自定義注解 + AOP的方式實現數據源動態切換。
 28  
 29 * Created by pure on 2018-05-06.
 30  
 31 */
 32  
 33 @Order(1)
 34  
 35 @Aspect
 36  
 37 //@Component
 38  
 39 public class DynamicDataSourceAspect {
 40  
 41 /*
 42  
 43 //使用DS注解動作之后清除
 44  
 45 @After("@annotation(DS)")
 46  
 47 public void afterSwitchDS(JoinPoint point){
 48  
 49 System.out.println("清除當前數據源"+DataSourceContextHolder.getDB());
 50  
 51 DataSourceContextHolder.clearDB();
 52  
 53 }
 54  
 55 //*/
 56  
 57 //使用DS注解動態切換
 58  
 59 @Before("@annotation(DS)")
 60  
 61 public void beforeSwitchDS(JoinPoint point){
 62  
 63 //獲得當前訪問的class
 64  
 65 Class<?> className = point.getTarget().getClass();
 66  
 67 //獲得訪問的方法名
 68  
 69 String methodName = point.getSignature().getName();
 70  
 71 //得到方法的參數的類型
 72  
 73 Class[] argClass = ((MethodSignature)point.getSignature()).getParameterTypes();
 74  
 75 String dataSource = DataSourceContextHolder.DEFAULT_DS;
 76  
 77 try {
 78  
 79 // 得到訪問的方法對象
 80  
 81 Method method = className.getMethod(methodName, argClass);
 82  
 83 // 判斷是否存在@DS注解
 84  
 85 if (method.isAnnotationPresent(DS.class)) {
 86  
 87 DS annotation = method.getAnnotation(DS.class);
 88  
 89 // 取出注解中的數據源名
 90  
 91 dataSource = annotation.value();
 92  
 93 }
 94  
 95 } catch (Exception e) {
 96  
 97 e.printStackTrace();
 98  
 99 }
100  
101 // 切換數據源
102  
103 DataSourceContextHolder.setDB(dataSource);
104  
105 }
106  
107  
108  
109 }

Mapper映射xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2  
 3 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 4  
 5  
 6  
 7 <mapper namespace="com.ss.dao.UserDao">
 8  
 9 <!-- 查詢所有user -->
10  
11 <select id="getAllUser" resultType="java.util.Map">
12  
13 select * from user
14  
15 </select>
16  
17 </mapper>

dao層

 1 package com.ss.dao;
 2  
 3 import org.apache.ibatis.annotations.Mapper;
 4  
 5 import org.apache.ibatis.annotations.Param;
 6  
 7 import java.util.List;
 8  
 9 import java.util.Map;
10  
11  
12 /**
13  
14 * dao層
15  
16 * Created by pure on 2018-05-06.
17  
18 */
19  
20 @Mapper
21  
22 public interface UserDao {
23  
24 //使用xml配置形式查詢
25  
26 public List<Map> getAllUser();
27  
28 }

service層

 1 package com.ss.service;
 2 
 3 import com.ss.config.DS;
 4  
 5 import com.ss.dao.UserDao;
 6  
 7 import org.springframework.beans.factory.annotation.Autowired;
 8  
 9 import org.springframework.stereotype.Service;
10 
11 import java.util.List;
12  
13 import java.util.Map;
14 
15 /**
16  
17 * service層
18  
19 * Created by pure on 2018-05-06.
20  
21 */
22  
23 @Service
24  
25 public class UserService {
26  
27 @Autowired
28  
29 private UserDao userDao;
30 
31 //使用數據源1查詢
32  
33 @DS("datasource1")
34  
35 public List<Map> getAllUser1(){
36  
37 return userDao.getAllUser();
38  
39 }
40  
41 //使用數據源2查詢
42  
43 @DS("datasource2")
44  
45 public List<Map> getAllUser2(){
46  
47 return userDao.getAllUser();
48  
49 }
50 
51 }

controller層

 1 package com.ss.controller;
 2 
 3 import com.ss.config.DataSourceContextHolder;
 4  
 5 import com.ss.service.UserService;
 6  
 7 import org.springframework.beans.factory.annotation.Autowired;
 8  
 9 import org.springframework.stereotype.Controller;
10  
11 import org.springframework.web.bind.annotation.RequestMapping;
12  
13 import org.springframework.web.bind.annotation.ResponseBody;
14 
15 import java.util.List;
16  
17 import java.util.Map;
18 
19 /**
20  
21 * Created by pure on 2018-05-08.
22  
23 */
24  
25 @Controller
26  
27 @RequestMapping("/user")
28  
29 public class UserController {
30  
31 
32 @Autowired
33  
34 private UserService userService;
35  
36 
37 @RequestMapping(value = "/getDb1AllUser")
38  
39 @ResponseBody
40  
41 public List<Map> getDb1AllUser() {
42  
43 List<Map> list = userService.getAllUser1();
44  
45 return list;
46  
47 }
48 
49  
50 @RequestMapping(value = "/getDb2AllUser")
51  
52 @ResponseBody
53  
54 public List<Map> getDb2AllUser() {
55  
56 List<Map> list = userService.getAllUser2();
57  
58 return list;
59  
60 }
61  
62 }

maven配置pom.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2  
  3 <project xmlns="http://maven.apache.org/POM/4.0.0"
  4  
  5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6  
  7 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  8  
  9 <modelVersion>4.0.0</modelVersion>
 10  
 11  
 12 <groupId>com.springmvc</groupId>
 13  
 14 <artifactId>ss1</artifactId>
 15  
 16 <version>1.0-SNAPSHOT</version>
 17  
 18 <packaging>war</packaging>
 19  
 20  
 21 <properties>
 22  
 23 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 24  
 25 </properties>
 26  
 27 <dependencies>
 28  
 29  
 30  
 31 <!-- jsp頁面jstl相關標簽包 -->
 32  
 33 <dependency>
 34  
 35 <groupId>javax.servlet</groupId>
 36  
 37 <artifactId>jstl</artifactId>
 38  
 39 <version>1.2</version>
 40  
 41 </dependency>
 42  
 43 <dependency>
 44  
 45 <groupId>taglibs</groupId>
 46  
 47 <artifactId>standard</artifactId>
 48  
 49 <version>1.1.2</version>
 50  
 51 </dependency>
 52  
 53 <dependency>
 54  
 55 <groupId>javax.servlet.jsp</groupId>
 56  
 57 <artifactId>jsp-api</artifactId>
 58  
 59 <version>2.2</version>
 60  
 61 </dependency>
 62  
 63  
 64 <!-- springMvc相關架包maven配置 -->
 65  
 66 <dependency>
 67  
 68 <groupId>org.springframework</groupId>
 69  
 70 <artifactId>spring-context</artifactId>
 71  
 72 <version>4.3.9.RELEASE</version>
 73  
 74 </dependency>
 75  
 76 <dependency>
 77  
 78 <groupId>org.springframework</groupId>
 79  
 80 <artifactId>spring-core</artifactId>
 81  
 82 <version>4.3.9.RELEASE</version>
 83  
 84 </dependency>
 85  
 86 <dependency>
 87  
 88 <groupId>org.springframework</groupId>
 89  
 90 <artifactId>spring-beans</artifactId>
 91  
 92 <version>4.3.9.RELEASE</version>
 93  
 94 </dependency>
 95  
 96 <dependency>
 97  
 98 <groupId>org.springframework</groupId>
 99  
100 <artifactId>spring-web</artifactId>
101  
102 <version>4.3.9.RELEASE</version>
103  
104 </dependency>
105  
106 <dependency>
107  
108 <groupId>org.springframework</groupId>
109  
110 <artifactId>spring-webmvc</artifactId>
111  
112 <version>4.3.9.RELEASE</version>
113  
114 </dependency>
115  
116 <dependency>
117  
118 <groupId>org.springframework</groupId>
119  
120 <artifactId>spring-aop</artifactId>
121  
122 <version>4.3.9.RELEASE</version>
123  
124 </dependency>
125  
126 <dependency>
127  
128 <groupId>org.springframework</groupId>
129  
130 <artifactId>spring-test</artifactId>
131  
132 <version>4.3.9.RELEASE</version>
133  
134 <scope>test</scope>
135  
136 </dependency>
137  
138 <dependency>
139  
140 <groupId>org.springframework</groupId>
141  
142 <artifactId>spring-context-support</artifactId>
143  
144 <version>4.3.9.RELEASE</version> <!-- 4.3.9.RELEASE 3.1.3.RELEASE-->
145  
146 </dependency>
147  
148 <dependency>
149  
150 <groupId>commons-dbcp</groupId>
151  
152 <artifactId>commons-dbcp</artifactId>
153  
154 <version>1.4</version>
155  
156 </dependency>
157  
158 <dependency>
159  
160 <groupId>org.springframework</groupId>
161  
162 <artifactId>spring-jdbc</artifactId>
163  
164 <version>4.3.9.RELEASE</version>
165  
166 </dependency>
167  
168 <dependency>
169  
170 <groupId>org.springframework</groupId>
171  
172 <artifactId>spring-orm</artifactId>
173  
174 <version>4.3.9.RELEASE</version>
175  
176 </dependency>
177  
178  
179 <dependency>
180  
181 <groupId>org.aspectj</groupId>
182  
183 <artifactId>aspectjrt</artifactId>
184  
185 <version>1.8.10</version>
186  
187 </dependency>
188  
189 <dependency>
190  
191 <groupId>org.aspectj</groupId>
192  
193 <artifactId>aspectjweaver</artifactId>
194  
195 <version>1.8.10</version>
196  
197 </dependency>
198   
199  
200 <!-- mybatis相關配置架包 -->
201  
202 <dependency>
203  
204 <groupId>org.mybatis</groupId>
205  
206 <artifactId>mybatis</artifactId>
207  
208 <version>3.4.4</version>
209  
210 </dependency>
211  
212 <!-- spring-mybatis整合包 -->
213  
214 <dependency>
215  
216 <groupId>org.mybatis</groupId>
217  
218 <artifactId>mybatis-spring</artifactId>
219  
220 <version>1.3.1</version>
221  
222 </dependency>
223  
224  
225 <!-- mysql連接包 -->
226  
227 <dependency>
228  
229 <groupId>mysql</groupId>
230  
231 <artifactId>mysql-connector-java</artifactId>
232  
233 <version>5.1.42</version>
234  
235 </dependency>
236   
237  
238 <dependency>
239  
240 <groupId>com.google.code.gson</groupId>
241  
242 <artifactId>gson</artifactId>
243  
244 <version>2.6.2</version>
245  
246 </dependency>
247  
248  
249  
250 <dependency>
251  
252 <groupId>log4j</groupId>
253  
254 <artifactId>log4j</artifactId>
255  
256 <version>1.2.17</version>
257  
258 </dependency>
259  
260 </dependencies>
261  
262  
263  
264 <build>
265  
266 <plugins>
267  
268 <plugin>
269  
270 <artifactId>maven-compiler-plugin</artifactId>
271  
272 <version>3.1</version>
273  
274 <configuration>
275  
276 <source>1.7</source>
277  
278 <target>1.7</target>
279  
280 </configuration>
281  
282 </plugin>
283  
284 </plugins>
285  
286 </build>
287 
288 </project>

web.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2  
  3 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  4  
  5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6  
  7 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  8  
  9 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 10  
 11 version="3.0">
 12  
 13 <context-param>
 14  
 15 <param-name>contextConfigLocation</param-name>
 16  
 17 <param-value>
 18  
 19 classpath:/spring-mvc.xml
 20  
 21 </param-value><!-- classpath*:/spring-mvc.xml,classpath*:spring-quartz.xml -->
 22  
 23 </context-param>
 24  
 25 <listener>
 26  
 27 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 28  
 29 </listener>
 30  
 31  
 32  
 33 <!-- Spring -->
 34  
 35 <servlet>
 36  
 37 <servlet-name>springServlet</servlet-name>
 38  
 39 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 40  
 41 <init-param>
 42  
 43 <param-name>contextConfigLocation</param-name>
 44  
 45 <param-value>classpath:/spring-mvc.xml</param-value>
 46  
 47 </init-param>
 48  
 49 <load-on-startup>1</load-on-startup>
 50  
 51 </servlet>
 52  
 53 <servlet-mapping>
 54  
 55 <servlet-name>springServlet</servlet-name>
 56  
 57 <url-pattern>/</url-pattern>
 58  
 59 </servlet-mapping>
 60  
 61  
 62  
 63 <filter>
 64  
 65 <filter-name>encodingFilter</filter-name>
 66  
 67 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 68  
 69 <init-param>
 70  
 71 <param-name>encoding</param-name>
 72  
 73 <param-value>UTF-8</param-value>
 74  
 75 </init-param>
 76  
 77 <init-param>
 78  
 79 <param-name>forceEncoding</param-name>
 80  
 81 <param-value>true</param-value>
 82  
 83 </init-param>
 84  
 85 </filter>
 86  
 87 <filter-mapping>
 88  
 89 <filter-name>encodingFilter</filter-name>
 90  
 91 <url-pattern>/*</url-pattern>
 92  
 93 </filter-mapping>
 94  
 95  
 96  
 97 <welcome-file-list>
 98  
 99 <welcome-file>index.jsp</welcome-file>
100  
101 </welcome-file-list>
102  
103 </web-app>

 

項目結構

運行結果:

代碼下載:https://download.csdn.net/download/xiaosheng_papa/10417516

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM