javascript
SpringBoot学习笔记2
九:創建父工程
注意:打包方式選擇為pom
將創建SpringBoot常用的依賴和插件放在父工程的pom.xml,如下:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <groupId>com.wu</groupId> 4 <artifactId>SpringBoot_Parent</artifactId> 5 <version>0.0.1-SNAPSHOT</version> 6 <packaging>pom</packaging> 7 <dependencyManagement> 8 <dependencies> 9 <dependency> 10 <groupId>org.springframework.boot</groupId> 11 <artifactId>spring-boot-dependencies</artifactId> 12 <version>1.5.6.RELEASE</version> 13 <type>pom</type> 14 <scope>import</scope> 15 </dependency> 16 </dependencies> 17 </dependencyManagement> 18 19 <build> 20 <plugins> 21 <plugin> 22 <groupId>org.apache.maven.plugins</groupId> 23 <artifactId>maven-compiler-plugin</artifactId> 24 <configuration> 25 <source>1.8</source> 26 <target>1.8</target> 27 </configuration> 28 </plugin> 29 </plugins> 30 </build> 31 </project> pom.xml9.1建立子工程
點擊Next,
9.2在子工程的pom.xml中引入相應的依賴
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 2 <modelVersion>4.0.0</modelVersion> 3 <parent> 4 <groupId>com.wu</groupId> 5 <artifactId>SpringBoot_Parent</artifactId> 6 <version>0.0.1-SNAPSHOT</version> 7 </parent> 8 <artifactId>SpringBoot_Child1</artifactId> 9 <dependencies> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-web</artifactId> 13 </dependency> 14 </dependencies> 15 </project> 子工程的pom.xml9.3:SpringBoot整合測試
首選需要添加測試相關依賴
1 <!-- 測試相關 --> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-test</artifactId> 5 <scope>test</scope> 6 </dependency> 7 8 <dependency> 9 <groupId>junit</groupId> 10 <artifactId>junit</artifactId> 11 <scope>test</scope> 12 </dependency> 測試相關依賴編寫需要測試的controller類
1 package com.wu.controller; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.ResponseBody; 8 9 @Controller 10 @EnableAutoConfiguration 11 public class SpringController { 12 @ResponseBody 13 public String yes(){ 14 15 return "yes"; 16 } 17 18 //程序啟動入口 19 public static void main(String []args){ 20 SpringApplication.run(SpringController.class, args); 21 } 22 } SpringController .java編寫測試類
1 import org.junit.Test; 2 import org.junit.runner.RunWith; 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.boot.test.context.SpringBootTest; 5 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 6 import org.springframework.test.context.web.WebAppConfiguration; 7 8 import com.wu.controller.SpringController; 9 10 import junit.framework.TestCase; 11 12 @SpringBootTest(classes=SpringController.class) 13 @RunWith(SpringJUnit4ClassRunner.class) 14 @WebAppConfiguration//和Web整合 15 public class TestSpringController { 16 @Autowired 17 private SpringController springController; 18 19 @Test 20 public void test1(){ 21 TestCase.assertEquals(this.springController.yes(),"yes"); 22 } 23 } TestSpringController十:設置專門的啟動類
目的:
將程序啟動入口單獨放入一個類中
方法1:使用@EnableAutoConfiguration,和@ComponentScan("要掃描的包的路徑")默認掃描是當前包和當前包的子包
注意:原本加在Controller類的@EnableAutoConfiguration放在啟動類上,Controller類上只需要添加@Controller
1 package com.wu.app; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 import org.springframework.context.annotation.ComponentScan; 6 7 import com.wu.controller.SpringController; 8 9 @EnableAutoConfiguration 10 @ComponentScan("com.wu.controller")//默認掃描的是當前包和當前包的子包 11 public class SpringApplications { 12 //程序啟動入口 13 public static void main(String []args){ 14 SpringApplication.run(SpringApplications.class, args); 15 } 16 } 啟動類方法2:在啟動類上只使用一個注解@SpringBootApplication
1 package com.wu.app; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.context.annotation.ComponentScan; 7 8 import com.wu.controller.SpringController; 9 10 //@EnableAutoConfiguration 11 //@ComponentScan("com.wu.controller")//默認掃描的是當前包和當前包的子包 12 @SpringBootApplication(scanBasePackages={"com.wu.controller"}) 13 public class SpringApplications { 14 //程序啟動入口 15 public static void main(String []args){ 16 SpringApplication.run(SpringApplications.class, args); 17 } 18 } 只設置@SpringBootApplication十一:@RestController的使用(該注解類中整合了@ResponseBody,@Controller)
1 * Copyright 2002-2016 the original author or authors. 2 3 package org.springframework.web.bind.annotation; 4 5 import java.lang.annotation.Documented; 6 import java.lang.annotation.ElementType; 7 import java.lang.annotation.Retention; 8 import java.lang.annotation.RetentionPolicy; 9 import java.lang.annotation.Target; 10 11 import org.springframework.stereotype.Controller; 12 13 /** 14 * A convenience annotation that is itself annotated with 15 * {@link Controller @Controller} and {@link ResponseBody @ResponseBody}. 16 * <p> 17 * Types that carry this annotation are treated as controllers where 18 * {@link RequestMapping @RequestMapping} methods assume 19 * {@link ResponseBody @ResponseBody} semantics by default. 20 * 21 * <p><b>NOTE:</b> {@code @RestController} is processed if an appropriate 22 * {@code HandlerMapping}-{@code HandlerAdapter} pair is configured such as the 23 * {@code RequestMappingHandlerMapping}-{@code RequestMappingHandlerAdapter} 24 * pair which are the default in the MVC Java config and the MVC namespace. 25 * In particular {@code @RestController} is not supported with the 26 * {@code DefaultAnnotationHandlerMapping}-{@code AnnotationMethodHandlerAdapter} 27 * pair both of which are also deprecated. 28 * 29 * @author Rossen Stoyanchev 30 * @author Sam Brannen 31 * @since 4.0 32 */ 33 @Target(ElementType.TYPE) 34 @Retention(RetentionPolicy.RUNTIME) 35 @Documented 36 @Controller 37 @ResponseBody 38 public @interface RestController { 39 40 /** 41 * The value may indicate a suggestion for a logical component name, 42 * to be turned into a Spring bean in case of an autodetected component. 43 * @return the suggested component name, if any 44 * @since 4.0.1 45 */ 46 String value() default ""; 47 48 } @RestController目的:
當Controller類的方法需要向頁面傳遞數據時,會在方法前加@ResponseBody,?如果在每個方法前都加,可能有些麻煩,因此,可以在類上直接加@RestController,之后該類中的每個方法的return,都會向頁面返回數據
示例:
1 package com.wu.controller; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.PathVariable; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.ResponseBody; 9 import org.springframework.web.bind.annotation.RestController; 10 11 @RestController 12 public class SpringController { 13 //@ResponseBody 14 @RequestMapping("/yes") 15 public String yes(){ 16 17 return "yes"; 18 } 19 20 @RequestMapping("/show/{id}") 21 public String showId(@PathVariable String id){ 22 return "show"+id; 23 24 } 25 26 } 使用@RestController的Controller類?十二:SpringBoot日志管理
12.1默認:
不用再單獨配置日志依賴,SpringBoot使用的默認日志框架是Logback,默認使用ERROR,WARN,INFO級別的日志輸出到控制臺
12.2日志具體信息:
日志時間:精確到毫秒?日志級別:TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF??進程ID - - - {線程名} Logger名:通常是類名 :日志類容
12.3在全局配置文件application.properties中配置日志級別
示例:
1 #讓日志輸出warn及以上級別的輸出 2 logging.level.root=WARN 3 4 #讓該類輸出DEBUG及以上的日志信息 5 logging.level.org.springframework.web=DEBUG 在application.properties中配置日志級別12.4將日志信息同時寫入到日志文件中
同樣需要在全局配置文件中配置相關日志文件的路徑
示例:
1 #讓日志輸出warn及以上級別的輸出 2 logging.level.root=WARN 3 4 #讓該類輸出DEBUG及以上的日志信息 5 logging.level.org.springframework.web=DEBUG 6 7 #配置日志文件方式一 8 #logging.file=D:\\BaiduNetdiskDownload\\SpringBoot\\logs\\info.log 9 10 #配置日志文件方式二 11 logging.path=D:\\BaiduNetdiskDownload\\SpringBoot\\logs 配置日志文件注意:路徑可以是絕對路徑,也可以是相對路徑,兩種配置日志文件的方式任選其一,但是如果倆個都配置,會執行logging.file
12.5配置相關日志格式
整體配置如下:
1 #讓日志輸出warn及以上級別的輸出 2 logging.level.root=WARN 3 4 #讓該類輸出DEBUG及以上的日志信息 5 logging.level.org.springframework.web=DEBUG 6 7 #配置日志文件方式一 8 logging.file=D:\\BaiduNetdiskDownload\\SpringBoot\\logs\\info.log 9 10 #配置日志文件方式二 11 #logging.path=D:\\BaiduNetdiskDownload\\SpringBoot\\logs 12 13 #配置輸出到控制臺的格式 14 logging.pattern.console=%d{yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n 15 16 #配置輸出到日志文件的格式 17 logging.pattern.file=%d{yyyy-MM-dd-HH:mm} [%thread] %-5level %logger- %msg%n SpringBoot日志簡單配置12.6自定義日志配置文件
SpringBoot官方推薦優先帶有“-spring"的作為日志配置,如使用logback-spring.xml,而不是logback.xml,名命為logback-spring.xml的日志配置文件,SpringBoot可以為其配置一些spring boot特有的配置項,如果想自己命名日志文件,可以在全局配置文件中加入logging.config=classpath:logging.config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出 --> 3 <!-- scan:當此屬性設置為true時,配置文檔如果發生改變,將會被重新加載,默認值為true --> 4 <!-- scanPeriod:設置監測配置文檔是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。 當scan為true時,此屬性生效。默認的時間間隔為1分鐘。 --> 5 <!-- debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。 --> 6 <configuration scan="true" scanPeriod="10 seconds"> 7 <contextName>logback</contextName> 8 9 <!-- name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義后,可以使“${}”來使用變量。 --> 10 <property name="log.path" value="D:/BaiduNetdiskDownload/SpringBoot/logs" /> 11 12 <!--0. 日志格式和顏色渲染 --> 13 <!-- 彩色日志依賴的渲染類 --> 14 <conversionRule conversionWord="clr" 15 converterClass="org.springframework.boot.logging.logback.ColorConverter" /> 16 <conversionRule conversionWord="wex" 17 converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> 18 <conversionRule conversionWord="wEx" 19 converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> 20 <!-- 彩色日志格式 --> 21 <property name="CONSOLE_LOG_PATTERN" 22 value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /> 23 24 <!--1. 輸出到控制臺 --> 25 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 26 <!--此過濾器是將debug級別以下的日志過濾掉,此日志appender是為開發使用,只配置最底級別,控制臺輸出的日志級別是大于或等于此級別的日志信息 --> 27 <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 28 <level>debug</level> 29 </filter> 30 <encoder> 31 <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> 32 <!-- 設置字符集 --> 33 <charset>UTF-8</charset> 34 </encoder> 35 </appender> 36 37 <!--2. 輸出到文檔 --> 38 <!-- 2.1 level為 DEBUG 日志,時間滾動輸出 --> 39 <appender name="DEBUG_FILE" 40 class="ch.qos.logback.core.rolling.RollingFileAppender"> 41 <!-- 正在記錄的日志文檔的路徑及文檔名 --> 42 <file>${log.path}/web_debug.log</file> 43 <!--日志文檔輸出格式 --> 44 <encoder> 45 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - 46 %msg%n</pattern> 47 <charset>UTF-8</charset> <!-- 設置字符集 --> 48 </encoder> 49 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 --> 50 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 51 <!-- 日志歸檔 --> 52 <fileNamePattern>${log.path}/web-debug-%d{yyyy-MM-dd}.%i.log 53 </fileNamePattern> 54 <timeBasedFileNamingAndTriggeringPolicy 55 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 56 <maxFileSize>100MB</maxFileSize> 57 </timeBasedFileNamingAndTriggeringPolicy> 58 <!--日志文檔保留天數 --> 59 <maxHistory>15</maxHistory> 60 </rollingPolicy> 61 <!-- 此日志文檔只記錄debug級別的 --> 62 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 63 <level>debug</level> 64 <onMatch>ACCEPT</onMatch> 65 <onMismatch>DENY</onMismatch> 66 </filter> 67 </appender> 68 69 <!-- 2.2 level為 INFO 日志,時間滾動輸出 --> 70 <appender name="INFO_FILE" 71 class="ch.qos.logback.core.rolling.RollingFileAppender"> 72 <!-- 正在記錄的日志文檔的路徑及文檔名 --> 73 <file>${log.path}/web_info.log</file> 74 <!--日志文檔輸出格式 --> 75 <encoder> 76 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - 77 %msg%n</pattern> 78 <charset>UTF-8</charset> 79 </encoder> 80 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 --> 81 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 82 <!-- 每天日志歸檔路徑以及格式 --> 83 <fileNamePattern>${log.path}/web-info-%d{yyyy-MM-dd}.%i.log 84 </fileNamePattern> 85 <timeBasedFileNamingAndTriggeringPolicy 86 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 87 <maxFileSize>100MB</maxFileSize> 88 </timeBasedFileNamingAndTriggeringPolicy> 89 <!--日志文檔保留天數 --> 90 <maxHistory>15</maxHistory> 91 </rollingPolicy> 92 <!-- 此日志文檔只記錄info級別的 --> 93 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 94 <level>info</level> 95 <onMatch>ACCEPT</onMatch> 96 <onMismatch>DENY</onMismatch> 97 </filter> 98 </appender> 99 100 <!-- 2.3 level為 WARN 日志,時間滾動輸出 --> 101 <appender name="WARN_FILE" 102 class="ch.qos.logback.core.rolling.RollingFileAppender"> 103 <!-- 正在記錄的日志文檔的路徑及文檔名 --> 104 <file>${log.path}/web_warn.log</file> 105 <!--日志文檔輸出格式 --> 106 <encoder> 107 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - 108 %msg%n</pattern> 109 <charset>UTF-8</charset> <!-- 此處設置字符集 --> 110 </encoder> 111 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 --> 112 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 113 <fileNamePattern>${log.path}/web-warn-%d{yyyy-MM-dd}.%i.log 114 </fileNamePattern> 115 <timeBasedFileNamingAndTriggeringPolicy 116 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 117 <maxFileSize>100MB</maxFileSize> 118 </timeBasedFileNamingAndTriggeringPolicy> 119 <!--日志文檔保留天數 --> 120 <maxHistory>15</maxHistory> 121 </rollingPolicy> 122 <!-- 此日志文檔只記錄warn級別的 --> 123 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 124 <level>warn</level> 125 <onMatch>ACCEPT</onMatch> 126 <onMismatch>DENY</onMismatch> 127 </filter> 128 </appender> 129 130 <!-- 2.4 level為 ERROR 日志,時間滾動輸出 --> 131 <appender name="ERROR_FILE" 132 class="ch.qos.logback.core.rolling.RollingFileAppender"> 133 <!-- 正在記錄的日志文檔的路徑及文檔名 --> 134 <file>${log.path}/web_error.log</file> 135 <!--日志文檔輸出格式 --> 136 <encoder> 137 <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - 138 %msg%n</pattern> 139 <charset>UTF-8</charset> <!-- 此處設置字符集 --> 140 </encoder> 141 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 --> 142 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 143 <fileNamePattern>${log.path}/web-error-%d{yyyy-MM-dd}.%i.log 144 </fileNamePattern> 145 <timeBasedFileNamingAndTriggeringPolicy 146 class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 147 <maxFileSize>100MB</maxFileSize> 148 </timeBasedFileNamingAndTriggeringPolicy> 149 <!--日志文檔保留天數 --> 150 <maxHistory>15</maxHistory> 151 </rollingPolicy> 152 <!-- 此日志文檔只記錄ERROR級別的 --> 153 <filter class="ch.qos.logback.classic.filter.LevelFilter"> 154 <level>ERROR</level> 155 <onMatch>ACCEPT</onMatch> 156 <onMismatch>DENY</onMismatch> 157 </filter> 158 </appender> 159 <!-- root節點是必選節點,用來指定最基礎的日志輸出級別,只有一個level屬性 level:用來設置打印級別,大小寫無關:TRACE, 160 DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能設置為INHERITED或者同義詞NULL。默認是DEBUG 可以包含零個或多個元素,標識這個appender將會添加到這個logger。 --> 161 <root level="info"> 162 <appender-ref ref="CONSOLE" /> 163 <appender-ref ref="DEBUG_FILE" /> 164 <appender-ref ref="INFO_FILE" /> 165 <appender-ref ref="WARN_FILE" /> 166 <appender-ref ref="ERROR_FILE" /> 167 </root> 168 169 <!-- <logger>用來設置某一個包或者具體的某一個類的日志打印級別、 以及指定<appender>。<logger>僅有一個name屬性, 170 一個可選的level和一個可選的addtivity屬性。 name:用來指定受此logger約束的某一個包或者具體的某一個類。 level:用來設置打印級別,大小寫無關:TRACE, 171 DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。 172 如果未設置此屬性,那么當前logger將會繼承上級的級別。 addtivity:是否向上級logger傳遞打印信息。默認是true。 --> 173 <!-- 該包下的類將日志信息傳遞給上級,即root,然后跟著root打印日志到控制臺和日志文件中 --> 174 <logger name="com.wu.controller" level="info" /> 175 176 <!-- 此種設置是將該類產生的日志信息不傳遞到上級,而是單獨將WARN以上的日志信息輸出到控制臺 --> 177 <logger name="com.wu.controller.SpringController" level="WARN" 178 addtivity="false"> 179 <appender-ref ref="CONSOLE" /> 180 </logger> 181 182 <!-- 多環境下的日志輸出 --> 183 184 <!--開發環境:打印控制臺 --> 185 <springProfile name="dev"> 186 <logger name="com.wu.controller" level="debug" /> 187 </springProfile> 188 189 <!--生產環境:輸出到文檔并打印到控制臺 <springProfile name="pro"> <root level="info"> <appender-ref 190 ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" 191 /> <appender-ref ref="ERROR_FILE" /> <appender-ref ref="WARN_FILE" /> </root> 192 </springProfile> --> 193 194 </configuration> logback-spring.xml具體配置參考
測試:
1 package com.wu.controller; 2 3 import org.slf4j.Logger; 4 import org.slf4j.LoggerFactory; 5 import org.springframework.boot.SpringApplication; 6 import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 7 import org.springframework.stereotype.Controller; 8 import org.springframework.web.bind.annotation.PathVariable; 9 import org.springframework.web.bind.annotation.RequestMapping; 10 import org.springframework.web.bind.annotation.ResponseBody; 11 import org.springframework.web.bind.annotation.RestController; 12 13 @RestController 14 public class SpringController { 15 16 private Logger logger=LoggerFactory.getLogger(this.getClass()); 17 18 //@ResponseBody 19 @RequestMapping("/yes") 20 public String yes(){ 21 logger.debug("debug信息"); 22 //由于在 <logger/>中配置了只打印WARN級別以上的信息,因此應該會只輸出"error信息" 23 logger.error("error信息"); 24 return "yes"; 25 } 26 } 需要打印日志信息的Controller類結果:
?12.7不同環境下的日志輸出
在原先的自定義日志配置文件中已經添加了
<springProfile name="dev">
<logger name="com.wu.controller" level="debug" />
</springProfile>
<springProfile>標簽的屬性name可以設置不同的開發環境名
注意:需要在全局配置文件application.properties中添加所需要的環境,如:
1 spring.profiles.active= 在application.properties中添加需要的日志環境12.8使用log4j 進行日志管理
1,在pom.xml中添加如下:
1 <!-- log4j --> 2 <!-- 排除自帶的logback日志框架--> 3 <dependency> 4 <groupId>org.springframework.boot</groupId> 5 <artifactId>spring-boot-starter</artifactId> 6 <exclusions> 7 <exclusion> 8 <groupId>org.springframework.boot</groupId> 9 <artifactId>spring-boot-starter-logging</artifactId> 10 </exclusion> 11 </exclusions> 12 </dependency> 13 <!-- 添加log4j相關依賴 --> 14 <dependency> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-log4j</artifactId> 17 <version>1.3.8.RELEASE</version> 18 </dependency> SpringBoot中使用log4j2,在src/main/resource下創建log4j.properties,具體如下:
1 #log4j.rootLogger=CONSOLE,info,error,DEBUG 2 log4j.rootLogger=info,error,CONSOLE,DEBUG 3 4 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 5 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 6 log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 7 8 log4j.logger.info=info 9 log4j.appender.info=org.apache.log4j.DailyRollingFileAppender 10 log4j.appender.info.layout=org.apache.log4j.PatternLayout 11 log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 12 log4j.appender.info.datePattern='.'yyyy-MM-dd 13 log4j.appender.info.Threshold = info 14 log4j.appender.info.append=true 15 #日志輸出文件位置 16 log4j.appender.info.File=D:/BaiduNetdiskDownload/SpringBoot/logs/api_services_info.log 17 18 log4j.logger.error=error 19 log4j.appender.error=org.apache.log4j.DailyRollingFileAppender 20 log4j.appender.error.layout=org.apache.log4j.PatternLayout 21 log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 22 log4j.appender.error.datePattern='.'yyyy-MM-dd 23 log4j.appender.error.Threshold = error 24 log4j.appender.error.append=true 25 #log4j.appender.error.File=/home/admin/pms-api-services/logs/error/api_services_error 26 log4j.appender.error.File=D:/BaiduNetdiskDownload/SpringBoot/logs/api_services_error.log 27 28 log4j.logger.DEBUG=DEBUG 29 log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender 30 log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout 31 log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 32 log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd 33 log4j.appender.DEBUG.Threshold = DEBUG 34 log4j.appender.DEBUG.append=true 35 #log4j.appender.DEBUG.File=/home/admin/pms-api-services/logs/debug/api_services_debug 36 log4j.appender.DEBUG.File=D:/BaiduNetdiskDownload/SpringBoot/logs/api_services_debug.log 37 38 ### Debug 39 log4j.logger.com.ibatis=DEBUG 40 log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG 41 log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG 42 log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG 43 log4j.logger.java.sql.Connection=DEBUG 44 log4j.logger.java.sql.Statement=DEBUG 45 log4j.logger.java.sql.PreparedStatement=DEBUG log4j.properties3, 測試
1 package com.wu.controller; 2 3 import org.apache.log4j.Logger; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RestController; 6 7 @RestController 8 public class TestController { 9 private Logger logger=Logger.getLogger(TestController.class); 10 11 @RequestMapping("/yes") 12 public String yes(){ 13 logger.debug("這是debug日志"); 14 logger.info("這是info日志"); 15 logger.error("這是error日志"); 16 return "yes"; 17 } 18 } 簡單測試的Controller類?十三 將工程設置為開發模式(代碼修改后,不用重新運行)
只需要在pom.xml中加入以下依賴:
1 <!-- 加入以下兩個依賴,代碼作了修改,不用重新運行 --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>springloaded</artifactId> 5 </dependency> 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-devtools</artifactId> 9 </dependency> 所需依賴?十四 SpringBoot的web開發
14.1 前提
如前面一樣,加入以下依賴,即給我自動配置tomcat和springmvc等的配置(在spring-boot-autoconfigure.jar/org.springframework.boot.autoconfigure.web下)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
14. 2InternalResourceViewResolver(視圖解析器)
注意:?自己需要在application.properties中配置前綴和后綴,如下:
1 spring.mvc.view.prefix= 2 spring.mvc.view.suffix= 在application.properties中配置前后綴14.3靜態資源訪問
SpringBoot默認從? /classpath/static/ 或 /classpath/public/? 或? /META-INF/resources/? 下獲取css和js
示例:
啟動后訪問? localhost:8080/wjs.jpg
要點:可以在application.properties中自定義靜態文件(js,css,images)路徑,如在全局配置文件中加入
1 spring.resources.static-locations=注意:?自定義靜態資源路徑后,原本默認的路徑將失效!
?十五:消息轉換器
參考資料1,資料2
15.1,SpringBoot中已經默認配置了消息轉換器,如需要自定義,可以參考以上資料
15.2,使用FastJson解析Json數據(默認使用的是JacksonHttpMessageConverters)
導入相關依賴:
1 <!-- FastJson --> 2 <dependency> 3 <groupId>com.alibaba</groupId> 4 <artifactId>fastjson</artifactId> 5 <version>1.2.15</version> 6 </dependency> fastjson依賴 15.2.1 配置fastjson方式一:
啟動類 extends WebMvcConfigurerAdapter 并重寫 configureMessageConverters方法,如下:
1 package com.wu.app; 2 3 import java.util.List; 4 5 import org.springframework.boot.SpringApplication; 6 import org.springframework.boot.autoconfigure.SpringBootApplication; 7 import org.springframework.http.converter.HttpMessageConverter; 8 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 10 import com.alibaba.fastjson.serializer.SerializerFeature; 11 import com.alibaba.fastjson.support.config.FastJsonConfig; 12 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; 13 14 @SpringBootApplication(scanBasePackages={"com.wu.controller"}) 15 public class SpringApplications extends WebMvcConfigurerAdapter { 16 @Override 17 public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 18 //創建FastJson消息轉換器 19 FastJsonHttpMessageConverter converter=new FastJsonHttpMessageConverter(); 20 //創建FastJson配置對象 21 FastJsonConfig config=new FastJsonConfig(); 22 //對json數據進行格式化 23 config.setSerializerFeatures(SerializerFeature.PrettyFormat); 24 //裝載配置 25 converter.setFastJsonConfig(config); 26 //裝載轉換器 27 converters.add(converter); 28 } 29 30 //程序啟動入口 31 public static void main(String []args){ 32 SpringApplication.run(SpringApplications.class, args); 33 } 34 } 在啟動類中配置FastJson轉換器測試:?創建實體類,如下
1 package com.wu.pojo; 2 3 import java.util.Date; 4 5 public class Person { 6 private String name; 7 private String date; 8 public String getName() { 9 return name; 10 } 11 public void setName(String name) { 12 this.name = name; 13 } 14 public String getDate() { 15 return date; 16 } 17 public void setDate(String date) { 18 this.date = date; 19 } 20 21 } Person.java創建Controller類將person類json化并返回給頁面,如下:
1 package com.wu.controller; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RestController; 8 9 import com.wu.pojo.Person; 10 11 @RestController 12 public class PersonController { 13 @RequestMapping("/person") 14 public Object showPerson(){ 15 Person person=new Person(); 16 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss"); 17 person.setName("夏明"); 18 person.setDate(format.format(new Date())); 19 return person; 20 } 21 } PersonController.java啟動,結果為:
發現有亂碼
將springboot的response編碼設置為utf-8的設置開啟(默認為false),在全局配置文件中加入:
1 spring.http.encoding.force=true即回復正常:
也可以在Person類的Date date 字段上添加日期格式化,如:
@JSONField(format="yyyy-MM-dd HH:mm:ss")private Date date;15.2.2 配置fastjson方式二:
通過@Bean?將fastjson轉換器注入到Spring容器中
也是在啟動類中配置,具體如下:
1 package com.wu.app; 2 3 import java.util.List; 4 5 import org.springframework.boot.SpringApplication; 6 import org.springframework.boot.autoconfigure.SpringBootApplication; 7 import org.springframework.boot.autoconfigure.web.HttpMessageConverters; 8 import org.springframework.context.annotation.Bean; 9 import org.springframework.http.converter.HttpMessageConverter; 10 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 11 12 import com.alibaba.fastjson.serializer.SerializerFeature; 13 import com.alibaba.fastjson.support.config.FastJsonConfig; 14 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; 15 16 @SpringBootApplication(scanBasePackages={"com.wu.controller"}) 17 public class SpringApplications { 18 @Bean 19 public HttpMessageConverters fastJsonMessageConverter(){ 20 //創建FastJson消息轉換器 21 FastJsonHttpMessageConverter converter=new FastJsonHttpMessageConverter(); 22 //創建FastJson配置對象 23 FastJsonConfig config=new FastJsonConfig(); 24 //對json數據進行格式化 25 config.setSerializerFeatures(SerializerFeature.PrettyFormat); 26 //裝載配置 27 converter.setFastJsonConfig(config); 28 HttpMessageConverter<?> con=converter; 29 return new HttpMessageConverters(con); 30 } 31 32 //程序啟動入口 33 public static void main(String []args){ 34 SpringApplication.run(SpringApplications.class, args); 35 } 36 } 在啟動類中通過@Bean將fastJson轉換器注入到Spring容器中啟動測試依然正常
轉載于:https://www.cnblogs.com/wuba/p/11218708.html
總結
以上是生活随笔為你收集整理的SpringBoot学习笔记2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以VMware workstation1
- 下一篇: 球形坐标和Cartesian 坐标的转换