Spring Boot-自定义配置

引言:

使用传统的Spring配置过程,就如同订披萨的时候自己制定全部的辅料。你可以完全掌握Spring配置的内容,可是显示声明应用程序里全部的Bean并不是明智之举。而Spring Boot的自动配置就像是从菜单中选一份特色披萨,让Spring Boot处理各种细节比自己声明上下文里的全部Bean要容易的多。

Spring Boot的自动配置非常灵活。就像披萨厨师可以不在你的披萨里放香菇,而是加墨西哥胡椒一样,Spring Boot能让你参与进来,影响自动配置的实施。

影响Spring Boot自动配置的方式

两种影响自动配置的方式:

  • 使用显示配置进行覆盖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能够从多种属性源获取属性,按优先级排序,包括:

  • 1.命令行参数
  • 2.java:comp/env里的JNDI属性
  • 3.JVM系统属性
  • 4.操作系统环境变量
  • 5.随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})
  • 6.应用程序以外的application.properties或者application.yml文件
  • 7.打包在应用程序内的application.properties或者application.yml文件
  • 8.通过@PropertySource标注的属性源
  • 9.默认属性

application.properties和application.yml文件可以放在以下4个位置,同一优先级位置同时有application.properties和application.yml文件,那么application.yml文件会覆盖application.properties,按优先级排序如下:

  • 1.外置,在相对于应用程序运行目录的/config子目录里。
  • 2.外置,在应用程序运行的目录里。
  • 3.内置,在config包内。
  • 4.内置,在Classpath根目录

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文件内容:
error.html

Spring Boot会为错误试图提供如下错误属性:

timestamp:发生错误的时间。
status:HTTP状态码。
error:错误原因。
exception:异常的类名。
message:异常信息(如果这个错误是由异常引起的)。
errors:BindingResult异常里的各种错误(如果这个错误是由异常引起的)。
trace:异常跟踪信息(如果这个错误是由异常引起的)。
path:错误时请求的URL路径。

阅读更多
文章标签: spring java spring-boot
个人分类: Spring Boot
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Spring Boot-自定义配置

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