SpringBoot使用详解

概念

Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。
如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,
如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。
以后每次使用Spring Boot整合其他技术时首先需要考虑导入启动器。

Spring Boot版本介绍

  1. SNAPSHOT:快照版,即开发版。
  2. CURRENT:最新版,但是不一定是稳定版。
  3. GA:General Availability,正式发布的版本。

hello world

1.项目继承spring-boot-starter-parent
原因: spring-boot-starter-parent中规定了各种jar包版本,可以避免jar包版本冲突

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.4</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

如果已经有父工程了Spring Boot用了继承就不能继承别的项目了。所以Spring Boot还提供了依赖的方式。
使用dependencyManagement进行jar包版本管理
dependencyManagement可以在本项目和子项目中使用

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>
    
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

2.新建启动类
​ Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的。
​ 注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository…),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。(扫描同一路径下的所有类的注解,注意是注解,xml文件不能扫描)

// 启动类
// 可以自动扫描当前类所在包及子包的注解
// 注意:此类要放入到包中
@SpringBootApplication
public class MyApplication {
    public static void main(imagesString[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

新建控制器

@Controller
public class DemoController {
    @RequestMapping("/show")
    @ResponseBody
    public String show(){
        return "hello";
    }
}

Spring Boot配置文件

1.Properties格式
2.YML格式
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
​如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的

注意:static该目录是SpringBoot可以直接识别的目录,会将其中的静态资源编译到web项目中,并放到tomcat中使用。静态资源的访问路径中无需声明static。例如: http://localhost:8080/a.png
IDEA中经常出现放在static下的静态文件即使重启也不被编译。需要通过Maven面板进行清空缓存,重新编译启动即可识别。
启动
访问localhost:8080/show

1.Spring Boot整合MyBatis

添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

yml中配置连接信息

# 数据源(数据库连接池) 配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: fsfs

# 加载MyBatis的mapper.xml
mybatis:
  mapper-locations: classpath:mybatis/*.xml

创建service层,在Mapper报下所有接口加上@Mapper注解或在启动类上加@MapperScan(“接口路径”)
在serviceImp上加上@Service注解
调用执行

如果xml文件和Mapper接口在同一目录下springboot是扫描不到的
1.需要配置资源拷贝插件让xml能扫描到
2.同时还要配置yml中的mybatis的mapper映射路径:
1和2都要配置才行
1.mybatis映射路径

mybatis:
  mapper-locations: classpath:com/example/demo/mapper/*.xml

2.资源拷贝插件

<build>
        <resources>
            <!-- 扫描src/main/java下所有xx.xml文件 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <!-- 扫描resources下所有资源 -->
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

2.Spring Boot整合Druid

添加依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      max-active: 30
      min-idle: 5
      # 配置获取连接等待超时的时间
      max-wait: 60000
      validation-query: SELECT 1 FROM DUAL
      #配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      # 配置DruidStatViewServlet
      stat-view-servlet:
        # 登录名
        login-username: admin
        # 登录密码
        login-password: admin
        url-pattern: /druid/*
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 192.167.10.1,127.0.0.1
        reset-enable: false
        # 必须启用,要不会404
        enabled: true

3.SpringBoot整合Junit4

添加启动器

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

注意:

  1. 测试类不能叫做Test
  2. 测试方法必须是public
  3. 测试方法返回值必须是void
  4. 测试方法必须没有参数
    测试
    注意:在springBoot2.4之前 使用整合单元测试需要写 @SpringBootTest (classes={启动器类名.class})和RunWith(SpringRunner.class)
// 当前类为测试类
@SpringBootTest
public class MyTest {
    @Autowired
    UserMapper userMapper;
    @Autowired
    private UserService userService;
    @Test
    public void test(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
        System.out.println(userService.test());
    }
} 

4.Spring Boot整合PageHelper

Spring Boot整合PageHelper不需要做任何配置文件的配置,添加依赖后就可以直接使用。
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

代码中一定要注意,要把PageHelper.startPage()写在查询数据库代码之上。
测试:

// pageNumber为当前页码 pageSize为页大小
PageHelper.startPage(pageNumber,pageSize);
// 查询全部,查询方法必须是查询多行结果,且没有分页语法。否则无法在sql后面拼接limit子句。
List<POJO> list = tbItemMapper.selectAll();
// PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取
PageInfo<TbItem> pi = new PageInfo<>(list);
System.out.println(pi.getList());
System.out.println(pi.getTotal());

5.Spring Boot整合logback

​ Spring Boot默认使用Logback组件作为日志管理。Logback是由log4j创始人设计的一个开源日志组件。在Spring Boot项目中我们不需要额外的添加Logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中已经包含了Logback的依赖。
Logback读取配置文件的步骤:
1.在classpath下查找文件logback-test.xml
2.如果文件不存在,则在classpath下查找logback.xml

注意:我们可以通过yml配置方式开启日志, 这种不需要导入logback.xml

#不改变日志类型和日志规则 只开启mybatis中对应SQL的日志
logging:
  level:
    com.bjsxt.mapper: trace

6.SpringBoot异常处理

1.springBoot中异常处理页面
直接在 templates中新建文件夹名称error文件的名称就是异常的状态码―例如 500.html 5xx.html如果没有找到合适的异常跳转页面就会找templates中error.html
扩展名取决于使用的java模板引擎
设置具体的状态码页面
在templates下新建error文件夹,在error中新建:状态码.html的页面。例如当出现500时显示的页面为500.html/ftlh
使用x进行模糊匹配
当出现5开头状态码的错误时,显示页面可以命名为5xx.html

当出现50开头状态码的错误时,显示页面可以命名为50x.html
500.html >5xx.html > error.html

2.异常处理
在控制器类中添加一个方法,结合@ExceptionHandler。但是只能对当前控制器中方法出现异常进行解决。

@Controller
public class UsersController {
    @RequestMapping("showInfo")
    public String showInfo(){
        String str = null;
        str.length();
        return "ok";
    }
    @ExceptionHandler(value = {java.lang.NullPointerException.class} )
    public ModelAndView nullpointExcepitonHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    }
}

通过@ControllerAdvice与@ExceptionHandler注解处理异常

/**
 * 全局异常处理类
 */
@ControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = {java.lang.NullPointerException.class} )
    public ModelAndView nullpointExcepitonHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    }

