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,否则会出异常

浙公网安备 33010602011771号