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)!