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。
"我仍是很喜欢你,像雨洒落在热带与极地,不远万里。"