回顾一下采用SSM开发项目时,项目中会存在多个配置文件,比如web.xml,配置Spring相关的applicationContext-springmvc.xml, applicationContext-dao.xml等,对于应用自身的配置,甚至还需要编写专门的代码去读取这些配置文件中的参数。在Spring Boot中,简化了Spring相关配置的管理和读取,只需要一个application.properties文件,SpringBoot提供了多种读取配置文件的方式。

配置Spring Boot

配置服务器端口号

Spring Boot默认启动端口是8080端口,可以通过在application.properties中重新配置来修改默认端口号,需要添加配置属性server.port:

  1. server.port=8088

也可以再命令行中指定启动端口号,只需要一条命令:

  1. java -jar xxx.jar --server.port=8088

即可将xxx.jar应用的启动端口号修改为为8088,尝试通过http://localhost:8088/demo 访问应用.

日志配置

在SpringBoot中,默认情况下不需要对日志做额外的配置已经可以使用自带的日志,Spring Boot默认使用LogBack来打印日志。

默认日志格式如上,日志每行内容格式为:

  1. 日期和时间: 格式yyyy-mm-dd hh:mm:ss.SSS

  2. 日志级别:按级别从高到低依次为: fatal,error,warn,info,debug,trace

  3. 进程id:Spring Boot应用的进程Id

  4. --- :分隔符 分隔具体的日志消息

  5. [xxx]:线程名称

  6. 类名:

  7. 消息体:

默认情况下,只要Info级别以上的日志信息才会打印到控制台,也可以自己设置日志输出级别,需要在application.properties配置文件中配置logging.level.root属性,如:

  1. logging.level.root=trace

同样也可以通过命令中执行,开发中可通过参数—debug将日志界别调整为debug级别:

  1. java -jar xxx.jar debug

Spring Boot默认并没有将日志输出到文件(指定输出文件名),可以在application.properties中指定日志输出:

  1. logging.file= log //日志输出到应用运行的根目录下log文件中
  2.  
  3. logging.file=d:/logs/log //指定日主输入到d盘logs文件夹下log文件中

或者通过logging.path属性设置(指定输出目录)

  1. logging.path=d:/logs //日志输出到dlogs文件夹下spring.log文件中(默认文件名spring.log

logging.file和logging.path属性不能同时使用,如果同时使用,只有logging.file生效

无论采用上面那种方式记录日志文件,当日志文件到达10MB的时候,会自动重新生成一个新日志文件

SpringBoot也支持对控制台日志输出和文件输出进行格式空直,application.properties配置代码如下:

  1. logging.pattern.console= %level %date{HH:mm:ss} %logger{20}.%M %L :%m%n
  2. 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容器自动注入。

  1. @Autowired
  2. private Environment env;
  3.  
  4. @RequestMapping("/demo")
  5. public String demo() {
  6. //读取application.properties配置中端口号
  7. System.out.print(env.getProperty("server.port",Integer.class));
  8. return "Spring Boot Demo";
  9. }

通过@Value注解读取

可以通过@Value注解,直接将配置信息注入到Spring管理的Bean中:

  1. @Value("${server.port}")
  2. private String port;

  3. @RequestMapping("/demo2")
  4. public String demo2() {
  5. System.out.print("端口号:"+port);
  6. return "Spring Boot Demo 修改";
  7. }

@Value注解并不能在任何Spring管理的Bean中使用,因为@Value本身是通过AutowiredAnnotationBeanPostProcrssor实现的,是BeanPostPrcessor接口的实现类,因此任何BeanPostProcessor和BeanFactoryPostProcessor的子类中都不能使用@Value来注入属性,因为这个时候@Value还没有被处理。

@Value注解还支持SpEL表达式,如果属性不存在,可以赋值默认值:

  1. @Value("${server.title:默认值}")
  2. private String title;

通过@ConfigurationProperties注解

使用@ConfigurationProperties注解可将一些列配置属性映射到一个自定义类中,方便开发中按分类读取,比如在application.properties中添加一下配置

  1. com.sl.name=test
  2. com.sl.password=1111

实现步骤

1.自定义配置类

  1. @Component
  2. //@PropertySource(value="classpath:/application.properties") //指定绑定哪个资源文件,这里的application.properties文件是springboot默认的资源文件,是可以不用指定的,如果是自定义的资源文件,需要绑定
  3. @ConfigurationProperties(prefix = "com.sl") //需要映射的属性浅醉
  4. public class PropertiesConfig {
  5. private String name;
  6. private String password;
  7.  
  8. public String getName() {
  9. return name;
  10. }
  11.  
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15.  
  16. public String getPassword() {
  17. return password;
  18. }
  19.  
  20. public void setPassword(String password) {
  21. this.password = password;
  22. }
  23. }

