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

news2024/11/19 15:31:46

在这里插入图片描述

文章目录

    • 一. 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: 8081
      servlet:
        context-path: /huahua
    
    spring:
      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 {
    
        @Override
        public 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 {
    
        @Override
        public 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.DruidDataSource
    
        druid:
          url: jdbc:mysql://localhost:3306/exams
          username: root
          password: H13548361722
          driver-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检测连接是否有效,开启会降低性能,默认为true
          test-on-borrow: false
          # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          test-on-return: false
          # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
          pool-prepared-statements: false
          # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
          max-pool-prepared-statement-per-connection-size: -1
          # 合并多个DruidDataSource的监控数据
          use-global-data-source-stat: true
    
    server:
      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 {
    
        @Autowired
        private 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.DruidDataSource
    
        druid:
          url: jdbc:mysql://localhost:3306/exams
          username: root
          password: H13548361722
          driver-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检测连接是否有效,开启会降低性能,默认为true
          test-on-borrow: false
          # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
          test-on-return: false
          # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
          pool-prepared-statements: false
          # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
          max-pool-prepared-statement-per-connection-size: -1
          # 合并多个DruidDataSource的监控数据
          use-global-data-source-stat: true
    
    mybatis:
      mapper-locations: classpath:/mappers/*.xml #指定xml文件的位置
      type-aliases-package: com.hky.pojo
      configuration:
        map-underscore-to-camel-case: true
        auto-mapping-behavior: full
        log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    
    server:
      port: 8081
      servlet:
        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 {
    
        @Autowired
        private CollegeMapper collegeMapper;
    
        @Transactional
        public 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.coloradmin.cn/o/1882066.html

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

相关文章

ROS学习笔记(17):建图与定位(1)

目录 0.前言 1.定位和建图 1.里程计&#xff08;Odometry&#xff09; 2.扫描匹配&#xff08;Scan Matching&#xff09; 3.结尾 0.前言 好久不见各位&#xff0c;前段时间忙着考试&#xff08;6级和一些专业课&#xff09;和摆烂断更了近30天&#xff0c;现在哥们回来更…

LaMa Image Inpainting 图像修复 OnnxRuntime-GPU版 Demo

目录 介绍 效果 模型信息 项目 代码 下载 LaMa Image Inpainting 图像修复 OnnxRuntime-GPU版 Demo 介绍 gihub地址&#xff1a;GitHub - advimman/lama: &#x1f999; LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, …

昇思25天学习打卡营第八天|保存与加载

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第八天了。 今天是第八天&#xff0c;前七天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

Python对象不可哈希?教你几招解决!

目录 1、什么是可哈希?🚀 1.1 哈希基础理论 1.2 可哈希对象定义🔍 示例代码: 1.3 Python中哈希的作用 1.4 哈希表与性能提升📈 应用实例代码: 2、Python中的哈希特性🔑 2.1 不变性与哈希值🔄 示例代码展示: 2.2 实现细节深入探讨📚 深入代码细节:…

深度学习论文: VanillaNet: the Power of Minimalism in Deep Learning

深度学习论文: VanillaNet: the Power of Minimalism in Deep Learning VanillaNet: the Power of Minimalism in Deep Learning PDF:https://arxiv.org/pdf/2305.12972 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 提出的VanillaNet通过简化设计&…

【机器学习】Python sorted 函数

目录&#xff1a; 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中&#xff0c;sorted()是一个内置函数&#xff0c;用于对任何可迭代对象&#xff08;如列表、元组、字符串等&…

绿联NAS进入SSH的方法

1. 进入【设备管理】&#xff0c;在调试功能中&#xff0c;开启远程调试功能&#xff0c;发送手机验证码&#xff0c;你将得到一个3天有效期的验证码&#xff0c;就是ssh登录密码。 2. 使用终端工具或ssh命令直接登录SSH。 端口是922&#xff0c;账号是&#xff1a;root&#…

七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3

前言 llama 3出来后&#xff0c;为了通过paper-review的数据集微调3&#xff0c;有以下各种方式 不用任何框架 工具 技术&#xff0c;直接微调原生的llama 3&#xff0c;毕竟也有8k长度了 效果不期望有多高&#xff0c;纯作为baseline通过PI&#xff0c;把llama 3的8K长度扩展…

李沐深度学习知识点—数值稳定性、模型激活函数、全连接层到卷积、卷积层

数值稳定性 其中h是一个向量&#xff0c;向量关于向量的倒数是一个矩阵&#xff0c;因此求梯度是求矩阵乘法 矩阵乘法带来了 梯度爆炸&#xff0c;梯度消失 模型初始化和激活函数 归一化&#xff1a;不管梯度多大&#xff0c;我都把梯度拉回来&#xff0c;否的出现梯度爆炸和梯…

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

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

内容个性化的智能引擎:Kompas.ai如何满足用户需求

在数字化时代&#xff0c;用户对内容的消费趋向个性化和定制化。个性化内容不仅能提升用户体验&#xff0c;还能增强品牌与用户之间的互动。Kompas.ai作为一款先进的智能引擎&#xff0c;正通过其独特的技术满足用户的个性化需求。 个性化内容的重要性 个性化内容在提升用户体验…

2024 vue3入门教程:01vscode终端命令创建第一个vue项目

参考vue官网手册&#xff1a;https://cn.vuejs.org/guide/quick-start.html 一、找个盘符&#xff0c;新建文件夹存储以后得vue项目 我的是e盘下创建了vueproject 二、使用vscode打开存储vue项目的文件夹 因为我生成过项目&#xff0c;所以有文件&#xff0c;你们初次是没有…

分布式存储和分布式计算两个哪个更适合作为工作深入方向发展?

有朋友问&#xff0c;分布式存储比如hdfs&#xff0c;ceph&#xff0c;minio&#xff0c;tidb&#xff0c;glusterfs&#xff1b;分布式计算比如Hadoop&#xff0c;spark&#xff0c;flink&#xff1b;它们在实际工作中咋样&#xff1f;具体开发工作是啥&#xff1f;哪个更有发…

leetCode.96. 不同的二叉搜索树

leetCode.96. 不同的二叉搜索树 题目思路 代码 // 方法一&#xff1a;直接用卡特兰数就行 // 方法二&#xff1a;递归方法 class Solution { public:int numTrees(int n) {// 这里把 i当成整个结点&#xff0c;j当成左子树最左侧结点,并一次当根节点尝试// f[ i ] f[ j - 1…

《昇思25天学习打卡营第19天 | 昇思MindSporeDiffusion扩散模型》

19天 本节学了Diffusion扩散模型相关知识&#xff0c;并且通过实例完成扩散模型。Diffusion是从纯噪声开始通过一个神经网络学习逐步去噪&#xff0c;最终得到一个实际图像。 1.Diffusion对于图像的处理包括以下两个过程&#xff1a; 1.1我们选择的固定&#xff08;或预定义&…

Is ChatGPT a Good Personality Recognizer? A Preliminary Study?

ChatGPT是一个很好的人格识别者吗&#xff1f;初步调研 摘要1 介绍2 背景和相关工作3 实验3.1 数据集3.2 提示策略3.3 基线3.4 评估指标3.5 实现细节3.6 Overall Performance (RQ1)3.7 ChatGPT在人格识别上的公平性 (RQ2)3.8 ChatGPT对下游任务的人格识别能力&#xff08;RQ3&a…

python-求s=a+aa+aaa+aaaa+aa...a的值(赛氪OJ)

[题目描述] 求 saaaaaaaaaaaa...a 的值&#xff0c;其中 a 是一个一位的整数。 例如 &#xff1a;2222222222222222(此时共有 5 个数相加)。输入格式&#xff1a; 整数 a 和 n &#xff08; n 个数相加&#xff09;。输出格式&#xff1a; s 的值。样例输入 2 2样例输出 24数据…

操作系统精选题(四)(论述题)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;操作系统 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 一、银行家算法的一道例题 二、页…

Stateflow快速入门系列(七): 使用时序逻辑调度图动作

要定义 Stateflow 图在仿真时间的行为&#xff0c;请在图的状态和转移动作中包含时序逻辑运算符。时序逻辑运算符是内置函数&#xff0c;告知状态保持激活的时间长度或布尔条件保持为 true 的时间长度。使用时序逻辑&#xff0c;您可以控制以下各项的时序&#xff1a; 各状态之…

守护矿山安全生产:AI视频分析技术在煤矿领域的应用

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;其在煤矿行业的应用也日益广泛。AI视频智能分析技术作为其中的重要分支&#xff0c;为煤矿的安全生产、过程监测、效率提升和监管决策等提供了有力支持。 一、煤矿AI视频智能分析技术的概述 视频智慧煤矿AI…