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。
"我仍是很喜歡你,像雨灑落在熱帶與極地,不遠萬里。"