欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

19.SpringBoot的搭建

程序员文章站 2022-07-10 21:14:41
19. SpringBoot的搭建1、Spring的优缺点1.1 优点(1)开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。(2)控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。(3)面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。(4)spring对于主流的应用框架提供了很好的支持,例如mybatis。(5)spring提供有自己的mvc实现。1.2 缺点虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。虽然spr...

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