自学内容网 自学内容网

springBoot详解

springBoot详解

一.回顾spring

1.1 优点:

开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。

控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。

面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。

spring对于主流的应用框架提供了很好的支持,例如mybatis。spring提供有自己的mvc实现

1.2 缺点

虽然spring的组件代码是轻量级的,但它的配置却是重量级的。虽然spring引入了注解功能,但是仍然需要编写大量的模板化配置文件。

项目的依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析导入大量库的坐标,而且还需要分析导入与之有关依赖,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

springboot对上述spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心地投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目 周期。

二. SpringBoot概述

Spring Boot 是由 Pivotal 团队提供的在 spring 框架基础之上开发的框架, 其设计目的是用来简化应用的初始搭建以及开发过程。 Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用 于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是 用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开 发者体验的工具. Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样 板化的配置。它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ, Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用, 通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导 者。 你只需要“run”就可以非常轻易的构建独立的、企业级别的 spring 应用。 我们为 spring 平台和第三方依赖库提供了一种固定化的使用方式,使你能非常 轻松的开始开发你的应用程序。大部分 SpringBoot 应用只需要很少的配置

2.1 springboot特点

创建独立的 spring 应用程序

直接内嵌 tomcat、jetty 和 undertow

提供了固定化的“starter”配置,以简化构建配置

尽可能的自动配置 spring 和第三方库

提供产品级的功能,如:安全指标、运行状况监测和外部化配置等

绝对不会生成代码,并且不需要 XML 配

2.2 springboot的核心功能
起步依赖

起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

自动配置

Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时) 的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过 程是 Spring 自动完成的

三. springboot开发环境构建

创建一个普通的 maven 项目 在 pom.xml 文件中添加以下配置

<!--依赖的父级工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<!--指定 jdk 版本-->
<properties>
<java.version>1.8</java.version>
</properties>
<!--添加基本的 springweb 依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
</plugins>
</build>

创建基本包目录,在包下创建一个启动类,如下所示:

@SpringBootApplication
public class SBApplication {
    public static void main(String[] args) {
        SpringApplication.run(SBApplication.class);
    }
}

Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot 应用相 当于一个独立的服务,可以使用启动类中的 main 方法启动 springboo

四. springboot配置文件

springboot使用一个全局的配置文件(配置名固定,必须为application),用来存储项目中需要用到的各种配置参数。配置文件格式有两种,一种为properties格式,一种是yaml格式

4.1 properties格式
server.port=8089

spring.datasource.diver-class-name=
spring.datasource.ur1=
spring.activemg.password=
spring.datasource.username=
4.2 yaml格式
#yaml基本语法:
#语法结构:key,空格 value
#来表示一对键值对
#user:
#  name: jim
#  age: 20
#    info: 
#      email:
#      address:


#配置服务器端口
server:
  port: 8081

使用@Value 注解标签将配置文件中的内容映射到类中的属性

@Value("${user.name}")

五.springboot数据访问管理

5.1 数据源配置:

首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
5.2 在application.yml中配置数据源信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
5.3 springboot整合阿里数据源

导入阿里数据源

<!-- 阿里巴巴数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

在yml中注册阿里数据库连接池

    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5    #初始化时建立物理连接的个数
    maxActive: 20   #最大连接池数量
5.4 springboot集成mybatis
<!-- SpringBoot 集成 mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

在 application.yml 中配置数据源信息

mybatis:
  type-aliases-package: com.lzy.news.model
  mapper-locations: classpath:mappers/*Mapper.xml
  configuration: #mybatis全局设置
    cache-enabled: true
    map-underscore-to-camel-case: true  #数据库列名 user_name 映射到java驼峰命名 userName
    #日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

启动类上添加@MapperScan(“接口所在的包地址”)@MapperScan(“接口所在 的包地址”)

@SpringBootApplication
@MapperScan("com.lzy.news.dao")
public class NewsApplication {
    public static void main(String[] args) {
        SpringApplication.run(NewsApplication.class);
    }
}

六.springboot集成日志

6.1 日志
日志是什么?

日志是程序中重要组成部分,可以监测程序运行轨迹,记录参数值的变化,尤其是生产环境中非常必要,通过日志文件可以快速的定位到问题。

6.2 日志的级别划分

从低到高:debug<info<warn<error

6.3 配置日志级别和日志文件位置
logging:
level:
com.ffyc.news: debug
file:
name: E:/log/log.log

其余信息在logback配置文件中

在类中使用:

public class loginControllar {
    //创建Logger对象
    private static Logger logger = LoggerFactory.getLogger(loginControllar.class);

    @Autowired
    LoginService loginService;

    @RequestMapping(path = "/login")
    public Admin login(@RequestBody Admin admin){
        //测试
        logger.debug("admin account:{},admin password:{}", admin.getAccount(),admin.getPassword());
        //提示
        logger.info("admin account:{},admin password:{}", admin.getAccount(),admin.getPassword());
        //警告
        logger.warn("admin account:{},admin password:{}", admin.getAccount(),admin.getPassword());
        //报错
        logger.error("admin account:{},admin password:{}", admin.getAccount(),admin.getPassword());

        Admin admin1=loginService.login(admin);
        System.out.println(admin1);
        return admin1;
    }
}
6.4 定义切面通知类
@Component
@Aspect
public class LogAspect {
    private Logger logger = LoggerFactory.getLogger(LogAspect.class);
    @Before("execution(public * com.lzy.news.web..*.*(..))")
    public void savelog(JoinPoint joinPoint) {
        ServletRequestAttributes attributes =
                (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
//Object[] objs = joinPoint.getArgs();获取方法参数
// 记录下请求内容
        logger.info("HTTP_METHOD :{} ", request.getMethod());
        logger.info("IP : {}", request.getRemoteAddr());//客户端 ip
    }
}

七.springboot统一异常处理

日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一 般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常 不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员 编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体 验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。

7.1 全局异常捕获与处理

Springboot 对 于 异 常 的 处 理 也 做 了 不 错 的 支 持 , 它 提 供 了 一 个 @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来 开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。

@RestControllerAdvice
public class GlobalExceptionHandler {
    /*
      异常处理
     */
    private static Logger logger = LoggerFactory.getLogger(loginControllar.class);

    @ExceptionHandler(Exception.class)
    public Result globalException(Exception e) {
        Result Result = new Result(500,"系统忙"+e.getMessage(),null);
        logger.info("Exception:"+e.getMessage());   //向日志文件打印信息
        return Result;  //向前端用户相应信息
    }
}

八. SpringBoot注释

springboot实现自动装配的核心仍然是使用注解标签

@SpringBootApplication  //springboot最核心的注解标签,用来启动spring

@SpringBootApplication其中包含

@SpringBootConfiguration//表明这是配置类,和@Configuration注解功能一致
@EnableAutoConfiguration//即把指定的类构造成对象,并放入spring容器中,使其成为bean对象
@CompoentScan(param)//为类加上此注解,会告诉spring哪个包的用注解标识的类,会被spring自动扫描并加入bean容器,param即用来指定扫描包的范围。如果类中用了@Controller,@Repository,@Service,@Component四大注解标识之一了,那么如果不加上@ComponentScan,Spring就不会自动扫描类上的四大注解中的任何一个
@Configuration//加入@Configuration注解,表明这是一个配置类

有一个 myBean()的方法 并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被 Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean 名称,也就是小写的名称

@Bean//相当于 XML 中的,放在方法的上面,而不是类,意思是产生一 个 bean,并交给 spring 管理。

原文地址:https://blog.csdn.net/qq_45576281/article/details/140584279

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!