一、核心配置
- 配置spring-context.xml
- 配置spring-mvc.xml
- 配置web.xml
- 配置db.properties
- 配置mybatis-config.xml(1.3以后可以不配置)
- 配置mapper.xml
- 配置logback.xml
二、导入相应的jar包
2.1 properties版本声明
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.1.9.RELEASE</spring.version>
<mybatis.version>3.5.1</mybatis.version>
<mybatis-spring.version>2.0.2</mybatis-spring.version>
<mysql-connector.version>8.0.17</mysql-connector.version>
<slf4j-api.version>1.7.25</slf4j-api.version>
<logback.version>1.2.3</logback.version>
<logback-spring.version>0.1.5</logback-spring.version>
<lombok.version>1.18.8</lombok.version>
<druid.version>1.1.19</druid.version>
<junit.version>4.12</junit.version>
<fastjson.version>1.2.59</fastjson.version>
<javax.servlet-api.version>4.0.1</javax.servlet-api.version>
<cors-filter.version>2.6</cors-filter.version>
<java-property-utils.version>1.9.1</java-property-utils.version>
<commons-fileupload.version>1.4</commons-fileupload.version>
<commons-lang3.version>3.9</commons-lang3.version>
</properties>
2.2 导入maven架包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--核心包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--第三方orm框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--事物管理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--切面编程包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring mvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--MyBatis核心包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--MyBatis 对spring支持-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--druid连接池池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--mysql driver-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!--fastjsion 需要配置-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--slf4j 日志接口 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<!--logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>${logback-spring.version}</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<!--解决跨域请求-->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>${cors-filter.version}</version>
</dependency>
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>java-property-utils</artifactId>
<version>${java-property-utils.version}</version>
</dependency>
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!--文件上传工具包-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
</dependencies>
三、Spring+Mybatis整合
3.1、说明
- 配置数据库相关参数properties的属性:通过${}来获取属性值
- 数据库连接池
- 配置SqlSessionFactory对象 这一步非常重要。把entity扫面和mapper.xml扫描配置进去
- 配置扫描DAO接口包 目的:动态实现DAO接口,并注入到Spring容器中,最能节省工作量的配置
3.2、spring-context.xml
开启注解扫描
<!--开启注解-->
<context:component-scan base-package="com.wch.community"/>
3.3.1、db.properties
db.username=root
db.password=12345678
db.url=jdbc:mysql://localhost:3306/blogs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
3.3.2、spring-mybatis.xml
<!--1.配置数据库相关参数
properties的属性:通过${}来获取属性值
-->
<context:property-placeholder location="classpath:/config/db.properties"/>
<!--2.在上面的配置中,通常你需要配置url、username、password,maxActive这三项。
Druid会自动跟url识别驱动类名,如果连接的数据库非常见数据库,配置属性driverClassName
asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间
-->
<bean id="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="filters" value="stat"/>
<property name="maxActive" value="20"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="60000"/>
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="poolPreparedStatements" value="true"/>
<property name="maxOpenPreparedStatements" value="20"/>
<property name="asyncInit" value="true"/>
</bean>
<!--3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置MyBatis全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:/config/mybatis-config.xml"/>
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="com.werner.ssm.domain.entity"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<!-- 这句配置mapper配置文件的位置 如果采用注解的方式这句可以省去 -->
<property name="mapperLocations" value="classpath:mappers/**/*.xml"/>
</bean>
<!--4 Mapper接口所在包名,Spring自动扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.werner.ssm.mapper"
p:sqlSessionFactoryBeanName="sqlSessionFactory"
/>
3.4、SpringMVC整合
3.4.1、说明
主要配置
- 注解的启动
- 自动扫描控制器,
- 视图模式,
- 静态资源的处理
其它配置
- 配置文件上传
- 第三方json整合(fastjson)
- 避免IE执行AJAX时,返回JSON出现下载文件
3.4.2spring-mvc.xml
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:/config/sys.properties"/>
<!--1. 由子容器扫描装配了@Service 注解的实例。
spring的context是父子容器,由ServletContextListener
加载spring配置文件产生的是父容器,springMVC加载配置文件产生的是子容器,
子容器对Controller进行扫描装配时装配了@Service注解的实例
(@Controller 实例依赖@Service实例),
而该实例理应由父容器进行初始化以保证事务的增强处理,
所以此时得到的将是原样的Service(没有经过事务加强处理,故而没有事务处理能力)
-->
<context:component-scan base-package="com.peiren.ssm">
<!-- 2.开启SpringMVC注解模式 -->
<!-- 简化配置:
1>自动注册DefaultAnootationHandlerMapping,AnotationMethodHandlerAdapter
2>提供一些列:数据绑定,数字和日期的format @NumberFormat, @DateTimeFormat, xml,json默认读写支持
-->
<mvc:annotation-driven>
<!--3.fastjson配置-->
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!--指定返回json格式的数据,指定字符集-->
<property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>
<property name="fastJsonConfig">
<bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
<!--指定默认输出的日期格式-->
<property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>
<!--序列化对象配置 可选-->
<property name="serializerFeatures">
<array>
<!--输出key时是否使用双引号,默认为true-->
<value>QuoteFieldNames</value>
<!--将JavaBean序列化为带格式的JSON文本-->
<value>PrettyFormat</value>
<!--是否输出值为null的字段,默认为false-->
<value>WriteMapNullValue</value>
<!--List字段若为null,输出[],而非null-->
<value>WriteNullListAsEmpty</value>
<!--数值字段若为null,输出0,而非null-->
<value>WriteNullNumberAsZero</value>
<!--字符类型字段若为null,输出”“,而非null-->
<value>WriteNullStringAsEmpty</value>
<!--Boolean字段若为null,输出false,而非null-->
<value>WriteNullBooleanAsFalse</value>
<!--日期格式化-->
<value>WriteDateUseDateFormat</value>
</array>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 5.配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="52428800" />
<!-- 单个文件限制大小 -->
<property name="maxUploadSizePerFile" value="5242880"/>
<!-- 内存中缓存的最大值 -->
<property name="maxInMemorySize" value="10240" />
<!-- 为true时,启用推迟文件解析,以便在UploadAction中捕获文件大小异常-->
<property name="resolveLazily" value="true"/>
</bean>
3.5 开启事务
3.5.1、spring-tx.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--spring事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven/>
</beans>
3.6、logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<!--改成你自己的-->
<property name="LOG_HOME" value="../logs"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<logger name="java.sql.Connection" level="DEBUG" />
<logger name="java.sql.Statement" level="DEBUG" />
<logger name="java.sql.PreparedStatement" level="DEBUG" />
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
四、web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<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>
<display-name>Archetype Created Web Application</display-name>
<!-- 1 加载Spring 配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--spring MVC 加载配置器-->
<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-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>
<!-- 加载logback配置文件-->
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
<!--设置默认启动页-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--CORS 跨域资源访问-->
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
五、其它常用第三方库
1.Apache POI 处理office文档用到的
2. IText PDF操作类库
3.Java Base64 Base64编码类库
4.Commons-lang 对应java sdk里面的java.lang包,用来简化基本工具类操作
5.pingyin4j 中文转拼音库
6.Commons-IO,处理IO的工具包
7.Commons-beanutils 用来处理javaBean类的反射,内省的工具包
8.Commons-codec 处理常用加密编码
9.Commons-collections 对各种集合类的封装
10.patchca Java验证码类库
11.Commons Configuration Java配置文件管理类
12.CGLib Java动态代理类库
13.Super CSV Java Csv格式读写类库
14.com4j 使用java调用com的类库
15.util.concurrent JAVA并发开发包
16.Jsapar JAVA文本文件处理包
17.Dregexp 正则表达式类库
18.JEgg Java多线程开发包
19.SmartPagination 页面数据分页处理20.Dom4j xml解析类
20.xml解析四种模式DOM,SAX,JDOM,DOM4J
21.SLF4J 日志处理软件包,底层可以支持log4j,commonlog,JDKLOG等等。
22.Apache MINA TCP/IP通信非阻塞框架,可以实现高性能的NIO通信机制。
23.JBossNetty 同22,JBOSS提供的一个开源框架,适合高并发连接。
24.httpclient apache开源框架,实现http协议的各项操作。
25.google Guice 一个开源JAVA实现的IOC框架,据说性能高于spring100倍,希望你可以验证下。
26.CGLIB 一个动态代理实现的框架,hibernate,spring等框架里的动态代理实现。
27.JBOSS JBPM 工作流引擎开源框架。
28.DROOLS 规则引擎开源框架,商业的有ILOG(IBM拥有)。
29.JEgg 是一个框架用来减少开发可靠的多线程 Java 应用程序的复杂度。JEgg 采用的是活动对象 Active Object 设计模式。
30.IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。
IK Expression V2.0不依赖于任何第三方的java库。它做为一个简单的jar,可以集成于任意的Java应用中。这包括了JavaEE应用(基于应用服务器的), Java桌面应用以及Java WebStart方式的应用。
IK Expression最初诞生的原因是为了能增强工作流引擎,如jBPM等对流程配置的灵活度。使其能在流程运行期获得同配置期一样灵活地对执行逻辑条件进行变更。经过扩展后的IK Expression还可以适用于各种常规业务系统的动态条件配置,如需要图形化配置应用的场合,或是模拟Excel电子表格的公式运算的场景。
31.date4j是一个用于简化日期和时间操作的Java工具。可以替换java.util.Date。
网友评论