SpringBoot_02

SpringBoot 配置文件简单实用(仅作为学习心得)

一、了解主配置文件(application.properties)  ps:可通过SpringBoot doc文档学习更多默认配置,如:server.port 默认为8080

#32随机码
errsr.secret = ${random.value}

#自定义属性
errsr.number = ${random.int}
errsr.name = www.errsr.com123
errsr.desc = ${errsr.name} is a domain name

#修改默认端口
server.port = 8030

#自动转换的日期格式
spring.jackson.date-format = yyyy-MM-dd HH:mm:ss

#区域时间(默认为美国时间可修改为Asia/Shanghai)
spring.jackson.time-zone = GMT+8

 控制器中获取:

@Value(value = "${errsr.secret}")
private String secret;
	
@Value(value = "${errsr.number}")
private int number;
	
@Value(value = "${errsr.desc}")
private String desc;

@RequestMapping(value = "get")
private Map<String, Object> get(@RequestParam String name) {
    Date date = new Date();
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", name);
    map.put("value", "hello Spring boot");
    map.put("secret", secret);
    map.put("number", number);
    map.put("desc", desc);
    map.put("now", date);
    return map;
}

 二、多环境配置(也就是配置文件的切换)

  举个例子:一个主文件有个属性,这个属性来切换使用的附配置文件

# 代表活动配置文件为application-dev.properties
spring.profiles.active = dev  

   上面是一种方式,另外还有一种方式YMAL(意为:YMAL 不是一种标记语言)

  YMAL语言格式简单易读,类似递归的方式,主要语法:

  1. YMAL 中空格(指等号两边)无明显规范

  2. key只能有一个,所属属性在其第二行空开,同级别对齐即可

  3. value没有明确定义,如类型为字符串,可以不加双引号

  4. 一个key多个value情况使用 - 开头

  5. 有多行书写方式,也有单行

  例:

#多行书写
errsr:
  secret: ${random.value}
  number: ${random.int}
  name: www.errsr.com
  desc: ${errsr.name} is a domain name
  friends:
    - 张三
    - 李四
    - 王五
#单行书写
errsr:{name: www.baidu.com, desc: domain name, friends: [张三,李四,王五]} # 不能使用${}

 了解YMAL后,也能够理解下面的定义,只是找的dev为(application-dev.ymal):

spring:
  profiles:
    active: pro
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

 有时配置文件过多会感到系统冗余,这时可以使用YMAL多环境配置的另一种写法

errsr:
  secret: ${random.value}
  number: ${random.int}
  name: www.errsr.com
  desc: ${errsr.name} is a domain name
  
server:
  port: 8090

spring:
  profiles:
    active: pro
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  
---                # <== 注意点
spring:
  profiles: dev    # <== 注意点
   
server:
  port: 8050
  
---
spring:
  profiles: test
   
server:
  port: 8040     

注意是三个短横杠, 以---分隔,一个YMAL配置文件可存放多个不同的版本文件,是不是很方便

方便归方便,实际使用时,如果用到注解@PropertySource还是需要使用properties文件

三、日志文件的配置

  springboot中其实默认有个logging框架,也有自己的默认属性,但配置相较于Log4J2来说很不灵活

#使用默认日志模式(不够灵活,不推荐)
logging:
  file: c:/log/log.log
  level:
    org:
      springframework: info

 下面分别使用Logback与Log4J2进行配置

  1> logback (和log4j配置属性差不多,据说性能比log4j强些),拿YMAL进行配置logback为例

#使用外部应用模式(推荐)
logging:
  config: classpath:logback-eRrsr.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- 文件输出格式 --> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |- %-5level-| [%thread] %c [%L] -| %msg%n" /> <property name="PRO_FILE_PATH" value="c:/log/proLog.log" />
<!-- 生产环境console+file --> <springProfile name="pro"> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PRO_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>100</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="PROD_FILE" /> <appender-ref ref="CONSOLE" /> </root> </springProfile>
</configuration>