2.pomxml添加依赖项

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-configuration-processor</artifactId>
  4. <optional>true</optional>
  5. </dependency>
  1. @Autowired
  2. private PropertiesConfig config;

  3. @RequestMapping("/demo3")
  4. public String demo3() {
  5. System.out.print(config.getName());
  6. System.out.print(config.getPassword());
  7. return "Spring Boot Demo";
  8. }

@ConfigurationProperties注解的类,会自动将“-”、“_”去掉,转化成java命名规范,比如讲context-path配置映射到属性contextPath上。

@ConfigurationProperties和@Value功能相似,ConfigurationProperties可以将一组属性统一管理,@Value的优是支持SpEL表达式。

Spring Boot(二)配置分析的更多相关文章

  1. Spring Boot 自动配置 源码分析

    Spring Boot 最大的特点(亮点)就是自动配置 AutoConfiguration 下面,先说一下 @EnableAutoConfiguration ,然后再看源代码,到底自动配置是怎么配置的 ...

  2. 精尽Spring Boot源码分析 - 配置加载

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  3. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  4. Spring Boot自动配置SpringMVC(二)

    Spring Boot自动配置SpringMVC(一) - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)讲述了关于DispatcherServlet注册到诸如tomcat容器中的自动配置过 ...

  5. Spring Boot自动配置原理与实践(一)

    前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...

  6. 【Spring Boot源码分析】@EnableAutoConfiguration注解(一)@AutoConfigurationImportSelector注解的处理

    Java及Spring Boot新手,首次尝试源码分析,欢迎指正! 一.概述 @EnableAutoConfiguration注解是Spring Boot中配置自动装载的总开关.本文将从@Enable ...

  7. Spring Boot源码分析-配置文件加载原理

    在Spring Boot源码分析-启动过程中我们进行了启动源码的分析,大致了解了整个Spring Boot的启动过程,具体细节这里不再赘述,感兴趣的同学可以自行阅读.今天让我们继续阅读源码,了解配置文 ...

  8. 精尽Spring Boot源码分析 - SpringApplication 启动类的启动过程

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  9. Spring Boot自动配置SpringMVC(一)

    实际上在关于Spring Boot自动配置原理实战的文章Spring Boot自动配置实战 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中,可以看到我们使用到了@ReqeusMappi ...

  10. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

随机推荐

  1. 六个比较好用的php数组Array函数

    1. array_column 返回输入数组中某个单一列的值.2. array_filter 用回调函数过滤数组中的元素.3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值 ...

  2. 如何分析Mysql慢SQL

    内容摘要: 开启慢查询日志捕获慢SQL 使用explain分析慢SQL 使用show profile查询SQL执行细节 常见的SQL语句优化 一.开启慢查询日志捕获慢SQL ① 查询mysql是否开启 ...

  3. golang使用rabbitMQ入门代码

    package main import ( "github.com/streadway/amqp" "log" "time" ) func ...

  4. Java虚拟机(JVM)内存区域

            Java虚拟机内存区域分为五部分:程序计数器.Java虚拟机栈.本地方法栈.堆.方法区.其中程序计数器.Java虚拟机栈.本地方法栈属于线程私有内存区,其生命周期与线程相同,随线程的产 ...

  5. 聊天功能插件Socket.io

    一.Socket.io是什么 是基于时间的实时双向通讯库 基于websocket协议的 前后端通过时间进行双向通讯 配合express快速开发实时应用 二.Socket.io和ajax区别 基于不同的 ...

  6. 长沙优步Uber奖励政策(7.27~8.2)

    奖励前提 *必须满足当周评分4.7星及以上,且当周接单率70%及以上,才有资格获得奖励 *当周上线时间不低于7小时 *刷单和红线行为立即封号并取消当周全部奖励! *机场高速费用不参与翻倍奖励 *早高峰 ...

  7. 「功能笔记」性能分析工具gprof使用笔记

    根据网上信息整理所成. 功能与优劣 gprof实际上只是一个用于读取profile结果文件的工具.gprof采用混合方法来收集程序的统计信息,它使用检测方法,在编译过程中在函数入口处插入计数器用于收集 ...

  8. WebDriver--定位元素的8种方式

    在UI层面的自动化测试开发中,元素的定位与操作是基础,也是经常遇到的困难所在.webdriver提供了8种定位: 1. id定位:find_element_by_id("id值") ...

  9. hdu2037今年暑假不AC(贪心,活动安排问题)

    今年暑假不AC Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submi ...

  10. SQL Sever查询语句集锦

    一. 简单查询简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的表或视图.以及搜索条件等. 例如,下面的语句查询testtable表中姓名为“ ...