关闭

Spring Boot-自定义配置

标签: springjavaspring-boot
1137人阅读 评论(0) 收藏 举报
分类:

引言:

使用传统的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路径。

0
0
查看评论

Springboot 外置配置详解

Springboot 外置配置 源码地址:https://github.com/itguang/springbootLearn/tree/master/springboot_07 spring Boot 自动配置的bean提供了300多个用于微调的属性.当调整设置时,只需要在环境变量,...
  • itguangit
  • itguangit
  • 2017-11-04 14:39
  • 277

Spring Boot-配置文件-多环境配置

一. 多环境配置的好处:1、不同环境配置可以配置不同的参数;2、便于部署,提高效率,减少出错二. Properties多环境配置 配置激活选项 // 默认激活 application-dev.properties文件的配置 spring.profiles.active=dev 添加其他配置文件 ap...
  • liulihui1988
  • liulihui1988
  • 2017-09-20 15:28
  • 90

Spring自定义配置文件读取类

配置可读取自定义的properties文件实现类MiceConfig: public class MiceConfig extends PropertyPlaceholderConfigurer { // map映射 private static Map ctxPropertiesMap; ...
  • yueritian
  • yueritian
  • 2015-05-16 14:07
  • 723

Spring Boot学习笔记-自定义配置

springboot学习,自定义配置
  • frankcheng5143
  • frankcheng5143
  • 2017-03-06 20:20
  • 2757

Spring 从零开始-01

由于学习需求,最近突然通知需要学习Spring,但是由于之前很少使用Java,所以感觉还是有点慢,花了大约两周,弄懂了基本的结构也编了点小程序。还是万事开头难啊,网上总是很难找到学习spring的指引资料,学习一个东西最主要的还是学习他的思想,还有就是一个可靠地学习建议,这东西会让你事半功倍,学习一...
  • WSRspirit
  • WSRspirit
  • 2015-07-03 21:12
  • 1015

SpringBoot中级教程之SpringBoot自定义配置(十一)

SpringBoot中级教程之SpringBoot自定义配置(十一)前言首先力推下我的开源项目http://git.oschina.net/wangkang_daydayup/swagger-doc 这是一个完全利用spring boot开发的项目,拯救了springfox-swagger污染代码的...
  • veZunShao
  • veZunShao
  • 2017-07-18 16:14
  • 3147

Spring MVC4.1-Spring MVC的配置(含自定义HttpMessageConverter)

想要了解更多,加QQ群72132378 8.1 配置 Spring MVC的配置是通过继承WebMvcConfigurerAdapter类并重载其方法实现的;前几个教程已做了得配置包括 01点睛Spring MVC 4.1-搭建环境 配置viewResolve...
  • ggy101600
  • ggy101600
  • 2016-12-02 08:02
  • 1031

Spring Boot-配置devtools实现热部署

写在前面   Spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。 devtools的原理   深层原理是使用了两个ClassLoader,一...
  • autumnforest290
  • autumnforest290
  • 2017-09-11 14:40
  • 73

spring boot 使用自定义配置

在spring boot的自动配置中,即使不使用写任何配置文件,通过默认配置大多都可以运行起来。但是有些时候这些配置并不能满足我们的需求,需要我们自己的定制。例如:数据源地址,中间件地址等,默认的都是本机localhost,当然我们实际使用过程中一般都不会在同一台机器 事实上,Spring B...
  • u013530955
  • u013530955
  • 2017-03-05 14:43
  • 1110

springmvc学习笔记(22)——自定义类型转换器

数据绑定流程 自定义类型转换器 控制层 前端 springmvc如何将String转化为Student对象 写一个自己的类型转换器 在springmvc配置文件中配置数据绑定流程 使用springmvc框架有诸多好处,其中较为突出的就是它的数据绑定。 当我们的前端传过来一个表单的时候,我们只需要使用...
  • u010837612
  • u010837612
  • 2015-04-28 10:16
  • 3056
    个人资料
    • 访问:7638次
    • 积分:272
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档