    @ExceptionHandler(value = {java.lang.ArithmeticException.class} )
    public ModelAndView arithmeticExceptionHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error2");
        return mv;
    }
}

3.通过SimpleMappingExceptionResolver对象处理异常

/**
 * 全局异常 
 * SimpleMappingExceptionResolver
 */ 
@Configuration
public class GlobalException2 {

    /**
     * 此方法返回值必须是SimpleMappingExceptionResolver对象
     * @return
     */
    @Bean
    public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        /*
         * 参数一:异常类型,并且是全名
         * 参数二:视图名称
         */
        properties.put("java.lang.NullPointerException","error3");
        properties.put("java.lang.ArithmeticException","error4");

        resolver.setExceptionMappings(properties);
        return resolver;
    }

}

4. 通过自定义HandlerExceptionResolver对象处理异常

@Component
public class GlobalException3 implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) {
        ModelAndView mv = new ModelAndView();
        //判断不同异常类型,做不同视图的跳转
        if(e instanceof NullPointerException){
            mv.setViewName("error5");
        }
        if(e instanceof ArithmeticException){
            mv.setViewName("error6");
        }
        mv.addObject("error",e.toString());
        return mv;
    }
}

7.Spring Boot中Bean管理

访问权限修饰符没有强制要求,一般是protected
返回值就是注入到Spring容器中实例类型。
方法名没有强制要求,相当于bean 中id属性。也就是bean的注入名称

如果bean中的类还有类对象,直接在@bean上加入另一个类的对象,可以使用@Qualifier(“”)指定别名

