【SpringBoot3学习 | 第2篇】SpringBoot3整合+SpringBoot3项目打包运行

在这里插入图片描述

文章目录

    • 一. SpringBoot3 整合 SpringMVC
      • 1.1 配置静态资源位置
      • 1.2 自定义拦截器(SpringMVC配置)
    • 二. SpringBoot3 整合 Druid 数据源
    • 三. SpringBoot3 整合 Mybatis
      • 3.1 Mybatis整合
      • 3.2 声明式事务整合配置
      • 3.3 AOP整合配置
    • 四. SpringBoot3 项目打包和运行
      • 4.1 添加打包插件
      • 4.2 执行打包
      • 4.3 命令启动

一. SpringBoot3 整合 SpringMVC

1.1 配置静态资源位置

  • spring.resources.static-locations:配置静态资源的位置。

    静态资源可以是CSS、JavaScript、图像等。
    默认情况下,Spring Boot会将静态资源放在classpath:/static目录下。可以通过在配置文件中设置spring.resources.static-locations属性来自定义静态资源的位置。

  • 默认的静态资源路径为:
    • classpath:/META-INF/resources/
    • classpath:/resources/
    • classpath:/static/
    • classpath:/public/
  • 在/static创建一个login.html
    在这里插入图片描述
    此时,浏览器访问路径:http://localhost:8081/huahua/login.html
  • 在webapp目录下创建一个register.html
    在这里插入图片描述
    在application.yaml中配置静态资源访问:
    server:port: 8081servlet:context-path: /huahuaspring:web:resources:static-locations: classpath:/webapp #配置静态资源的位置# 配置后,会覆盖默认的静态资源文件夹# 外部访问静态资源时,不需要写静态资源文件夹:http://localhost:8081/huahua/register.html

此时,访问路径:http://localhost:8081/huahua/register.html

1.2 自定义拦截器(SpringMVC配置)

  • pom.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></parent><groupId>com.hky</groupId><artifactId>springboot-03-base-springmvc</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
    
  • 拦截器声明
    package com.hky.interceptor;import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.web.servlet.HandlerInterceptor;/*** @author hky* @date 2024/6/29* @Description*/
    public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("request = " + request + ", response = " + response + ", handler = " + handler);return true;}
    }
  • 拦截器配置
    正常使用配置类,保证:配置类要在启动类的同包或者子包方可生效
    package com.hky.config;import com.hky.interceptor.MyInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @author hky* @date 2024/6/29* @Description*/
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor());}
    }

二. SpringBoot3 整合 Druid 数据源

  • 创建程序
  • 引入依赖:pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></parent><groupId>com.hky</groupId><artifactId>springboot-04-base-druid</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--  web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 数据库相关配置启动器 jdbctemplate 事务相关--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- druid启动器的依赖  --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.18</version></dependency><!-- 驱动类--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></dependencies></project>
    
  • 设置启动类
  • 编写配置文件
    spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:url: jdbc:mysql://localhost:3306/examsusername: rootpassword: H13548361722driver-class-name: com.mysql.cj.jdbc.Driver# 初始化时建立物理连接的个数initial-size: 5# 连接池的最小空闲数量min-idle: 5# 连接池最大连接数量max-active: 20# 获取连接时最大等待时间,单位毫秒max-wait: 60000# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。test-while-idle: true# 既作为检测的间隔时间又作为testWhileIdel执行的依据time-between-eviction-runs-millis: 60000# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)min-evictable-idle-time-millis: 30000# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)validation-query: select 1# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-borrow: false# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-return: false# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。pool-prepared-statements: false# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100max-pool-prepared-statement-per-connection-size: -1# 合并多个DruidDataSource的监控数据use-global-data-source-stat: trueserver:port: 8081
  • 实体类
    package com.hky.pojo;import lombok.Data;/*** @author hky* @date 2024/6/29* @Description*/
    @Data
    public class College {private Integer collegeID;private String collegeName;
    }
  • 编写Controller
    package com.hky.controller;import com.hky.pojo.College;
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author hky* @date 2024/6/29* @Description*/
    @RestController
    @RequestMapping("college")
    public class CollegeController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMapping("list")public List<College> list(){String sql = "select * from college";List<College> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(College.class));return list;}}
  • :druid-spring-boot-3-starter虽然适配了SpringBoot3,但缺少自动装配的配置文件,需要手动在resources目录下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,写入内容:
    com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
    
  • druid 1.2.20 后可不用上述配置