运行可看到结果,配置多环境模式有两个方式:

  1>> YAML配置文件中 使用logging: config 进行切换日志文件,如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- 文件输出格式 --> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |- %-5level-| [%thread] %c [%L] -| %msg%n" /> <!-- test文件路径 --> <property name="TEST_FILE_PATH" value="c:/log/test.log" /> <!-- pro文件路径 --> <property name="PRO_FILE_PATH" value="c:/log/pro.log" /> <!-- 开发环境 --> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <logger name="com.errsr.education" level="debug"/> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <!-- 测试环境 --> <springProfile name="test"> <!-- 每天产生一个文件 --> <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路径 --> <file>${TEST_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名称 --> <fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 文件最大保存历史数量 --> <MaxHistory>100</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <appender name="CONSOLE"> <Console name="CONSOLE" target="system_out"> <PatternLayout pattern="${PATTERN}" /> </Console> </appender> <root level="info"> <appender-ref ref="TEST-FILE" /> </root> </springProfile> <!-- 生产环境console+file --> <springProfile name="pro"> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PRO_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>100</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="PROD_FILE" /> <appender-ref ref="CONSOLE" /> </root> </springProfile>
</configuration>

   2>>使用Log4J2,由于Logback是继log4j的一个开源日志组件,需要处理一下jar包

#pom文件修改
<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
            #去除spring-boot-starter-logging,不然使用log4j2会jar冲突
	    <exclusions>
		    <exclusion>
			    <groupId>org.springframework.boot</groupId>
				    <artifactId>spring-boot-starter-logging</artifactId>
		    </exclusion>
            </exclusions>
</dependency>
		
<!-- 使用Log4J2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>            

   准备工作完成后,配置YMAL:

logging:
  config: classpath:log4J2-dev.xml

 

<?xml version="1.0" encoding="utf-8"?>
<configuration> <properties> <!-- 文件名称 --> <property name="FILENAME">log4j2-dev-xml</property> <!-- 文件路径 --> <property name="FILEPATH">c:/log</property> <!-- 文件输出格式 --> <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level-| [%thread] %c [%L] -| %msg%n</property> </properties> <appenders>   <RollingRandomAccessFile name="INFO"   immediateFlush="true" fileName="${FILEPATH}/${FILENAME}.log"    filePattern="${FILEPATH}/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz">     <PatternLayout>     <pattern>${PATTERN}</pattern>     </PatternLayout>     <Policies>     <SizeBasedTriggeringPolicy size="2MB"/>     </Policies>     <Filters>     <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>     <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>     </Filters>   </RollingRandomAccessFile>
       # Console输出配置   <Console name="CONSOLE" target="system_out">     <PatternLayout pattern="${PATTERN}" />   </Console> </appenders> <loggers>   <logger name="com.errsr.education" level="debug" />   <root level="info">     <appenderref ref="INFO" />     <appenderref ref="CONSOLE" />   </root> </loggers> </configuration>

与logback不同的地方是无法一个文件无法配置多个版本,只能是多文件

PS:试试不用xml格式的日志文件,使用properties,效果是一样的,附log4j2-dev.properties

# 建立名称为 console 和 file 的两个 appender
property.fileName = log4j2-dev-properties
property.filePath = c:/log
property.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level-| [%thread] %c [%L] -| %msg%n

appenders = console, file

# Console
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = ${pattern}

# File
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName= ${filePath}/${fileName}.log
appender.file.layout.type= PatternLayout
appender.file.layout.pattern = ${pattern}

# 设置 rootLogger 的记录级别,将 console 和 file 绑定到 rootLogger 上。
rootLogger.level = debug
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.file.ref = LOGFILE

 对了,logback日志文件命名默认logback-spring.xml,不能使用logback.xml,否则会出异常

posted @ 2018-05-13 15:21  eRrsr  阅读(166)  评论(0)    收藏  举报