@Configuration
public class MyConfig {
    @Bean
    protected User jqk(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        return user;
    }
    // 自定义bean名称
    @Bean("nml")
    protected  User abc(){
        User user = new User();
        user.setId(2L);
        user.setName("李四");
        return user;
    }
}

测试:

@SpringBootTest
public class test {
    @Autowired
    @Qualifier("jqk")
    private User abc;
    @Test
    public void test(){
        System.out.println(abc);
    }
}

8.SpringBoot拦截器

创建实现拦截器的类
不要忘记类上注解@Component

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("pre");
        return false;
    }
}

注册拦截器
​ 注意:
类上有注解@Configuration。此类相当于SpringMVC配置文件。也可以使用@SpringBootConfiguration

@SpringBootConfiguration
public class Myconfig implements WebMvcConfigurer {
    @Autowired
    private MyInterceptor myInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	/注册拦截器,可以注册多个
        registry.addInterceptor(myInterceptor).addPathPatterns("/*").excludePathPatterns("/login");
    }
}

9.Spring Boot 开发者工具

开发者工具作用:
​ 使用开发者工具包不需要重启。监听内容改变。
导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

在这里插入图片描述
修改Registry
​ Ctrl+Shift+Alt+/ 点击弹出框中Registry…

在这里插入图片描述

重新服务器再次改变代码,服务器会自动监听启动

10.SpringBoot项目打包成jar包

添加SpringBoot打包插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

点击IDEA右侧Maven – > Lifecycle --> install
打包后的内容出现在target根目录
运行jar包项目
java -jar 文件名.jar

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4318.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java分布式锁面试题

1.为什么需要分布式锁? public synchronized void test() {System.out.println("获取到锁"); } public void test2() {synchronized (Test.class) {System.out.println("获取到锁");} }假设我们把上述代码部署到多台服务器上&#xff0c;这个互斥锁还能生…

BPI-R3开发板 - atf编译

一. 获取源码 https://github.com/mtk-openwrt/arm-trusted-firmware 二. 编译步骤 和编译uboot一样&#xff0c;编译环境为ubuntu 18.04。交叉编译工具链我用的是openwrt编译生成的工具链&#xff0c;并设置到环境变量&#xff0c;如下&#xff1a; export PATH$PATH:/root/mt…

【大屏设计方案】

大屏设计方案一、非等比放大(填充满整个屏幕)目的屏幕比例大小和设计稿的差的不多目的屏幕比例大小和设计稿的差很多二、等比放大&#xff08;比如16&#xff1a;9&#xff09;解决方案之后就可以用rem了&#xff0c;有两种便利的方式&#xff1a;也可以用media 根据不同的屏幕…

膳食真菌在癌症免疫治疗中的作用: 从肠道微生物群的角度

谷禾健康 癌症是一种恶性肿瘤&#xff0c;它可以发生在人体的任何部位&#xff0c;包括肺、乳房、结肠、胃、肝、宫颈等。根据世界卫生组织的数据&#xff0c;全球每年有超过1800万人被诊断出患有癌症&#xff0c;其中约有1000万人死于癌症。癌症已成为全球范围内的主要健康问题…

@LoadBalanced注解原理

1.概述 使用注解就像是在代码中加入了一段魔法&#xff0c;让我们轻而易举的就实现了至关重要的功能。 就像LoadBalanced一样&#xff0c;将该注解使用在RestTemplate的Bean上&#xff0c;就可以实现负载均衡&#xff0c;就像下面这段代码&#xff1a; Configuration public…

新手UI设计师必读:火爆海外设计圈的设计资源!

Hello&#xff0c;各位好&#xff01; 作为一名新手UI设计师&#xff0c;你是否无法完全搞清楚某些UI设计的基本原则和概念&#xff1f;你是否为使用哪款设计软件来开启你的设计之路而困扰&#xff1f;你是否想要在线学习设计排版、色彩搭配、形状和线条设计&#xff1f; 今天这…

rabbitMQ的详细介绍