三. SpringBoot3 整合 Mybatis

3.1 Mybatis整合

  • 创建程序
  • 导入依赖,pom.xml:
    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version>
    </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.1</version></dependency><!-- 数据库相关配置启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- druid启动器的依赖  --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-3-starter</artifactId><version>1.2.18</version></dependency><!-- 驱动类--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></dependencies>
    
  • application.yaml配置文件
    spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:url: jdbc:mysql://localhost:3306/examsusername: rootpassword: H13548361722driver-class-name: com.mysql.cj.jdbc.Driver# 初始化时建立物理连接的个数initial-size: 5# 连接池的最小空闲数量min-idle: 5# 连接池最大连接数量max-active: 20# 获取连接时最大等待时间,单位毫秒max-wait: 60000# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。test-while-idle: true# 既作为检测的间隔时间又作为testWhileIdel执行的依据time-between-eviction-runs-millis: 60000# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接(配置连接在池中的最小生存时间)min-evictable-idle-time-millis: 30000# 用来检测数据库连接是否有效的sql 必须是一个查询语句(oracle中为 select 1 from dual)validation-query: select 1# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-borrow: false# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为truetest-on-return: false# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。pool-prepared-statements: false# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100max-pool-prepared-statement-per-connection-size: -1# 合并多个DruidDataSource的监控数据use-global-data-source-stat: truemybatis:mapper-locations: classpath:/mappers/*.xml #指定xml文件的位置type-aliases-package: com.hky.pojoconfiguration:map-underscore-to-camel-case: trueauto-mapping-behavior: fulllog-impl: org.apache.ibatis.logging.slf4j.Slf4jImplserver:port: 8081servlet:context-path: /huahua
    
  • 实体类
  • Mapper接口
  • Mapper接口实现(XML)
  • 编写三层架构代码
  • 启动类和扫描包配置
    @MapperScan("com.hky.mapper")
    @SpringBootApplication
    public class Main {public static void main(String[] args) {SpringApplication.run(Main.class,args);}
    }
    

