导读:
在上篇文章中我们了解到Spring Boot 的一些常用的外部化配置,在本篇中我们将会继续对类的配置进行了解
一个简单的例子[错误页面定制]:
在 Spring Boot 中的约定大于配置 与 自动装配使我们可以不必去像以往一样配置各个框架之间的依赖与注入,但是有时Spring Boot 提供给我们的默认配置并不能完全满足我们的需求,因此个性化的配置或者叫自定义装配内容便为我们提供了这种便利。
这里我们以一个简单的在Spring Boot 中自定义错误页面的例子做为展示:
@Configuration
public class ErrorPageConfig {
@Bean
public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
return new MyCustomizer();
}
private static class MyCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.FORBIDDEN, "/403"));
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
}
}
}
EmbeddedServletContainerCustomizer 正如名字一样 - 嵌入式Servlet容器定制器,我们通过对其方法的覆盖重新达到了自定义错误页面的效果。
当然 如果使用的是Spring MVC 的话我们也可以使用 Spring MVC 提供的@ExceptionHandler方法和@ControllerAdvice。ErrorController进行异常的捕捉与错误信息页面的定制。
备注:
@Configuration:表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源。
@Bean :告诉 Spring,这是一个bean对象,该对象应该被注册为在 Spring 应用程序上下文中的 bean。
不同框架的不同配置:
这里以Spring Security 作为演示:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthenticationProvider customAuthenticationProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.authenticationProvider(customAuthenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/reg", "/login", "/css/**", "/js/**", "/img/**", "/music/**", "/plugins/**", "/upload/**", "/api/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
// 默认情况下,CSRF保护已启用。你必须配置包含_csrf令牌的所有的网页来工作。
// 你可以随时禁用CSRF保护。如果在代码中配置: 解决post请无法提交
http
.csrf().disable();
//in a frame because it set 'X-Frame-Options' to 'DENY'.
http
.headers()
.frameOptions()
.sameOrigin();
}
}
在一般情况下我们要对Spring Boot 集成的一些框架做些自定义配置时, 可以去实现 对应框架的XXXConfigurerAdapter,然后通过EnableXXX注解进行修饰 之后用 Configuration 注解修饰,最后对其方法进行覆盖从而到达自定义配置的目的,当然具体的配置还是需求去翻阅对应的文档说明来了解。
更多Spring Boot项目提供的框架整合(Starter POMs):
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目中包含spring-boot-starter-data-jpa依赖,然后你就可以开始了。
该starters包含很多你搭建项目,快速运行所需的依赖,并提供一致的,管理的传递依赖集。
名字有什么含义:所有的starters遵循一个相似的命名模式:spring-boot-starter-,在这里是一种特殊类型的应用程序。该命名结构旨在帮你找到需要的starter。很多IDEs集成的Maven允许你通过名称搜索依赖。例如,使用相应的Eclipse或STS插件,你可以简单地在POM编辑器中点击ctrl-space,然后输入"spring-boot-starter"可以获取一个完整列表。
下面的应用程序starters是Spring Boot在org.springframework.boot组下提供的:
spring-boot-starter 核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。
spring-boot-starter-amqp 通过 spring-rabbit 支持 AMQP。
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
spring-boot-starter-batch 支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 来支持 MongoDB。
spring-boot-starter-data-rest 通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。
spring-boot-starter-jdbc 支持使用 JDBC 访问数据库。
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支持使用 Velocity 作为模板引擎。
spring-boot-starter-web 支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支持使用 Tomcat 开发 WebSocket 应用。
spring-boot-starter-ws 支持 Spring Web Services。
spring-boot-starter-actuator 添加适用于生产环境的功能,如性能指标和监测等功能。
spring-boot-starter-remote-shell 添加远程 SSH 支持。
spring-boot-starter-jetty 使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
spring-boot-starter-log4j 添加 Log4j 的支持。
spring-boot-starter-logging 使用 Spring Boot 默认的日志框架 Logback。
spring-boot-starter-tomcat 使用 Spring Boot 默认的 Tomcat 作为应用服务器。
结语:
关于Spring Boot 常用的一些配置方式做了一个简要的介绍,从这些配置中我们也可以看到Spring Boot 为我们提供的各种默认配置的好处,当我们不需要这些默认值时,我们有两种常用的覆盖方式:
1.通过 application.yml文件进行定义。
2.通过实现对应的ConfigurerAdapter,并托管给Spring 容器来进行定义。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。