19.SpringBoot的搭建
19. SpringBoot的搭建
1、Spring的优缺点
1.1 优点
(1)开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。
(2)控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。
(3)面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。
(4)spring对于主流的应用框架提供了很好的支持,例如mybatis。
(5)spring提供有自己的mvc实现。
1.2 缺点
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。虽然spring引入了注解功能,但是仍然需要编写大量的模板化配置文件.
项目的jar依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
1.3 SpringBoot解决问题
SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想.可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
2、SpringBoot的概述
2.1 概述
Spring Boot是由Pivotal团队提供的在spring框架基础之上二次开发的框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者。
Spring Boot就是对各种框架的整合,让他们集成在一起更加简单,它做了那些没有它你自己也会去做的Spring Bean配置。你不用再写这些样板配置了,可以专注于应用程序的逻辑.
Spring Boot你只需要“run”就可以非常轻易的构建独立的、生产级别的spring应用。
我们为spring平台和第三方依赖库提供了一种固定化的使用方式,使你能非常轻松的开始开发你的应用程序。大部分Spring Boot应用只需要很少的配置。
2.2 SpringBoot的特点
(1)创建独立的spring应用程序
(2)直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)
(3)提供了固定化的“starter”配置,以简化构建配置
(4)尽可能的自动配置spring和第三方库
(5)提*品级的功能,如:安全指标、运行状况监测和外部化配置等
(6)绝对不会生成代码,并且不需要XML配置
2.3 SpringBoot的核心功能
起步依赖
起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。
3、搭建SpringBoot环境
(1)Maven 下载 SpringBoot 依赖的jar包
<!-- spring-boot web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<!-- 配置springboot内置tomcat环境 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
(2)编写入口程序main函数
SpringBoot 通过java的注解的形式启动,就像javaSE程序一样,通过main函数入口。
package com.company.springboot03;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Springboot03Application {
public static void main(String[] args) {
SpringApplication.run(Springboot03Application.class, args);
}
}
(3)编写配置文件 application.yml
#内置服务器的配置
server:
port: 9999
#spring的配置(配置spring视图解析器和数据源配置)
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
datasource:
url: jdbc:mysql://127.0.0.1:3306/shop?characterEncoding=utf-8&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
(4)配置springboot热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
以后修改代码之后就不用每次执行main函数启动工程.
(5)配置SpringBoot支持jsp
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.22</version>
</dependency>
配置视图解析器
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
(6)SpringBoot集成JDBC
导入jdbc包
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
导入mysql驱动包
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
(7)配置数据源信息
导入阿里数据源
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
在yml文件注册阿里数据库连接池
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/shop?characterEncoding=utf-8&serverTimezone=GMT
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5
minIdle: 5
maxActive: 20
(8)编写配置Druid的监控
DruidDataSourceConfig.java
package com.company.springBootPro.util;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
//spring自动扫描加载此类
@Configuration
public class DruidDataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druid() {
return new DruidDataSource();
}
// 配置Druid的监控
// 1、配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String, String> initParams = new HashMap<String, String>();
// 监控页面登录用户名
initParams.put("loginUsername", "admin");
// 监控页面登录用户密码
initParams.put("loginPassword", "123456");
// ip白名单(没有配置或者为空,则允许所有访问)
initParams.put("allow", "");
// ip黑名单(如果某个ip同时存在,deny优先于allow)
initParams.put("deny", "");
bean.setInitParameters(initParams);
return bean;
}
// 2、配置一个web监控的filter
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String, String> initParams = new HashMap<String, String>();
// 不拦截的静态资源
initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
bean.setInitParameters(initParams);
// 拦截所有的请求
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
(9)集成Mybatis
导入springboot集成mybatis环境的jar包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
在application.yml中配置mybatis信息
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml #映射文件
type-aliases-package: com.company.springBootPro.bean #别名
configuration:
cache-enabled: true #二级缓存
map-underscore-to-camel-case: true #java驼峰与数据库下划线对应转换
application.yml中配置控制台输出sql脚本
# 配置控制台输出sql脚本
logging:
level:
com:
company:
springBootPro:
dao: TRACE
在Springboot03Application.java主函数类的上面添加扫描mapper文件注解
package com.company.springboot03;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.company.springboot03.mapper")
public class Springboot03Application {
public static void main(String[] args) {
SpringApplication.run(Springboot03Application.class, args);
}
}
(10)配置文件上传
导入配置文件上传jar包
<!-- 文件上传下载 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
编写文件上传配置类
package com.company.springboot03.util;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Configuration
public class MultipartConfig {
/**
* 文件上传配置
* @return
*/
@Bean
public CommonsMultipartResolver multipartConfigElement() {
CommonsMultipartResolver multipartresolver = new CommonsMultipartResolver();
multipartresolver.setMaxUploadSize(1024*1024*5);
multipartresolver.setDefaultEncoding("utf-8");
return multipartresolver;
}
}
(11)配置自定义拦截器
编写拦截器类
package com.company.springboot03.util;
import com.company.springboot03.bean.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
/*
方法:检测用户是否登录,若没有登录则跳转登录页
当请求到达控制器之前被执行
true--继续向下执行,到达下一个拦截器,或控制器
false--不会继续向下执行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
if(user == null){
response.sendRedirect(request.getContextPath()+"/demoCtl/toLogin");
return false;
}else{
return true;
}
}
/*
控制器方法执行之后执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/*
整个请求结束后执行
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
配置自定义拦截器
package com.company.springboot03.util;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 注册自定义拦截器
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer{
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration inter = registry.addInterceptor(new LoginInterceptor());
inter.addPathPatterns("/**"); //拦截的路径
inter.excludePathPatterns("/demoCtl/toLogin"); //放行的路径
}
}
本文地址:https://blog.csdn.net/baidu_41907361/article/details/107349082