3.2 声明式事务整合配置

  • 导入依赖
     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    
  • SpringBoot项目会自动配置一个DataSourceTransactionManager,所以只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理
    @Service
    public class CollegeService {@Autowiredprivate CollegeMapper collegeMapper;@Transactionalpublic List<College> query(){List<College> colleges = collegeMapper.queryAll();//int i = 1/0;return colleges;}
    }
    

3.3 AOP整合配置

  • 导入依赖
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    
  • 使用AOP注解
    @Component
    @Aspect
    @Order(5)
    public class LogAdvice {@Before("execution(* com..service.*.*(..))")public void before(JoinPoint point){String className = point.getTarget().getClass().getSimpleName();String methodName = point.getSignature().getName();System.out.println("className = "+ className + "  methodName = " + methodName + " 开始执行了!");}
    }

四. SpringBoot3 项目打包和运行

4.1 添加打包插件

<!--    SpringBoot应用打包插件-->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

4.2 执行打包

在这里插入图片描述
打包后,会生成一个 jar 包:
在这里插入图片描述

4.3 命令启动

  • 在Java环境中执行可执行的 jar 文件:
    命令格式:java -jar  [选项] [参数] <jar文件名>
    
    • -D<name>=<value>:设置系统属性
      java -jar -Dserver.port=8080 springboot-05-base-mybatis-1.0-SNAPSHOT.jar
      
    • -X:设置JVM参数,例如内存大小、垃圾回收策略等
    • -Dspring.profiles.active=<profile>:指定Spring Boot的激活配置文件
  • 启动和测试
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s-第二节-常用操作

k8s命令行常用操作 k8s命令行 操作对象时都要前面声明操作对象类型 kubectl get kubectl describe kubectl delete kubectl edit kubectl logs kubectl exec kubectl port-forward 端口转发将pod 端口映射出来 kubectl cp 本地文件路径:容器文件路径 kubectl apply …

【JS场景题】判断一个元素是否在可视区域内有哪些方法?

方法一、通过元素的位置信息和滚动条滚动的高度来判断 前置知识 clientWidth: 元素的内容区域宽度加上左右内边距宽度。offsetTop: 元素的上外边框至包含元素的上内边框之间的像素距离。document.documentElement.clientHeight&#xff1a; 获取视口高度&#xff08;不包含滚动…

《Attention Is All You Need》解读

一、简介 “Attention Is All You Need” 是一篇由Ashish Vaswani等人在2017年发表的论文&#xff0c;它在自然语言处理领域引入了一种新的架构——Transformer。这个架构现在被广泛应用于各种任务&#xff0c;如机器翻译、文本摘要、问答系统等。Transformer模型的核心是“自…

小学vr虚拟课堂教学课件开发打造信息化教学典范

在信息技术的浪潮中&#xff0c;VR技术正以其独特的魅力与课堂教学深度融合&#xff0c;引领着教育方式的创新与教学方法的变革。这一变革不仅推动了“以教促学”的传统模式向“自主探索”的新型学习方式转变&#xff0c;更为学生带来了全新的学习体验。 运用信息技术融合VR教学…

深度学习1

1.支持向量机Support Vector Machine&#xff08;SVM&#xff09;是一种对数据二分类的线性分类器&#xff0c;目的是寻找一个超平面对样本进行分割&#xff0c;广泛应用人像识别&#xff0c;手写数字识别&#xff0c;生物信息识别。 二维空间分割界是一条直线&#xff0c;在三…

table = collections.defaultdict(list)申请的字典的类型是什么?

当你使用 collections.defaultdict(list) 来申请一个字典时&#xff0c;这个字典的类型是 defaultdict&#xff0c;但是其行为和表现方式在某些方面与普通的字典&#xff08;dict&#xff09;相似&#xff0c;主要区别在于它如何处理缺失的键。 defaultdict 是 Python 标准库 …

【基础篇】第4章 Elasticsearch 查询与过滤

在Elasticsearch的世界里&#xff0c;高效地从海量数据中检索出所需信息是其核心价值所在。本章将深入解析查询与过滤的机制&#xff0c;从基础查询到复合查询&#xff0c;再到全文搜索与分析器的定制&#xff0c;为你揭开数据检索的神秘面纱。 4.1 基本查询 4.1.1 Match查询…

Java操作Excel最佳实践

Java操作Excel最佳实践 1、背景描述2、Apache POI简介3、Java读取Excel 1、背景描述 2、Apache POI简介 官网&#xff1a;http://poi.apache.org/index.html 官方文档&#xff1a;https://poi.apache.org/apidocs/index.html 3、Java读取Excel 3.1、导入依赖 <dependency…

Qt——升级系列(Level Seven):事件、文件

目录 Qt事件 事件介绍 事件的处理 按键事件 鼠标事件 定时器 事件分发器 事件过滤器 Qt文件 Qt文件概述 输入输出设备类 文件读写类 文件和目录信息类 Qt事件 事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt …

工商业光伏项目如何快速开发?

一、前期调研与规划 1、屋顶资源评估&#xff1a;详细测量屋顶面积、承重能力及朝向&#xff0c;利用光伏业务管理软件进行日照分析和发电量预测&#xff0c;确保项目可行性。 2、政策与补贴研究&#xff1a;深入了解当地政府对工商业光伏项目的政策支持和补贴情况&#xff0…

Java面试过程中遇到的问题

Java面试过程中遇到的问题 介绍工作经验项目 介绍项目 为什么选用这个技术 报表服务怎么实现的 java框架 1、spring clound特性&#xff0c;组件有那些以及作用 springCloud是一套微服务组件&#xff0c; 常用的Eureka&#xff0c;Ribbon&#xff0c;Hystrix&#xff0c;Fe…

第三方支付平台如何完美契合跨境电商?

在全球化的大潮中&#xff0c;跨境电商"Eurasia Boutique"的创始人艾米丽&#xff0c;带着她的梦想和手工艺品&#xff0c;踏上了进入中国市场的征程。这是一个充满挑战和机遇的旅程&#xff0c;艾米丽和她的企业需要面对和解决一系列复杂的问题。 合规的门槛 艾米…

JVM原理(十四):JVM虚拟机运行时栈帧结构

Java虚拟机已方法作为最基本的执行单位。 栈帧&#xff1a;是支持Java虚拟机进行方法调用和方法执行背后的数据结构。 栈帧存储了方法的 局部变量表、操作数栈、动态连接和放回地址等信息。 每一个方法的调用开始和执行结束&#xff0c;都对应着一个栈帧在虚拟机栈里面从入栈…

Linux文件与日志

目录 1. Linux 文件系统 1.1 inode号 1.2 EXT类型文件恢复 1.3 xfs类型文件备份和恢复 2. 日志分析 2.1 日志类型 2.2日志配置文件 2.3 日志分析的重要性 在Linux系统中&#xff0c;文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和…

驱动开发:配置Visual Studio驱动开发环境

100编程书屋_孔夫子旧书网 配置驱动开发环境配置驱动开发模板配置驱动双机调试 在正式开始驱动开发之前&#xff0c;需要自行搭建驱动开发的必要环境&#xff0c;首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具&#xff0c;在课件内请双击ISO文件并运行内部的…

2009-2024年第一季度上市公司华证ESG评级季度数据

2009-2024年第一季度上市公司华证ESG评级季度数据 1、时间&#xff1a;2009-2024年第一季度 2、指标&#xff1a;证券代码、证券简称、评级日期、综合评级、综合得分、E评级、E得分、S评级、S得分、G评级、G得分、证监会行业&#xff08;新&#xff09;、同花顺行业&#xff…

Visio框图自动带填充色原因及如何取消

0 Preface/Foreword Visio&#xff0c;Windows的一个流程图&框图制作工具。 1 新建Visio文件 1.1 图形带填充 新建Visio时候&#xff0c;如果选择了模版&#xff0c;那么就后期使用的工具元素会自动填充。 带来的弊端&#xff0c;在元素编辑文字时&#xff0c;如果此时不…

苹果公司的Wifi定位服务(WPS)存在被滥用的风险

安全博客 Krebs on Security 2024年5月21日发布博文&#xff0c;表示苹果公司的定位服务存在被滥用风险&#xff0c;通过 "窃取"WPS 数据库&#xff0c;可以定位部队行踪。 相关背景知识 手机定位固然主要依赖卫星定位&#xff0c;不过在城市地区&#xff0c;密集的…

Perl 语言开发(五):循环语句

目录 1. 循环语句概述 2. while 循环 2.1 基本语法 2.2 示例 2.3 无限循环 3. until 循环 3.1 基本语法 3.2 示例 3.3 无限循环 4. for 循环 4.1 基本语法 4.2 示例 4.3 嵌套循环 5. foreach 循环 5.1 基本语法 5.2 示例 5.3 遍历哈希 6. 循环控制语句 6.1 …

新建Vue工程的几种方法

文章目录 使用CLI2 : vue-cli使用CLI3 : vue/cli使用 vue3构建 &#xff08;内置Vite&#xff09;直接使用Vite使用parcel (最少配置方案) 使用CLI2 : vue-cli vue-cli是针对构建vue的脚手架CLI2&#xff0c;只能新建vue2工程。 全局安装vue-cli之后&#xff0c;构建vue2项目的…