spring boot中的约定优于配置

Spring Boot并非一个全新的框架,而是将已有的Spring组件整合起来。web

Spring Boot能够说是遵循约定优于配置这个理念产生的。它的特色是简单、快速和便捷。redis

既然遵循约定优于配置,则有一些约定是须要去了解的。虽说Spring Boot基本上舍弃了XML的配置,可是也不是说是零配置,由于约定也是须要配置来支持的,只是说减小了大量配置。spring

starter依赖数据库

Spring Boot提供了一系列的Starter依赖来简化jar包依赖的配置。json

好比说spring-boot-starter-web等。api

运行方式app

spring-boot-starter-web中包含了Spring MVC的相关依赖(包含Json支持的Jackson和数据校验的Hibernate Vaildator)和一个内置的Tomcat容器,这使得再开发阶段能够直接经过main方法或是Jar包单独运行一个web项目。而在部署阶段也能够达成war包放到生产环境中运行。框架

@SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }

在拥有@SpringBootApplication注解的类中,使用SpringApplication类的run方法能够经过Jar启动项目。ide

若是要经过war来启动项目,则须要继承SpringBootServletInitializer类并实现configure方法,使用SrpingApplicationBuilder类实例的sources方法启动项目。spring-boot

配置文件

Spring Boot提供了两种默认的配置文件,是在resources资源目录下的application.properties或application.yml。

若是在项目中遇到application.properties出现中文乱码的问题,能够改用yaml。出现这个问题是由于Spring Boot老是会以iso-8859的编码方式读取该文件。并且yaml拥有更简洁的语法,所以更推荐使用application.yml做为默认的配置文件。

配置文件中能够定义一个叫作spring.profiles.active的属性,这个属性能够根据运行环境自动读取不一样的、额外的配置文件,例如将该属性定义为dev的话,Spring Boot就会额外地从application-dev.properties/application-dev.yml文件中读取该环境的配置。

Spring Boot注入配置文件属性的方法有两种,一种是经过@Value注解接受配置文件中的属性,另一种是经过@ConfigurationProperties注解经过set方法自动为Bean注入相应的属性。

经过@Value注入属性,接收者既能够是方法参数,也能够是成员变量。

@Bean public JedisPool jedisPool(@Value("${redis.host}") String host, @Value("${redis.port}") int port) { return new JedisPool(host, port); }

经过@ConfigurationProperties读取配置初始化Bean,会直接调用相应的set方法进行注入。

@Bean(initMethod="init",destroyMethod="close") @ConfigurationProperties(prefix="dataSource") public DataSource dataSource() { return new DruidDataSource(); }

Servlet

Servlet中最重要的配置文件就是web.xml,它的主要用途是配置Servlet映射和过滤器。而在Spring Boot中这将简单不少,只须要将对应的Servlet和Filter定义为Bean便可。

声明一个映射根路径的Servlet,例如Spring MVC的DispatcherServlet:

@Bean public DispatcherServlet dispatcherServlet() { return new DispatcherServlet(); }

须要注意的是,Spring Boot默认会自动建立DispatcherServlet的映射。但这是在项目中没有手动声明其余Servlet Bean的状况下,不然就须要也将这个Bean一块儿声明。

声明一个映射特定路径的Servlet,或是须要配置初始化参数的话,则须要使用ServletRegistrationBean。

例如Druid的StatViewServlet:

@Bean public ServletRegistrationBean statViewServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings("/druid/*"); return reg; } 

声明过滤器也是如此,例如Spring MVC的CharacterEncodingFilter:

@Bean public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); return filter; } 

复杂一点的一样是经过相似的FilterRegistrationBean,例如:

@Bean public FilterRegistrationBean appFilter() { FilterRegistrationBean reg = new FilterRegistrationBean(); reg.setFilter(new LoggingFilter()); reg.addUrlPatterns("/api/*"); return reg; } 

Spring MVC

Spring MVC的主要配置均可以经过继承WebMvcConfigurerAdapter(或者WebMvcConfigurationSupport)类进行修改,这两个类的主要方法有:

addFormatters:增长格式化工具(用于接收参数)

configureMessageConverters:配置消息转换器(用于@RequestBody和@ResponseBody)

configurePathMatch:配置路径映射

addArgumentResolvers:配置参数解析器(用于接收参数)

addInterceptors:添加拦截器

总之几乎全部关于Spring MVC的配置均可以在这个类中配置。以后只须要将其设为配置类,即在类上注解@Configuration,Spring Boot就会在运行时加载这些配置。

还有一些经常使用的Bean默认会自动建立,可是能够经过自定义进行覆盖,例如负责@RequestBody和@RequestBody进行转换的MappingJackson2HttpMessageConverter和ObjectMapper,能够直接这样覆盖掉:

@Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { return new CustomMappingJackson2HttpMessageConverter(); } @Bean public ObjectMapper jsonMapper(){ ObjectMapper objectMapper = new ObjectMapper(); // null输出空字符串 
    objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() {     @Override     public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {       jgen.writeString(“”);     }   });   return objectMapper; } 

DataSource

若是使用了spring-boot-starter-data-jpa,Spring Boot将会自动建立一个DataSource Bean。能够直接在配置文件中定义它的属性,前缀是spring.datasoruce。而且无需指定数据库的方言,这个Bean会自动根据项目中依赖的数据库驱动判断使用的是那种数据库。

一样的,若是使用了spring-boot-starter-data-redis,也会建立RedisTemplate、ConnectionFactory等Bean。也一样能够在配置文件中定义属性,前缀是spring.redis。

 

"我仍是很喜欢你,像雨洒落在热带与极地,不远万里。"

相关文章
相关标签/搜索