赞
踩
使用传统的Spring配置过程,就如同订披萨的时候自己制定全部的辅料。你可以完全掌握Spring配置的内容,可是显示声明应用程序里全部的Bean并不是明智之举。而Spring Boot的自动配置就像是从菜单中选一份特色披萨,让Spring Boot处理各种细节比自己声明上下文里的全部Bean要容易的多。
Spring Boot的自动配置非常灵活。就像披萨厨师可以不在你的披萨里放香菇,而是加墨西哥胡椒一样,Spring Boot能让你参与进来,影响自动配置的实施。
两种影响自动配置的方式:
1.覆盖Spring Boot自动配置
一般来说,如果不用配置就能得到和显式配置一样的结果,那么不写配置是最直接的选择。
大多数情况下,自动配置的Bean刚好能满足你的需要,不需要去覆盖它们。但某些情况下,Spring Boot在自动配置时还不能很好的进行推断。
比如说,在应用程序中添加安全特性,自动配置还做得不够好,Spring Boot为安全提供了一些基本的自动配置,但是你还是需要自己覆盖一些配置以满足特定的安全要求。
现在就程序的安全工作,举例说明:
Spring Boot自动配置让应用程序的安全工作变得易如反掌,你要做的只是添加Secuirty起步依赖。
Gradle:
compile("org.springframework.boot:spring-boot-starter-security")
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
这样就是一个安全的Web应用,默认在打开应用程序时,进行HTTP基础身份验证框。用户名为user,密码是在应用程序每次运行时随机生成后写入日志的,比如:Using default security password:d9d8abe5-42b5-4f20-a32a076ee3dff658d9
.通常我们的应用程序的需要一个更好的登录页,更多用户并且是基于数据库或LDAP(Lightweight Directory Access Protocol)用户存储的身份验证服务。所以需要覆盖自动配置的安全设置。
覆盖自动配置很简单,就当自动配置不存在,直接显式写一段配置,显式配置的形式不限,Spring支持XML和Groovy形式配置,使用Java配置都可以。Spring Boot会发现你的配置,随后降低自动配置的优先级,以你的配置为准。
为什么Spring允许自动配置被覆盖?
Spring Boot自带很懂配置类,每一个都能运用在你的应用程序里。它们都是用Spring4.0的条件化配置,可以在运行时判断这个配置是否被运用。@ConditionalOnMissingBean注解是覆盖自动配置的关键,指被@Bean注解的方法使用了@ConditionalOnMissingBean注解,当应用程序中不存在该注解括号中配置的Bean时才生效,该方法才会被执行。
2.通过属性文件外置配置
Spring Boot提供了300多个用于微调的属性,当你调整设置时,只要在环境变量、jav系统属性、JNDI、命令行参数或者属性文件里进行指定。如:设置数据库URL,端口号,日志级别等。
Spring Boot应用程序有多种设置途径。Spring Boot能够从多种属性源获取属性,按优先级排序,包括:
application.properties和application.yml文件可以放在以下4个位置,同一优先级位置同时有application.properties和application.yml文件,那么application.yml文件会覆盖application.properties,按优先级排序如下:
3.定制应用程序错误页面
Spring Boot提供”白标”(whitelabel)错误页,这是自动配置的一部分。比Stacktrace页面要好一点。
Spring Boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标错误视图。因此,最简单的方法就是创建一个自定义视图,,让解析出的试图名为error。
取决于错误试图解析时采用的视图解析器。
实现了Spring的View接口的Bean,其ID为error(由Spring的BeanNameViewResolver所解析)
如果配置了Thymeleaf,则有名为error.html的Thymeleaf模板。
如果配置了FreeMarker,则有名为error.ftl的FreeMarker模板。
如果配置了Velocity,则有名为error.vm的Velocity模板。
如果是JSP视图,则有名为error.jsp的JSP模板。
例子:使用Thymeleaf,创建一个名为error.html的文件。在Maven或者Gradle项目里,将该文件放在src/main/resources/templates中,运行时它就在Classpath的根目录里。错误图片应该放在src/main/resources/static或src/main/resources/public,这样应用程序才能找到它。
error.html文件内容:
Spring Boot会为错误试图提供如下错误属性:
timestamp:发生错误的时间。
status:HTTP状态码。
error:错误原因。
exception:异常的类名。
message:异常信息(如果这个错误是由异常引起的)。
errors:BindingResult异常里的各种错误(如果这个错误是由异常引起的)。
trace:异常跟踪信息(如果这个错误是由异常引起的)。
path:错误时请求的URL路径。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。