SpringBoot概述
背景
-
Springboot使用的是(约定大于配置)(项目中存在大量的配置,此外还内置一些习惯性配置,大大减少我们的工作量。使用springboot可以很容易创建一个独立运行(运行jar,内嵌servlet容器)、准生产级的基于spring框架的项目,使用springboot我们可以不用甚至只需要很少的spring配置
-
特点
- 创建独立的Spring应用程序
- 嵌入的Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标,健康检查和外部配置
- 绝对没有代码生成并且对XML也没有配置要求
- 配置理念:零配置文件,基于注解和JavaConfig暴露bean
-
优点
- 快速构建项目
- 对主流框架无缝集成
- 项目可以独立运行,无需依赖外部servlet容器
- 提供运行时的应用监控
- 极大提高了开发,部署效率
- 与Docker容器等集成方便
环境搭建
- 自动搭建
- 利用https://start.spring.io/ 可以直接生成demo代码
- 利用idea中自带的工具进行项目构建
手动搭建
- 建议标准maven项目,添加springboot父依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.21.RELEASE</version>
<relativePath/>
</parent>
- 根据要构建的项目,添加模块依赖
<!--
Web模块 springboot中会将所有的相关依赖一起添加
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--
热部署插件 自动刷新用
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- 建立项目启动类(用于启动整体的springboot项目)
- @SpringBootApplication除了有基础的注释,还包含了3个额外的注释
- SpringBootConfiguration:继承了@Configuration,相当于Spring配置中的beans节点
- EnableAutoConfiguration:允许Spring容器根据声明的bean进行依赖注入
- ComponentScan:相当于原来配置文件中指定的要扫描的包的路径
@SpringBootApplication(scanBasePackages = "com.ck")
public class Starter {
public static void main (String[] args){
SpringApplication.run(Starter.class,args);
}
}
- 项目中所有的配置信息都配置在唯一的配置文件中application.properties或者application.yaml
- 具体配置参考配置项大全
集成JSP
- 添加依赖
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
- 创建webapp目录(也可以一起创建WEB-INF目录)
- 编写jsp页面
- 如果要以逻辑视图名返回来作为转发操作,则需要配置视图解析器
#视图解析器
#前缀
spring.mvc.view.prefix=/WEB-INF/jsp/
#后缀
spring.mvc.view.suffix=.jsp
集成DRUID数据源
- 对于SpringBoot中提供的xxx-starter依赖,对于依赖中的某些JavaBean对象,SpringB oot会根据导入依赖,对这些所需要的对象进行自动创建
- 但是如果对于某些Bean对象,SpringBoot没有提供其对应的starter依赖,则这些Bean对象需要手动进行创建(可以通过JavaConfig创建,也可以定义XML,通过注解引入)
- DRUID我们就使用JavaConfig来配置
- 添加依赖
<!--
DRUID
-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
<!--
MySQL驱动
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 配置连接池参数
- 添加一个DRUID配置类
- 通过JavaConfig的方式来配置Druid数据源
- @Configuration 相当于在beans节点中添加了bean的定义
- @Bean 法的返回结果就相当于一bean对象
- @ConfigurationProperties 找到所有匹配的前缀后面的配置项的名字
/**
* 通过JavaConfig的方式来配置Druid数据源
*/
//相当于在beans节点中添加了bean的定义
@Configuration
public class DruidConfig {
//相当于bean节点,一般将其写在方法上
//方法执行完毕以后,方法的返回结果就相当于一bean对象
//注册到了Spring容器中
@Bean
//方法执行完毕以后会得到一个DruidDataSource对象
//但是对象中的属性尚未赋值
//通过@ConfigurationProperties注解,找到所有匹配的前缀后面的配置项的名字
//到bean对象中寻找 set+配置项 的set方法,将属性值通过set注入注入到实例中
//此时就完成了数据源对象的初始化操作
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource initDataSource() {
//通过Java代码创建数据源对象
DruidDataSource ds = new DruidDataSource();
return ds;
}
}
集成MyBatis
- 添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
- 指定映射文件所在的路径
- mybatis.mapper-locations=classpath:mapper/*.xml
- 需要指定mapper接口所在的路径
- 此处需要将注解加载starter中 @MapperScan(“com.sy.mapper”)
- 配置一些MyBatis的框架参数:别名、缓存、下划线和驼峰之间的映射
- mybatis.type-aliases-package=com.sy.entity
集成Redis
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
- 添加redis的配置信息
#redis的相关配置
#主机
spring.redis.host=192.168.174.101
#端口
spring.redis.port=6379
#默认数据库
spring.redis.database=0
#密码
#spring.redis.password=
#连接池参数
spring.redis.pool.max-idle=20
spring.redis.pool.min-idle=1
spring.redis.pool.max-active=20
spring.redis.pool.max-wait=60000
- 配置RedisTemplate
- RedisConnectionFactory对象在引入依赖的时候已经自动创建了
- 此处相当于从容器中自动将其注入到方法参数中
@Configuration
public class RedisConfig {
/**
* RedisConnectionFactory对象在引入依赖的时候已经自动创建了
* 所以此处相当于从容器中自动将其注入到方法参数中
*/
@Bean
public RedisTemplate getRedisTempalte(RedisConnectionFactory connectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
- 在Spring中要使用RedisTemplate来操作Redis
@RequestMapping(value = "redis", method = RequestMethod.GET)
public String redis() {
Boolean result = (Boolean) redisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection con) throws DataAccessException {
con.set("name".getBytes(), "Tom".getBytes());
return true;
}
});
System.out.println(result);
return "hello";
}
集成拦截器
- 写拦截器类
- 对于拦截器、过滤器、监听器、跨域访问一系列和web相关的内容都可以在一个配置类中完成,这个配置类需要实现WebMvcConfigurer 接口
- 在实现WebMvcConfigurer 接口的配置类中添加拦截器的配置
- 可以在这个方法中注册多个拦截器,拦截器中的拦截路径和排除路径都是变长参数。
拦截顺序按照注册顺序来
- 可以在这个方法中注册多个拦截器,拦截器中的拦截路径和排除路径都是变长参数。
@Override
public void addInterceptors(InterceptorRegistry registry) {
//在此处注册拦截器
registry.addInterceptor(new MyInterceptor01()).addPathPatterns("/**").excludePathPatterns("/hello02");
}
文件上传
- 添加文件上传相关的参数(这里就会开始对文件上传组件进行实例化)
- 其他操作相同
#单个文件的最大大小
spring.http.multipart.max-file-size=1024Mb
#请求时所有文件加起来的最大大小
spring.http.multipart.max-request-size=2028Mb
跨域访问
在实现WebMvcConfigurer 接口的配置类中配置即可
public void addCorsMappings(CorsRegistry registry) {
//设定跨域
registry.addMapping("/**").allowedMethods("*").allowedOrigins("*").allowedHeaders("*").allowCredentials(true);
}
过滤器、监听器
- 编辑过滤器和监听器
- 在实现WebMvcConfigurer 接口的配置类中配置即可
通过@Bean注解暴露出来
/**
* 配置过滤器
*/
@Bean
public FilterRegistrationBean addFilter01() {
FilterRegistrationBean regist = new FilterRegistrationBean();
regist.setFilter(new Filter01());
regist.addUrlPatterns("/*");
//初始化参数
// regist.setInitParameters();
//过滤器的过滤顺序
//优先级:值越小,优先级越高
//regist.setOrder();
return regist;
}
/**
* 配置监听器
*/
@Bean
public ServletListenerRegistrationBean addListener() {
ServletListenerRegistrationBean listener = new ServletListenerRegistrationBean();
listener.setListener(new MyContextListener());
return listener;
}
异常处理器
- 同SpringMVC中的配法
@Component
public class MyExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
ModelAndView mv = new ModelAndView();
mv.setViewName("500");
mv.addObject("errMsg", ex.getMessage());
return mv;
}
}