Spring Boot 实践折腾记:配置即使用,常用配置

Posted mickjoust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 实践折腾记:配置即使用,常用配置相关的知识,希望对你有一定的参考价值。

生活不可能像你想象的那么好,但也不会像你想象的那么糟。我觉得人的脆弱和坚强都超乎自己的想象。有时,可能脆弱得一句话就泪流满面;有时,也发现自己咬着牙走了很长的路。——源自 莫泊桑

开始前…

本章内容主要介绍的是Spring Boot常用的配置,相对前一篇来说,比较简单。“配置即使用“的意思就是,在工程里配置了自带的默认配置或自定义配置后,就能生效的一种功能,这也是Spring Boot推荐的一种做法。常用配置,就是一般用得最多的配置,大家默认推荐的配置。其实大家都知道官方有最标准的配置,但是有时就是不愿去看,反而喜欢常用配置,为什么呢?一般的技术文档都是枯燥乏味的,写的井然有序,适合查找,但是一般的情况下,有些配置很少会用到,所以,就逐渐形成了常用配置。

说说@SpringBootApplication

@SpringBootApplication是Spring Boot的核心注解,它本身是一个的注解组合,包含了启动配置的一系列功能,让我们来看下源码:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.AliasFor;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication 
    Class<?>[] exclude() default ;

    String[] excludeName() default ;

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default ;

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default ;

组合包含了以下重要注解:

@Configuration
@EnableAutoConfiguration
@ComponentScan

其中,@Configuration表示这是一个配置,@EnableAutoConfiguration表示让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。

比如,添加了spring-boot-starter-web这个基础依赖,Spring Boot会自动添加tomcat和Spring MVC的依赖,并且自动对他们进行配置。

@ComponentScan表示的是大家都熟悉的自动bean扫描注入。

如果不使用@SpringBootApplication,可以像我第一章那样,使用单独的注解,效果是一样的。

再来说一下入口类,Spring Boot的启动是靠一个名为*Application的入口类来实现的,入口类其实就是一个标准的Java静态方法类,只不过是在类中使用了一个对象SpringApplication的run方法来启动Spring Boot项目。如下图:

由于Spring Boot会自动扫描@SpringBootApplication所在类的同级包(如com.hjf.boot.demo.boot_mybatis)以及下级包里的所有bean,所以,官方建议入口类放在最外层的包名下。如下图:

最后,还有一个新的注解@AliasFor,这个注解应该是从4.2开始的标示注解属性别名的含义。

属性文件配置

Spring Boot的默认属性配置文件是在resources下的application.properties,也可以使用application.yaml来配置默认参数。如果是使用Spring Boot自带的配置的话,配置即使用,无需再单独去声明内容。例如:

也可以使用自己习惯的配置,但是这种方式不太安全,有可能会和自带的配置或第三方配置冲突,例如:

test.user=mickjoust
test.age=30

Spring Boot推荐使用类型安全的方式来进行自定义配置,例如:

@ConfigurationProperties(
        prefix = "safe"   //定义了一个safe前缀的配置类
)
public class SafeProperties 

日志配置

Spring Boot支持 Java Utile Logging、Log4J、Log4J2和Logback作为日志框架,无论使用哪种框架,Spring Boot都为当前使用日志框架及文件输出做好了配置。

默认情况下,Spring Boot使用LogBack作为默认日志框架,输出格式的文件是logback.cml

配置日志级别:

logging.file=/export/log

配置日志文件,按照格式loggin.level.包名=级别:

logging.level.org.springframework.web=DEBUG

或者直接配置root所有日志级别:

logging.level.root=DEBUG

Profile配置

Profile是Spring针对不同的环境提供不同的配置支持的一种功能,一般应用在生产环境和测试环境的配置区分上(比如,测试环境一般需要打印更多日志信息或者http响应中会有很多测试标示信息等等,生产环境则不会有)。Spring Boot中通过类似格式applicaiotn-profile_name.properties的配置形式指定当前活动的Profile。
例如:首先在application.properties中配置如下:

spring.profiles.active=dev