1.概述 RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑RabbitMQ是一个快递站&#xff0c;一个快递员…

实验记录项目

1. 关于语谱图的通道的均值与方差 2023年 03月 27日 星期一 10:10:22 CST 使用tqwt 对每一份音频进行分解: 每份音频得到三个分量, cA分量: 近似分量,用于表征低频部分; cD分量: 高频分量,  res 剩余分量: 1.1 问题: 对每个分量使用如下变换,  使用Mel,  Shar…

SQL面试必会50题

引用&#xff1a; 视频讲解&#xff1a;https://www.bilibili.com/video/BV1q4411G7Lw/ SQL面试必会50题&#xff1a; https://zhuanlan.zhihu.com/p/43289968 图解SQL面试题&#xff1a;经典50题&#xff1a;https://zhuanlan.zhihu.com/p/38354000 其中重点为&#xff1a;1/2…

ChatGLM本地部署应用的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

系统分析师每日练习错题知识点2

嵌入式系统---多核cpu 多核是多微处理器核的简称&#xff0c;是将两个或更多的独立处理器封装在一起&#xff0c;集成在一个电路中。多核处理器是单枚芯片&#xff08;也称为硅核&#xff09;&#xff0c;能够直接插入单一的处理器插槽中&#xff0c;但操作系统会利用所有相关…

Java Web中的ServletContext对象

目录 ServletContext对象 获取上下文初始化参数的相关方法 创建ServletContext对象 1&#xff09;通过 GenericServlet 提供的 getServletContext() 方法 2&#xff09;通过 ServletConfig 提供的 getServletContext() 方法 3&#xff09;通过 HttpSession 提供的 getServletCo…

Apache iotdb-web-workbench 认证绕过漏洞 CVE-2023-24829

漏洞简介影响版本 0.13.0 < 漏洞版本 < 0.13.3漏洞主要来自于 iotdb-web-workbench IoTDB-Workbench是IoTDB的可视化管理工具&#xff0c;可对IoTDB的数据进行增删改查、权限控制等&#xff0c;简化IoTDB的使用及学习成本。iotdb-web-workbench 中存在不正确的身份验证漏…

微服务架构(二)

Sentinel 使用及概念 什么是 Sentinel Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量 为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel 具有以下特征: 丰富的应用场景&#xff1a;Sentin…

基于springboot实现医院信息管理系统【源码+论文】

基于springboot实现医院信管系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xf…

2023年全国DAMA-CDGP数据治理专家认证线上班招生简章

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

Vue3——v-md-editor(markDown编辑器)使用教程

Vue3——v-md-editor安装使用教程 安装 # 使用 npm npm i kangc/v-md-editor -SEditorMarkdown.vue页面用来封装此编辑器组件 Test.vue作为接受EditorMarkdown.vue的父组件&#xff0c;当测试页使用 路由部分要放入test.vue main.js部分全局引入组件 import EditorMarkdown f…

操作系统权限维持(十一)之Linux系统-SSH Wrapper后门

系列文章 操作系统权限维持&#xff08;一&#xff09;之Windows系统-粘贴键后门 操作系统权限维持&#xff08;二&#xff09;之Windows系统-克隆账号维持后门 操作系统权限维持&#xff08;三&#xff09;之Windows系统-启动项维持后门 操作系统权限维持&#xff08;四&…

算法强化每日一题--字符串中找出连续最长的数字串

hi,大家好,今天为大家带来一道题目 OR59 字符串中找出连续最长的数字串 描述 读入一个字符串str&#xff0c;输出字符串str中的连续最长的数字串 输入描述&#xff1a; 个测试输入包含1个测试用例&#xff0c;一个字符串str&#xff0c;长度不超过255。 输出描述&#xff1a; 在…

北邮22信通:(8)实验1 题目五:大整数加减法(搬运官方代码)

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章&#xff1a; 北邮22信通&#xff1a;&#xff08;7&#xff09;实验1 题目四&#xff1a;一元多项式&#xff08;节省内存版&#xff09;_青山如…