Spring Boot教程(简介)
2018-01-03 16:09
253 查看
Spring Boot
Spring Boot 是由Pivotal团队提供的框架,它并不是一个全新的框架,而是将已有的Spring 组件整合起来,设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid
application development)成为领导者。
其特点是去掉了繁琐的 XML 配置,改使用约定或注解。所以熟悉了 Spring Boot 之后,开发效率将会提升一个档次。约定优于配置的这种做法在如今越来越流行了,它的特点是简单、快速、便捷。但是这是建立在程序员熟悉这些约定的前提上。而 Spring 拥有一个庞大的生态体系,刚开始转到 Spring Boot 完全舍弃 XML 时肯定是不习惯的,所以也会造成一些困扰。这里介绍一下一些常用的心得。
运行方式
Spring Boot集成了tomcat,在打包web项目的时候,可以直接打成jar包,而且不需要在环境中安装tomcat,而只需要java环境,就可以用启动jar包的方式来启动web项目。因为spring-boot-starter-web包含了
Spring MVC 的相关依赖(包括 Json 支持的 Jackson 和数据校验的 Hibernate Validator)和一个内置的 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/debug方法可以通过JAR启动项目。
继承
SpringBootServletInitializer类并实现
configure方法,使用
application的
sources方法可以通过WAR启动项目。
配置文件
Spring boot 的默认配置文件是 resources下的
application.properties(可能会出现中文乱码)和
application.yml(推荐)。
配置文件中可以定义一个叫做
spring.profiles.active的属性,该属性可以根据运行环境自动读取不同的配置文件。例如将该属性定义为
dev的话,Spring
Boot 会额外从
application-dev.yml文件中读取该环境的配置。
Spring Boot 注入配置文件属性的方法有两种,一种是通过
@Value注解接受配置文件中的属性,另外一种是通过
@ConfigurationProperties注解通过
set方法自动为Bean注入对应的属性。
通过
@Value注入属性,接收者既可以是方法参数,也可以是成员变量。例如配置文件为:
dataSource: url: jdbc:mysql://127.0.0.1:3306/test username: test password: test filters: stat,slf4j redis: host: 192.168.1.222 port: 6379
通过
@Value接受方法参数初始化Bean:
@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(); }
Spring Boot 目前还无法直接注入的静态变量。我目前使用的方法是专门建立一个读取配置文件的Bean,然后使用
@PostConstruct注解修饰的方法对这些静态属性进行初始化,例如:
@Configuration public class ConstantsInitializer { @Value("${paging_size}") private String pagingSize; @PostConstruct public void initConstants() { Constants.PAGING_SIZE = this.pagingSize; } }
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/test/*"); return reg; }
Spring MVC
Spring MVC 主要的配置都可以通过继承 WebMvcConfigurerAdapter(或者
WebMvcConfigurationSupport)类进行修改,这两个类的主要方法有:
addFormatters:增加格式化工具(用于接收参数)
configureMessageConverters:配置消息转换器(用于
@RequestBody和
@ResponseBody)
configurePathMatch:配置路径映射
addArgumentResolvers:配置参数解析器(用于接收参数)
addInterceptors:添加拦截器
总之几乎所有关于 Spring MVC 都可以在这个类中配置。之后只需要将其设为
@Configuration,Spring
Boot 就会在运行时加载这些配置。
当然还有一些常用的 Bean 默认会自动创建,但是可以通过自定义进行覆盖,例如负责
@RequestBody和
@ResponseBody进行转换的
MappingJackson2HttpMessageConverter和
ObjectMapper,可以直接这样覆盖掉:
@Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { return new CustomMappingJackson2HttpMessageConverter(); } @Bean public ObjectMapper jsonMapper(){ ObjectMapper objectMapper = new ObjectMapper(); //null输出空字符串 objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() { @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.datasource。并且无需指定数据库的方言,这个
Bean 会自动根据项目中依赖的数据库驱动判断使用的哪种数据库。
同样的,如果使用了
spring-boot-starter-data-redis,也会自动创建
RedisTemplate、
ConnectionFactory等
Bean。也同样可以在配置文件中定义属性,前缀是
spring.redis。
相关文章推荐
- Redis简介-安装-Spring-SpringBoot集成教程
- SpringBoot基础教程及框架整合(二)----项目结构简介
- spring boot入门与进阶教程
- Intellij IDEA创建spring-boot项目的图文教程
- SpringBoot非官方教程 | 第九篇: springboot整合Redis
- Spring Boot教程(十六)使用@Async实现异步调用
- SPRING-BOOT 教程,从入门到精通
- SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)
- 解决idea不支持SpringBoot yml文件的图文教程
- Spring Boot教程一
- Spring Boot教程全集
- SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
- SpringBoot非官方教程 | 第十六篇:用restTemplate消费服务
- Spring Boot教程(二十八)通过JdbcTemplate编写数据访问
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Spring Boot教程
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- 【Spring Boot教程】推荐使用Spring Tool Suite(STS)开发
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版