新建application-dev.properties和application-online.properties两个配置文件,内容分别如下:
application-dev.properties

server.port=8181

application-online.properties

server.port=9090

文件结构如下:

启动不同配置即可看到用的是测试环境配置,如下,切换配置同理。
使用测试环境配置

使用生产环境配置

引用xml配置

上一章里已经使用过,使用@ImportResource来加载xml配置,使我们在特定的应用的场景下去使用xml的配置:

@ImportResource(locations = "classpath*:/applicationContext.xml")

关闭自动配置

同样,上一章中已经配置过,当我们需要关闭自动配置的功能是,找到对应的自动配置的类,添加到排除项里即可,多项采用逗号隔开.class名称:

@SpringBootApplication(exclude = MybatisAutoConfiguration.class)

Banner配置

关闭banner

Banner是什么?其实就是启东时显示的一个图案,Spring Boot默认显示如下:

如果不想显示它,直接在配置文件里配置即可关闭,如下:

spring.main.banner-mode=off

修改banner

我们也可以定制自己的启动图案,通过字符生成网站生成好看的字母或图案字符来显示自己的启动图案。

1、在src/main/resources下新建一个banner.txt。
2、将生成好的字符复制到banner.txt中。
3、启动即可显示自定义图案了。

starter pom

Spring Boot为我们提供了大多数常用的封装依赖,叫做starter pom,只要使用相关的starter pom,则Spring Boot会为我们自动的配置Bean,使用配置文件即可修改常用参数。除了官方提供的starter pom以外,页可以自己封装starter应用于自己的项目,后面再抽空演示如何自定义starter pom,像上一章里的mybatis就是mybatis小组封装的starter提供对Spring Boot的支持。

官方地址starter pom地址:

Favicon配置

关闭Favicon

说到favicon.ico这个小图标,Spring Boot提供了默认的小叶子,如果不需要使用

定制Favicon

但是,绝大多数时候,我们都会定制自己的小图标,用以区分我们的项目。设置它很简单,只需要将favicon.ico文件放到以下目录下,即可实现。

1、类路径 根目录 下
2、类路径 META-INF/resources/下
3、类路径 resources/下
4、类路径 static/下
5、类路径 public/下

后续文章在集成web项目详细配置时,会单独说明除了Spring Boot默认识别的静态文件路径外,怎么自定义静态路径或其它过滤路径。

一份简单的配置

#自定义:类型不安全
demo.author=mickjoust
demo.name=mickjoust-boot-demo

#内嵌tomcat配置
server.port=8080
#server.context-path= //如果没有值就不配置,可以使用默认,但不要在这里留空,会有错误
server.tomcat.uri-encoding=UTF-8

#Profile
spring.profiles.active=dev

#http encoding
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

#日志
#logging.file=/export/log
#logging.level.root=DEBUG
#logging.level.org.springframework.web=DEBUG
#logging.level.sample.mybatis.mapper=TRACE

#datasource
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
#spring.datasource.username=test
#spring.datasource.password=123456
#spring.datasource.max-active=10
#spring.datasource.max-idle=5
#spring.datasource.min-idle=0

#converters 默认jackson
spring.http.converters.preferred-json-mapper=gson

#spring.main.banner-mode=off

小结

本章主要是对常用的Spring Boot配置做了简单的说明,更详细的配置可以参考官方的解释。配置内容和集成使用的依赖有关系,比如,ssl,jpa,jackson,httpconvert,mvc等等,具体使用时再说明。


示例地址:boot-properties


page 165 of 366 in chapter 2016

以上是关于Spring Boot 实践折腾记:配置即使用,常用配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 实践折腾记:Spring Boot中的容器配置和SSL支持

(汇总)Spring Boot 实践折腾记 & Spring Boot 2.x 实践记

Spring Boot 实践折腾记:自定义配置,扩展Spring MVC配置并使用fastjson

Spring Boot 实践折腾记(20):Thymleaf + webjar + ECharts 构建本地图表

Spring Boot 实践折腾记:三板斧,Spring Boot下使用Mybatis

Spring Boot 2.x 实践记:Gson