回顾一下采用SSM开发项目时,项目中会存在多个配置文件,好比web.xml,配置Spring相关的applicationContext-springmvc.xml, applicationContext-dao.xml等,对于应用自身的配置,甚至还须要编写专门的代码去读取这些配置文件中的参数。在Spring Boot中,简化了Spring相关配置的管理和读取,只须要一个application.properties文件,SpringBoot提供了多种读取配置文件的方式。java
配置Spring Boot
配置服务器端口号
Spring Boot默认启动端口是8080端口,能够经过在application.properties中从新配置来修改默认端口号,须要添加配置属性server.port:web
server.port=8088
也能够再命令行中指定启动端口号,只须要一条命令:spring
java -jar xxx.jar --server.port=8088
便可将xxx.jar应用的启动端口号修改成为8088,尝试经过http://localhost:8088/demo 访问应用.springboot
日志配置
在SpringBoot中,默认状况下不须要对日志作额外的配置已经能够使用自带的日志,Spring Boot默认使用LogBack来打印日志。服务器
默认日志格式如上,日志每行内容格式为:mvc
1. 日期和时间: 格式yyyy-mm-dd hh:mm:ss.SSSapp
2. 日志级别:按级别从高到低依次为: fatal,error,warn,info,debug,trace框架
3. 进程id:Spring Boot应用的进程Idspring-boot
4. --- :分隔符 分隔具体的日志消息性能
5. [xxx]:线程名称
6. 类名:
7. 消息体:
默认状况下,只要Info级别以上的日志信息才会打印到控制台,也能够本身设置日志输出级别,须要在application.properties配置文件中配置logging.level.root属性,如:
logging.level.root=trace
一样也能够经过命令中执行,开发中可经过参数—debug将日志界别调整为debug级别:
java -jar xxx.jar –debug
Spring Boot默认并无将日志输出到文件(指定输出文件名),能够在application.properties中指定日志输出:
logging.file= log //日志输出到应用运行的根目录下log文件中 logging.file=d:/logs/log //指定日主输入到d盘logs文件夹下log文件中
或者经过logging.path属性设置(指定输出目录)
logging.path=d:/logs //日志输出到d盘logs文件夹下spring.log文件中(默认文件名spring.log)
logging.file和logging.path属性不能同时使用,若是同时使用,只有logging.file生效
不管采用上面那种方式记录日志文件,当日志文件到达10MB的时候,会自动从新生成一个新日志文件
SpringBoot也支持对控制台日志输出和文件输出进行格式空直,application.properties配置代码以下:
logging.pattern.console= %level %date{HH:mm:ss} %logger{20}.%M %L :%m%n logging.pattern.file = %level %date{ISO8601} [%thread] %logger{20}.%M %L :%m%n
1. %level :表示输出日志级别
2. %date :表示日志产生时间,%date{ISO8601}表示标准日期格式
3. %logger:用于输出Logger名称,包括报名+类名,{n}:限制长度
4. %thread:当前线程
5. %M: 产生日志所在的方法名
6. %L:日志调用所在额代码行,(获取代码行对性能有消耗,生产环境不建议使用此参数)
7. %m:日志消息具体类容
8. %n:日志换行
Spring Boot支持多种日志框架,若是须要自定义日志配置,能够经过在resources目录下新建logback-spring.xml来对Logback进行更详细的配置,其余日志框架也同样。
读取应用配置
能够在应用中读取application.properties文件中的配置,Spring Boot提供了三种方式,经过通用的Enviroment类、经过key-value方式获取到application.properties中的值、也能够经过@Value注解自动注入属性值。
经过Environment类读取
Environment是一个通用的读取应用程序运行时的环境变量的类,可以读取application.properties、命令行输入参数、系统属性、操做系统环境变量等。能够经过Spring容器自动注入。
@Autowired private Environment env; @RequestMapping("/demo") public String demo() { //读取application.properties配置中端口号 System.out.print(env.getProperty("server.port",Integer.class)); return "Spring Boot Demo"; }
经过@Value注解读取
能够经过@Value注解,直接将配置信息注入到Spring管理的Bean中:
@Value("${server.port}") private String port;
@RequestMapping("/demo2") public String demo2() { System.out.print("端口号:"+port); return "Spring Boot Demo 修改"; }
@Value注解并不能在任何Spring管理的Bean中使用,由于@Value自己是经过AutowiredAnnotationBeanPostProcrssor实现的,是BeanPostPrcessor接口的实现类,所以任何BeanPostProcessor和BeanFactoryPostProcessor的子类中都不能使用@Value来注入属性,由于这个时候@Value尚未被处理。
@Value注解还支持SpEL表达式,若是属性不存在,能够赋值默认值:
@Value("${server.title:默认值}") private String title;
经过@ConfigurationProperties注解
使用@ConfigurationProperties注解可将一些列配置属性映射到一个自定义类中,方便开发中按分类读取,好比在application.properties中添加一下配置
com.sl.name=test com.sl.password=1111
实现步骤
1.自定义配置类
@Component //@PropertySource(value="classpath:/application.properties") //指定绑定哪一个资源文件,这里的application.properties文件是springboot默认的资源文件,是能够不用指定的,若是是自定义的资源文件,须要绑定 @ConfigurationProperties(prefix = "com.sl") //须要映射的属性浅醉 public class PropertiesConfig { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2.pomxml添加依赖项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@Autowired private PropertiesConfig config;
@RequestMapping("/demo3") public String demo3() { System.out.print(config.getName()); System.out.print(config.getPassword()); return "Spring Boot Demo"; }
@ConfigurationProperties注解的类,会自动将“-”、“_”去掉,转化成java命名规范,好比讲context-path配置映射到属性contextPath上。
@ConfigurationProperties和@Value功能类似,ConfigurationProperties能够将一组属性统一管理,@Value的优是支持SpEL表达式。