spring+mybatis需要的包:
org.springframework.spring-webmvc(spring框架DispatcherServlet需要,spring-webmvc會依賴spring-context,spring-context依賴其它主要spring包)
org.springframework.spring-jdbc(jdbc需要,依賴spring-tx)
org.mybatis.mybatis(mybatis-spring需要)
org.mybatis.mybatis-spring(SqlSessionFactory創建需要,mybatis需要)
mysql.mysql-connector-java(mysql數據庫驅動需要)
其它包:
javax.servlet.javax.servlet-api(HttpServletRequest,HttpServletResponse需要)
org.apache.httpcomponents.httpclient(調用其它工程的接口時需要)
log4j.log4j(mybatis需要)
junit.junit(test需要)
druid連接池:需要的包:
com.alibaba.druid(創建數據源需要,druid數據庫連接池需要)
可展示Druid的統計信息
c3p0連接池:需要的包
c3p0.c3p0
DBCP連接池:需要的包
commons-dbcp.commons-dbcp
JNDI連接池:需要的包
spring-context
log4j:需要的包
log4j.log4j(mybatis需要)
logback:需要的包
ch.qos.logback.logback-classic(依賴logback-core)
pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.jmu.ccjoin</groupId> 5 <artifactId>Spring-mybatis</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>Spring-mybatis</name> 9 <url>http://maven.apache.org</url> 10 11 <properties> 12 <spring.version>4.3.0.RELEASE</spring.version> 13 </properties> 14 <dependencies> 15 <!-- servlet --> 16 <dependency> 17 <groupId>javax.servlet</groupId> 18 <artifactId>javax.servlet-api</artifactId> 19 <version>4.0.1</version> 20 <scope>provided</scope> 21 </dependency> 22 23 <!-- spring-webmvc 依賴了這個包,會自動依賴其它的spring包 --> 24 <dependency> 25 <groupId>org.springframework</groupId> 26 <artifactId>spring-webmvc</artifactId> 27 <version>${spring.version}</version> 28 </dependency> 29 30 <dependency> 31 <groupId>org.springframework</groupId> 32 <artifactId>spring-jdbc</artifactId> 33 <version>${spring.version}</version> 34 </dependency> 35 36 <!-- Mybatis --> 37 <dependency> 38 <groupId>org.mybatis</groupId> 39 <artifactId>mybatis</artifactId> 40 <version>3.2.0</version> 41 </dependency> 42 43 <!-- Mybatis+Spring整合 --> 44 <dependency> 45 <groupId>org.mybatis</groupId> 46 <artifactId>mybatis-spring</artifactId> 47 <version>1.2.0</version> 48 </dependency> 49 50 <!-- mysql數據庫驅動 --> 51 <dependency> 52 <groupId>mysql</groupId> 53 <artifactId>mysql-connector-java</artifactId> 54 <version>5.1.40</version> 55 </dependency> 56 57 <!-- druid數據源 --> 58 <dependency> 59 <groupId>com.alibaba</groupId> 60 <artifactId>druid</artifactId> 61 <version>1.0.13</version> 62 </dependency> 63 64 <!-- c3p0數據源 --> 65 <dependency> 66 <groupId>c3p0</groupId> 67 <artifactId>c3p0</artifactId> 68 <version>0.9.1.2</version> 69 </dependency> 70 71 <!-- DBCP --> 72 <dependency> 73 <groupId>commons-dbcp</groupId> 74 <artifactId>commons-dbcp</artifactId> 75 <version>1.4</version> 76 </dependency> 77 78 <!-- log4j --> 79 <dependency> 80 <groupId>log4j</groupId> 81 <artifactId>log4j</artifactId> 82 <version>1.2.17</version> 83 </dependency> 84 85 <!-- logback --> 86 <dependency> 87 <groupId>ch.qos.logback</groupId> 88 <artifactId>logback-classic</artifactId> 89 <version>1.0.6</version> 90 </dependency> 91 92 <!-- 測試 --> 93 <dependency> 94 <groupId>junit</groupId> 95 <artifactId>junit</artifactId> 96 <version>3.8.1</version> 97 <scope>test</scope> 98 </dependency> 99 100 <!-- 支持CGLIB代理 --> 101 <dependency> 102 <groupId>cglib</groupId> 103 <artifactId>cglib</artifactId> 104 <version>3.1</version> 105 </dependency> 106 107 <!-- httpClient --> 108 <dependency> 109 <groupId>org.apache.httpcomponents</groupId> 110 <artifactId>httpclient</artifactId> 111 <version>4.3.5</version> 112 <scope>compile</scope> 113 </dependency> 114 </dependencies> 115 <build> 116 <finalName>Spring-mybatis</finalName> 117 </build> 118 </project>
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5 version="2.5"> 6 <display-name>spring-mybatis</display-name> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:applicationContext.xml</param-value> 10 </context-param> 11 <context-param> 12 <param-name>log4jConfigLocation</param-name> 13 <param-value>classpath:logback.xml</param-value> 14 </context-param> 15 <listener> 16 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 17 </listener> 18 19 <!-- <listener> 20 <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 21 </listener> --> 22 23 <servlet> 24 <servlet-name>servlet</servlet-name> 25 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 26 <init-param> 27 <param-name>contextConfigLocation</param-name> 28 <param-value>classpath:servlet.xml</param-value> 29 </init-param> 30 </servlet> 31 <servlet-mapping> 32 <servlet-name>servlet</servlet-name> 33 <url-pattern>*.action</url-pattern> 34 </servlet-mapping> 35 36 </web-app>
applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/context 7 http://www.springframework.org/schema/context/spring-context.xsd"> 8 9 <!-- 加載配置文件 --> 10 <context:property-placeholder 11 ignore-resource-not-found="true" ignore-unresolvable="true" 12 location="file:/var/opt/spring-mybatis/config.properties" /> 13 <context:component-scan 14 base-package="com.jmu.ccjoin.entity,com.jmu.ccjoin.service,com.jmu.ccjoin.core,com.jmu.ccjoin.controller" /> 15 16 <context:annotation-config /> 17 <import resource="classpath:applicationContext_datasource.xml"/> 18 </beans>
applicationContext_datasource.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/context 7 http://www.springframework.org/schema/context/spring-context.xsd"> 8 9 <!-- 自帶的jndi連接池/這里使用了tomcat下的數據源 --> 10 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 11 <property name="jndiName" value="java:comp/env/ccjoinDataSource" /> 12 </bean> 13 14 <!-- 配置Druid數據源 --> 15 <!-- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 16 init-method="init" destroy-method="close"> <property name="driverClassName" 17 value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" 18 /> <property name="username" value="${jdbc.username}" /> <property name="password" 19 value="${jdbc.password}" /> <property name="maxActive" value="${jdbc.maxPoolSize}" 20 /> <property name="initialSize" value="${jdbc.initialPoolSize}" /> <property 21 name="maxWait" value="${jdbc.maxIdleTime}" /> <property name="filters" value="stat,log4j" 22 /> </bean> --> 23 24 <!-- c3p0連接池 --> 25 <!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 26 destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}"></property> 27 <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" 28 value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> 29 <property name="minPoolSize" value="${jdbc.minPoolSize}" /> <property name="maxPoolSize" 30 value="${jdbc.maxPoolSize}" /> <property name="initialPoolSize" value="${jdbc.initialPoolSize}" 31 /> <property name="maxIdleTime" value="${jdbc.maxIdleTime}" /> </bean> --> 32 33 <!-- DBCP連接池 --> 34 <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 35 destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" 36 /> <property name="url" value="${jdbc.url}" /> <property name="username" 37 value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" 38 /> <property name="initialSize" value="${jdbc.initialPoolSize}" /> <property 39 name="maxIdle" value="${jdbc.maxPoolSize}" /> <property name="minIdle" value="${jdbc.minPoolSize}" 40 /> <property name="maxActive" value="${jdbc.maxIdleTime}" /> </bean> --> 41 42 <!-- MyBatis SqlSessionFactoryBean 配置 --> 43 <!-- <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean"> 44 <property name="dataSource" ref="dataSource" /> <property name="configLocation" 45 value="classpath:mybatis/mybatis-config.xml" /> <property name="typeAliasesPackage" 46 value="com.jmu.ccjoin.entity" /> <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" 47 /> </bean> --> 48 49 <!-- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 50 <property name="dataSource"> <ref bean="dataSource" /> </property> <property 51 name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property> 52 <property name="typeAliasesPackage" value="com.jmu.ccjoin.entity" /> <property 53 name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml" /> </bean> --> 54 <!-- mybatis文件 --> 55 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 56 <property name="dataSource" ref="dataSource"></property> 57 <!-- <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property> --> 58 <!-- 批量定義別名 ,指定包名,自動掃描包中的類,別名即為類名,首字母大小寫無所謂 --> 59 <!-- 自動掃描entity目錄, 省掉Configuration.xml里的手工配置 --> 60 <property name="typeAliasesPackage" value="com.jmu.ccjoin.entity"></property> 61 <property name="mapperLocations" value="classpath:mybatis/mapper/*Mapper.xml"></property> 62 </bean> 63 64 <!-- 配置事務 --> 65 <bean id="transactionManager" 66 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 67 <property name="dataSource" ref="dataSource" /> 68 </bean> 69 70 71 <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 72 <property name="basePackage" value="com.jmu.ccjoin.dao"></property> 73 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 74 </bean> 75 </beans>
file:/var/opt/spring-mybatis/config.properties
1 jdbc.driverClassName=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://172.16.1.23:3306/jmuv3?useUnicode=true&characterEncoding=utf8 3 jdbc.username=root 4 jdbc.password=123.com 5 jdbc.minPoolSize=5 6 jdbc.maxPoolSize=30 7 jdbc.initialPoolSize=10 8 jdbc.maxIdleTime=1800
servlet.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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" 3 xmlns:mvc="http://www.springframework.org/schema/mvc" 4 xsi:schemaLocation=" 5 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 6 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 8 9 <context:component-scan 10 base-package="com.jmu.ccjoin.controller" /> 11 12 <!-- 避免IE執行AJAX時,返回JSON出現下載文件 --> 13 <!-- <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> --> 14 15 <!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 16 <property name="messageConverters"> 17 <list> 18 <ref bean="mappingJacksonHttpMessageConverter" />json轉換器 19 </list> 20 </property> 21 </bean> --> 22 23 <!-- <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 24 <property name="resourceLoaderPath"> 25 <value>/WEB-INF/view</value> 26 </property> 27 <property name="velocityProperties"> 28 <props> 29 <prop key="input.encoding">UTF-8</prop> 30 <prop key="output.encoding">UTF-8</prop> 31 <prop key="velocimacro.library">control/macros.vm</prop> 32 </props> 33 </property> 34 </bean> --> 35 36 <!-- 攔截器 --> 37 <mvc:interceptors> 38 <bean class="com.jmu.ccjoin.interceptor.LogInterceptor" /> 39 </mvc:interceptors> 40 </beans>
logback.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <!-- 級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL --> 4 <!-- 日志輸出規則 根據當前ROOT 級別,日志輸出時,級別高於root默認的級別時 會輸出 --> 5 <!-- 以下 每個配置的 filter 是過濾掉輸出文件里面,會出現高級別文件,依然出現低級別的日志信息,通過filter 過濾只記錄本級別的日志 --> 6 <!-- scan 當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。 --> 7 <!-- scanPeriod 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鍾。 --> 8 <!-- debug 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。 --> 9 <configuration scan="true" scanPeriod="60 seconds" debug="false"> 10 11 <!-- 動態日志級別 --> 12 <jmxConfigurator/> 13 14 <!-- 定義日志文件 輸出位置 --> 15 <!-- <property name="log_dir" value="logs"/> --> 16 17 <!-- 日志最大的歷史 30天 --> 18 <!-- <property name="maxHistory" value="30"/> --> 19 20 <!-- ConsoleAppender 控制台輸出日志 --> 21 <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> 22 <encoder> 23 <pattern> 24 <!-- 設置日志輸出格式 --> 25 %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n 26 </pattern> 27 </encoder> 28 </appender> 29 30 <!-- ERROR級別日志 --> 31 <!-- 滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 RollingFileAppender --> 32 <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> 33 <!-- 過濾器,只記錄WARN級別的日志 --> 34 <!-- 果日志級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。 --> 35 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 36 <!-- 設置過濾級別 --> 37 <level>ERROR</level> 38 <!-- 用於配置符合過濾條件的操作 --> 39 <onMatch>ACCEPT</onMatch> 40 <!-- 用於配置不符合過濾條件的操作 --> 41 <onMismatch>DENY</onMismatch> 42 </filter> 43 <!-- 最常用的滾動策略,它根據時間來制定滾動策略.既負責滾動也負責出發滾動 --> 44 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 45 <!--日志輸出位置 可相對、和絕對路徑 --> 46 <fileNamePattern> 47 ${log.home_url}/error/%d{yyyy-MM-dd}/shop-admin.log 48 </fileNamePattern> 49 <!-- 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件假設設置每個月滾動,且<maxHistory>是6, 則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創建的目錄也會被刪除 --> 50 <maxHistory>${log.maxHistory}</maxHistory> 51 </rollingPolicy> 52 <encoder> 53 <pattern> 54 <!-- 設置日志輸出格式 --> 55 %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n 56 </pattern> 57 </encoder> 58 </appender> 59 60 61 <!-- WARN級別日志 appender --> 62 <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> 63 <!-- 過濾器,只記錄WARN級別的日志 --> 64 <!-- 果日志級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。 --> 65 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 66 <!-- 設置過濾級別 --> 67 <level>WARN</level> 68 <!-- 用於配置符合過濾條件的操作 --> 69 <onMatch>ACCEPT</onMatch> 70 <!-- 用於配置不符合過濾條件的操作 --> 71 <onMismatch>DENY</onMismatch> 72 </filter> 73 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 74 <!--日志輸出位置 可相對、和絕對路徑 --> 75 <fileNamePattern>${log.home_url}/warn/%d{yyyy-MM-dd}/shop-admin.log</fileNamePattern> 76 <maxHistory>${log.maxHistory}</maxHistory> 77 </rollingPolicy> 78 <encoder> 79 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern> 80 </encoder> 81 </appender> 82 83 84 <!-- INFO級別日志 appender --> 85 <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> 86 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 87 <level>INFO</level> 88 <onMatch>ACCEPT</onMatch> 89 <onMismatch>DENY</onMismatch> 90 </filter> 91 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 92 <fileNamePattern>${log.home_url}/info/%d{yyyy-MM-dd}/shop-admin.log</fileNamePattern> 93 <maxHistory>${log.maxHistory}</maxHistory> 94 </rollingPolicy> 95 <encoder> 96 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern> 97 </encoder> 98 </appender> 99 100 101 <!-- DEBUG級別日志 appender --> 102 <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> 103 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 104 <level>DEBUG</level> 105 <onMatch>ACCEPT</onMatch> 106 <onMismatch>DENY</onMismatch> 107 </filter> 108 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 109 <fileNamePattern>${log.home_url}/debug/%d{yyyy-MM-dd}/shop-admin.log</fileNamePattern> 110 <maxHistory>${log.maxHistory}</maxHistory> 111 </rollingPolicy> 112 <encoder> 113 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern> 114 </encoder> 115 </appender> 116 117 118 <!-- TRACE級別日志 appender --> 119 <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 120 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 121 <level>TRACE</level> 122 <onMatch>ACCEPT</onMatch> 123 <onMismatch>DENY</onMismatch> 124 </filter> 125 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 126 <fileNamePattern>${log.home_url}/trace/%d{yyyy-MM-dd}/shop-admin.log</fileNamePattern> 127 <maxHistory>${log.maxHistory}</maxHistory> 128 </rollingPolicy> 129 <encoder> 130 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n</pattern> 131 </encoder> 132 </appender> 133 134 135 <!-- root級別 DEBUG --> 136 <root> 137 <!-- 打印debug級別日志及以上級別日志 --> 138 <level value="debug"/> 139 <!-- 控制台輸出 --> 140 <appender-ref ref="console"/> 141 <!-- 文件輸出 --> 142 <appender-ref ref="ERROR"/> 143 <appender-ref ref="INFO"/> 144 <appender-ref ref="WARN"/> 145 <appender-ref ref="DEBUG"/> 146 <appender-ref ref="TRACE"/> 147 </root> 148 </configuration>