logback与Spring、SpringMVC结合使用教程(转) logback good
摘要:本文主要介绍了如何在spring、springMVC中使用logback
一、logback与Spirng结合使用
1、maven添加引用:
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>org.logback-extensions</groupId>
- <artifactId>logback-ext-spring</artifactId>
- <version>0.1.1</version>
- </dependency>
其中logback-ext-spring这个jar包是为了和spring一起使用的。
2、src/main/resource添加logback.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
- <property name="log.root.level" value="${log.root.level}" /> <!-- 日志级别 -->
- <property name="log.other.level" value="${log.other.level}" /> <!-- 其他日志级别 -->
- <property name="log.base" value="${log.base}" /> <!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->
- <property name="log.moduleName" value="${log.moduleName}" /> <!-- 模块名称, 影响日志配置名,日志文件名 -->
- <property name="log.max.size" value="100MB" /> <!-- 日志文件大小 -->
- <!--控制台输出 -->
- <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method:%L -%msg%n</Pattern>
- </encoder>
- </appender>
- <!-- 日志文件输出 -->
- <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${log.base}/${log.moduleName}.log</File><!-- 设置日志不超过${log.max.size}时的保存路径,注意如果 是web项目会保存到Tomcat的bin目录 下 -->
- <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。-->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <!-- 当天的日志大小 超过${log.max.size}时,压缩日志并保存 -->
- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>${log.max.size}</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <!-- 日志输出的文件的格式 -->
- <layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method:%L -%msg%n</pattern>
- </layout>
- </appender>
- <!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
- <logger name="com.lin" additivity="false">
- <level value="debug" />
- <appender-ref ref="stdout" />
- <appender-ref ref="file" />
- </logger>
- <!-- root将级别为“DEBUG”及大于“DEBUG”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console -->
- <root level="debug">
- <appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
- <appender-ref ref="file" />
- </root>
- </configuration>
其中,下面这几个参数 是在pom.xml里配置的,如果你不想在pom.xml里来配置,也可以直接写死就是
<property name="log.root.level" value="${log.root.level}" />
<property name="log.other.level" value="${log.other.level}" />
<property name="log.base" value="${log.base}" />
<property name="log.moduleName" value="${log.moduleName}" />
<property name="log.max.size" value="10kb" />
参数内容如下:
- <profiles>
- <!-- 开发环境 -->
- <profile>
- <id>dev</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <!-- 以下配置properties中用到一些变量,如数据库连接参数、日志打印等 -->
- <properties>
- <!-- DB Resource -->
- <jdbc_driverClassName>com.mysql.jdbc.Driver</jdbc_driverClassName>
- <jdbc_url>jdbc:mysql://localhost:3306/learning</jdbc_url>
- <jdbc_username>root</jdbc_username>
- <jdbc_password>christmas258@</jdbc_password>
- <log.moduleName>ssm-project</log.moduleName>
- <log.base>logs</log.base>
- <log.other.level>DEBUG</log.other.level>
- <log.root.level>DEBUG</log.root.level>
- <log.stdout.ref><![CDATA[<appender-ref ref="stdout" />]]></log.stdout.ref>
- </properties>
- </profile>
- </profiles>
3、如果单独的跑一个spring项目,不带web页面的话,那么这时跑个单元测试就可以打印日志了
二、logback与spingMVC结合使用
- <!-- 添加日志监听器 -->
- <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>
然后本地启动tomcat,把项目加载进来,注意,此时的日志输出路径 不会像上面一样出现在工程所在路径的logs目录下,而会放在eclipse安装目录下,自动新建一个logs目录 下:
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同,以下配置参数在pom.xml里 -->
- <property name="log.root.level" value="${log.root.level}" /> <!-- 日志级别 -->
- <property name="log.other.level" value="${log.other.level}" /> <!-- 其他日志级别 -->
- <property name="log.base" value="${log.base}" /> <!-- 日志路径,这里是相对路径,web项目eclipse下会输出到eclipse的安装目录下,如果部署到linux上的tomcat下,会输出到tomcat/bin目录 下 -->
- <property name="log.moduleName" value="${log.moduleName}" /> <!-- 模块名称, 影响日志配置名,日志文件名 -->
- <property name="log.max.size" value="100MB" /> <!-- 日志文件大小,超过这个大小将被压缩 -->
- <!--控制台输出 -->
- <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</Pattern>
- </encoder>
- </appender>
- <!-- 用来保存输出所有级别的日志 -->
- <appender name="file.all" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${log.base}/${log.moduleName}.log</File><!-- 设置日志不超过${log.max.size}时的保存路径,注意如果
- 是web项目会保存到Tomcat的bin目录 下 -->
- <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件。 -->
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>${log.base}/archive/${log.moduleName}_all_%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>${log.max.size}</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <!-- 日志输出的文件的格式 -->
- <layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method:%L -%msg%n</pattern>
- </layout>
- </appender>
- <!-- 这也是用来保存输出所有级别的日志 -->
- <appender name="file.all.other" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${log.base}/${log.moduleName}_other.log</File>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>${log.base}/archive/${log.moduleName}_other_%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>${log.max.size}</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L -%msg%n</pattern>
- </layout>
- </appender>
- <!-- 只用保存输出error级别的日志 -->
- <appender name="file.error"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${log.base}/${log.moduleName}_err.log</File>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>${log.base}/archive/${log.moduleName}_err_%d{yyyy-MM-dd}.%i.log.zip
- </FileNamePattern>
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>${log.max.size}</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L - %msg%n</pattern>
- </layout>
- <!-- 下面为配置只输出error级别的日志 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>ERROR</level>
- <onMatch>ACCEPT</onMatch>
- <onMismatch>DENY</onMismatch>
- </filter>
- </appender>
- <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
- <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
- <!-- 添加附加的appender,最多只能添加一个 -->
- <appender name="file.async" class="ch.qos.logback.classic.AsyncAppender">
- <discardingThreshold>0</discardingThreshold>
- <queueSize>256</queueSize>
- <includeCallerData>true</includeCallerData>
- <appender-ref ref="file.all" />
- </appender>
- <appender name="file.async.other" class="ch.qos.logback.classic.AsyncAppender">
- <discardingThreshold>0</discardingThreshold>
- <queueSize>256</queueSize>
- <includeCallerData>true</includeCallerData>
- <appender-ref ref="file.all.other" />
- </appender>
- <!-- 为某个包下的所有类的指定Appender 这里也可以指定类名称例如:com.aa.bb.ClassName -->
- <logger name="com.lin" additivity="false">
- <level value="${log.root.level}" />
- <appender-ref ref="stdout" />
- <appender-ref ref="file.async" /><!-- 即com.lin包下级别为 ${log.root.level}的才会使用file.async来打印 -->
- <appender-ref ref="file.error" />
- </logger>
- <!-- root将级别为${log.root.level}及大于${log.root.level}的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console,其它同理 -->
- <root level="${log.root.level}">
- <appender-ref ref="stdout" /> <!-- 标识这个appender将会添加到这个logger -->
- <appender-ref ref="file.async.other" />
- <appender-ref ref="file.error" />
- </root>
- </configuration>
还有另一个网上的找的配置文件,笔者 没有使用过,不过,大家可以参考下来写:
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration scan="true" scanPeriod="10 seconds" debug="false">
- <!--打印logback初始化日志系统信息,debug="true"是同等效果-->
- <!--<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>-->
- <!-- 将日志输出在当前项目的根目录下 -->
- <property name="contextPath" value="/home/logs/valiuser"/>
- <!-- 日志的上下文路径 -->
- <property name="logPath" value="${contextPath}"/>
- <!-- 配置日志的滚动时间 -->
- <property name="maxHistory" value="90"/>
- <!-- 打印日志到控制台 -->
- <appender name="rootConsole" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder 在控制台打印日志的格式 -->
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- </encoder>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹debug/debug.log文件中
- 配置所有类所有级别的滚动日志
- -->
- <appender name="rootRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/debug/debug.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/debug/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹info/root.log文件中
- 配置所有类INFO级别的滚动日志
- -->
- <appender name="rootRollingInfo" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/info/info.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/info/info.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- <!--
- info/root.log文件中的日志级别是 INFO以上的级别
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 和
- <filter class="ch.qos.logback.classic.filter.LevelFilter">的区别是什么呢?
- LevelFilter:严格限制日志的输出级别,使用LevelFilter设置,只会在文件中出现级别为INFO级别的日志内容。
- -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>INFO</level>
- <onMatch>ACCEPT</onMatch>
- <onMismatch>DENY</onMismatch>
- </filter>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹warn/root.log文件中
- 配置所有类WARN级别的滚动日志
- -->
- <appender name="rootRollingWarn" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/warn/warn.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- <!-- warn/root.log文件中的日志级别是 WARN以上的级别 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>WARN</level>
- </filter>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹error/root.log文件中
- 配置所有类ERROR级别的滚动日志
- -->
- <appender name="rootRollingError" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/error/error.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/error/error.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- <!-- error/root.log文件中的日志级别是 ERROR以上的级别 -->
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>ERROR</level>
- </filter>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹sql/root.log文件中
- 配置所有类SQL的日志
- -->
- <appender name="rootRollingSql" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/sql/sql.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/sql/sql.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- </appender>
- <!--
- 定义日志的输出方式:输出在文件夹business/rootsql.log文件中
- 打印业务逻辑级别的日志到business文件下
- -->
- <appender name="businessRollingDebug" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logPath}/business/business.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logPath}/business/business.%d{yyyy-MM-dd}.log</fileNamePattern>
- <!-- 设置日志的滚动时间 -->
- <maxHistory>${maxHistory}</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}.%M - %msg%n</pattern>
- <charset>UTF-8</charset>
- </encoder>
- </appender>
- <!--
- 默认的日志主线程<root>
- 定义输出日志的级别.DEBUG级别
- 下面设置的意思是:会将debug级别的日志输出在一下这五个appender-ref对应的appender上
- -->
- <root level="DEBUG">
- <appender-ref ref="rootConsole"/>
- <appender-ref ref="rootRollingDebug"/>
- </root>
- <root level="WARN">
- <appender-ref ref="rootRollingWarn"/>
- </root>
- <root level="ERROR">
- <appender-ref ref="rootRollingError"/>
- </root>
- <root level="INFO">
- <appender-ref ref="rootRollingInfo"/>
- </root>
- <!--
- 除了使用默认的日志主线程<root>外,还可以通过<logger>标签定制其他日志线程如:
- 其中name指定线程针对的包路径,level是日志级别,<appender-ref>定义使用那种appender。
- -->
- <!--log4jdbc begin -->
- <!--
- jdbc.sqlonly不显示sql执行的时间
- jdbc.sqltiming显示sql执行的时间{executed in 2 msec}
- 二者使用一个即可
- <logger name="jdbc.sqlonly" level="DEBUG" addtivity="false">
- <appender-ref ref="rootConsole"/>
- <appender-ref ref="rootRollingSql"/>
- </logger>
- -->
- <logger name="jdbc.sqltiming" level="DEBUG" addtivity="false">
- <appender-ref ref="rootConsole"/>
- <appender-ref ref="rootRollingSql"/>
- </logger>
- <!--log4jdbc end -->
- <!--
- 打印项目中com包下的日志到appender-ref指定的appender中 打印级别是debug
- 这里可以用来专门打印某一类别的日志到某一个特定的文件中.
- 比如:可以打印所有的业务逻辑到业务逻辑文件中;打印所有的controller请求到指定的文件中.
- -->
- <logger name="com" level="DEBUG" addtivity="true">
- <appender-ref ref="businessRollingDebug"/>
- </logger>
- <!--
- 打印具体的某个文件中的日志到某个文件夹下.
- 注意:不是打印com.baihui.LogBackTest2文件夹下的日志,而是LogBackTest2文件的日志
- addtivity="false" 表示打印的日志不向上传递,如果设置成addtivity="true"会怎么样呢?没错,日志打印了两遍
- -->
- <logger name="com.baihui" level="DEBUG" addtivity="false">
- <appender-ref ref="rootConsole"/>
- </logger>
- <logger name="baihui" level="ERROR" addtivity="false">
- <appender-ref ref="rootConsole"/>
- </logger>
- </configuration>
附件
<pattern>里面的转换符说明:
转换符 | 作用 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c {length } lo {length } logger {length } |
输出日志的logger名,可有一个整形参数,功能是缩短logger名,设置为0表示只输入logger最右边点符号之后的字符串。
|
||||||||||||||||||||||||
C {length } class {length } |
输出执行记录请求的调用者的全限定名。参数与上面的一样。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
contextName cn |
输出上下文名称。 | ||||||||||||||||||||||||
d {pattern } date {pattern } |
输出日志的打印日志,模式语法与java.text.SimpleDateFormat 兼容。
|
||||||||||||||||||||||||
F / file | 输出执行记录请求的java源文件名。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
caller{depth}caller{depth, evaluator-1, ... evaluator-n} | 输出生成日志的调用者的位置信息,整数选项表示输出信息深度。
例如, %caller{2} 输出为: 0 [main] DEBUG - logging statement 例如, %caller{3} 输出为: 16 [main] DEBUG - logging statement |
||||||||||||||||||||||||
L / line | 输出执行日志请求的行号。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
m / msg / message |
输出应用程序提供的信息。 |
||||||||||||||||||||||||
M / method | 输出执行日志请求的方法名。尽量避免使用,除非执行速度不造成任何问题。 | ||||||||||||||||||||||||
n | 输出平台先关的分行符“\n”或者“\r\n”。 | ||||||||||||||||||||||||
p / le / level | 输出日志级别。 | ||||||||||||||||||||||||
r / relative | 输出从程序启动到创建日志记录的时间,单位是毫秒 | ||||||||||||||||||||||||
t / thread | 输出产生日志的线程名。 | ||||||||||||||||||||||||
replace(p ){r, t} |
p 为日志内容,r 是正则表达式,将p 中符合r 的内容替换为t 。 例如, "%replace(%msg){'\s', ''}" |
参考文章:http://www.360doc.com/content/14/1016/15/8072791_417440479.shtml
logback与Spring、SpringMVC结合使用教程(转) logback good的更多相关文章
- Spring+SpringMVC+MyBatis整合教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. S ...
- Maven 搭建 SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP.Sp ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)
摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决 ...
- 详细整合教程(Spring+SpringMVC+MyBatis)
详细整合教程(Spring+SpringMVC+MyBatis) http://blog.csdn.net/gebitan505/article/details/44455235/
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【申明:来源于网络】
SSM框架--详细整合教程(Spring+SpringMVC+MyBatis)[申明:来源于网络] 地址:http://blog.csdn.net/u014662268/article/details ...
- SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis)
SSM 框架-06-详细整合教程(IDEA版)(Spring+SpringMVC+MyBatis) SSM(Spring.Spring MVC和Mybatis)如果你使用的是 Eclipse,请查看: ...
- SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis)
SSM 框架-05-详细整合教程(Eclipse版)(Spring+SpringMVC+MyBatis) 如果你使用的是 Intellij IDEA,请查看: SSM的配置流程详细的写了出来,方便很少 ...
随机推荐
- Java程序员须知的七个日志管理工具(转)
Splunk vs. Sumo Logic vs. LogStash vs. GrayLog vs. Loggly vs. PaperTrails vs. Splunk>Storm 英文原文:T ...
- [Ext JS 4] Extjs 它 initComponent 和 constructor差分
initComponent 和 constructor是什么 Extjs 提供的组件还是挺丰富的, 可是有时候需求更丰富. 当Extjs 原生的组件无法实现我们的要求的时候, 就须要扩展Extjs 的 ...
- loj1336(数学)
传送门:Sigma Function 题意:定义f(n)为n的约数之和,求[1,n]中f值为偶数的数的个数. 分析:由题目给定公式可知,若f(n)为奇数,则相乘的每一项都必须为奇数. 每一项为奇数的条 ...
- Python基础 - 关键字
前言 与C一样,python也有自己的关键字,关键字有特殊的意义,不能作为普通的变量名类名等用途 关键字列表 以python2.7.5为例,有如下关键字: and del from not while ...
- hdu4389(数位dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意:f(x)表示x各位的数字和. 给定1<=L<=R<=10^9, 求[L, ...
- 设计模式之十:观察者模式(Observer)
观察者模式: 在对象之间定义了一种一对多的依赖关系.当一个对象改变它的状态时,全部依赖它的对象会自己主动接收通知并更新自己的状态. Define a one-to-many dependency be ...
- Android中callback(接口回调)机制
事实上,callback 机制在Android 中无处不在,特别是以Handler.Callback.Listener这三个词结尾的,都是利用callback机制来实现的.比方点击事件onClickL ...
- maven仓库总结,maven私服搭建
配置pom.xml依赖包时在这里找包的描述: http://search.maven.org/#browse 以java为根目录. mvn archtype:generate -DgroupId=zt ...
- Cordova CLI源码分析(四)——创建工程
在第一篇分析我们曾经举例,创建一个新工程, cordova create hello hellotest com.xxx.hellotest cli.js文件分析命令行参数后,会走到 else if ...
- C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
重载操作符与转换 --调用操作符和函数对象 引言: 能够为类类型的对象重载函数调用操作符:一般为表示操作的类重载调用操作符! struct absInt { int operator() (int v ...