目录

回顾Spring

SpringBoot

SpringBoot搭建

springboot集成JDBC,mybatis,阿里巴巴数据源

SpringBoot集成日志功能(了解)

SpringBoot 统一异常处理


回顾Spring

spring是一个轻量级的IOC和AOP的一站式框架,为简化企业级 的应用开发而生。

优点:

        轻量级:在IOC和AOP的基础上,Spring框架还对数据访问层和web层都进行封装

        IOC:控制反转

        AOP:面向切面编程

        解耦(代码之间的耦合度降低,例如IOC由框架创建管理对象,AOP可以将业务代码和非业务代码分离)

         一站式(数据访问层 数据连接对象管理,mybatis,事务,对web层的Servlet进行封装) 开源 很方便的集成其他的框架

不足:

         1.配置是重量级的(很多),而且大量是模板化配置

    <!--很多-->

    
	<!--开启AOP自动代理-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <!--开启web层的注解-->
    <mvc:annotation-driven></mvc:annotation-driven>

        2.项目中需要导入很多相关的依赖坐标(例如json组件,跨域过滤器....)

SpringBoot

springBoot是在spring的基础上,对spring应用的搭建进行简化,基于约定大于配置的思想(大家公认的做法,那么框架也就默认把一些功能直接实现了,例如我们现在都用注解开发)

可以创建一个企业级应用程序,而且内嵌服务器(tomcat),

有两大核心功能:

起步依赖 :当我们只用spring基本依赖时,自动的就会将相关的依赖导入进来

自动配置:spring启动时,可以根据我们项目中配置的相关依赖,自动加载配置

SpringBoot搭建

1.创建一个普通的maven项目

2.配置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>

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

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

4.创建自定义处理器

package com.ffyc.news.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(path = "/loginCtl")
public class LoginController {

    @RequestMapping("/login")
    public String login(){
        System.out.println("aaaa");
        return "success";
    }
}

5.启动,访问

        IP:端口/处理地址/方法地址

在浏览器测试

springboot集成JDBC,mybatis,阿里巴巴数据源

1.导入依赖

<!-- spring  jdbc -->
<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>
	
<!-- 阿里巴巴数据源 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
	
<!-- Spring集成mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

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
  type: com.alibaba.druid.pool.DruidDataSource
  initialSize: 5 #初始化时建立物理连接的个数
  maxActive: 20 #最大连接池数量


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

3.编写业务代码进行测试

SpringBoot集成日志功能(了解)

日志?

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

什么时候使用日志

       实际生产环境

日志的级别划分:从低到高:debug<info<warn<error

配置日志级别和日志文件位置

logging:
 level:
  com.ffyc.news: debug
 file:
  name: D:/development/log/log.log

在类中使用 创建 Logger 对象

   private static Logger logger = LoggerFactory.getLogger(当前类名.class);
   //在需要的位置调用具体的日志级别方法输出
   logger.debug("input account:{},password:{}", admin.getAccount(),admin.getPassword());
   logger.info("input account:{},password:{}", admin.getAccount(),admin.getPassword());
   logger.warn("input account:{},password:{}", admin.getAccount(),admin.getPassword());
   logger.error("input account:{},password:{}", admin.getAccount(),admin.getPassword());

SpringBoot 使用 AOP 统一打印日志

导入依赖jar

        <!-- AOP -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

定义切面通知类

@Component
@Aspect
public class LogAspect {
    private Logger logger = LoggerFactory.getLogger(LogAspect.class);

    @Before("execution(public * com.ffyc.news.web..*.*(..))")
    public void savelog(JoinPoint joinPoint) {
        ServletRequestAttributes attributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        // 记录下请求内容
        logger.info("HTTP_METHOD :{} ", request.getMethod());
        logger.info("IP : {}", request.getRemoteAddr());//客户端 ip

        Object[] objs = joinPoint.getArgs();//获取方法参数
        logger.info(Arrays.toString(objs));

    }
}

可以先编写实体类测试一下

@RestController
@RequestMapping(path = "/loginCtl")
public class LoginController {

    private static Logger logger = LoggerFactory.getLogger(LoginController.class);

    @Autowired
    LoginService loginService;

    @RequestMapping("/login")
    public Admin login(@RequestBody Admin admin){
//       logger.debug("input account:{},password:{}", admin.getAccount(),admin.getPassword());

        Admin admin1 = loginService.login(admin);
        
//        logger.debug("input account:{},password:{}", admin.getAccount(),admin.getPassword());
        return admin1;
    }

使用测试工具ApiPost7向后端发送数据

SpringBoot 统一异常处理

开发过程中,异常一 般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常,这种方式比较麻烦,SpringBoot提供了全局异常处理

//全局统一的异常处理类

@RestControllerAdvice//开启全局的异常捕获
public class GlobalExceptionHandler {

    private Logger logger= LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 异常处理
     */
    @ExceptionHandler(Exception.class)//捕获的异常,对异常进行处理
    public Result globalException(Exception e) {
        Result commonResult = new Result(500,"系统忙",null);
        logger.info("Expection"+e.getMessage());//向日志文件打印信息
        return commonResult;//向前端用户返回信息
    }
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部