当前位置: 首页 > news >正文

SpringBoot3笔记

简介:

springboot整合了springframework,整合了许多配置,让我们能够快速创建一个以springframework为基础的项目。

问题:

到目前为止,你已经学习了多种配置Spring程序的方式。但是无论使用XML、注解、Java配置类还是他们的混合用法,你都会觉得配置文件过于复杂和繁琐,让人头疼!

解决:

SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring),大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术

SpringBoot总结:简化开发,简化配置,简化整合,简化部署,简化监控,简化运维

快速入门

父工程的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>

        <!-- springboot(将springboot提供的基础包做父工程) -->

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-parent</artifactId>

            <version>3.0.5</version>

    </parent>

    <groupId>com.atguigu</groupId>

    <artifactId>springboot-base-quick-01</artifactId>

    <version>1.0-SNAPSHOT</version>

    <!-- 导入对应的启动器 -->

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

    </dependencies>

</project>

启动类

/**

 * 创建一个启动类

 * 步骤:

 * 在该类上加上@SpringBootApplication代表此类是启动类

 *                该注解的作用:

 *                ①代表此类事配置类,

 *                ②自动加载配置 @EnableAutoConfiguration 自动加载其他配置类

 *                ③@ComponentScan 默认会扫描当前包/子包的注解

 * 在方法中通过 SpringApplication调用run()方法,传入当前类.class与args

 *                作用:

 *                ①创建ioc容器

 *                ②启动内置的web服务

 *                当运行该类时,自动创建ioc容器,启动tomcat服务器软件

 * 只要在启动类相同的包或子包下加的注解就会被自动扫描

 */

@SpringBootApplication//启动类

public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class,args);//自动创建ioc容器,启动tomcat服务器软件

    }

}

总结:

1. 为什么依赖不需要写版本?

    - 每个boot项目都有一个父项目`spring-boot-starter-parent`

    - parent的父项目是`spring-boot-dependencies`

    - 父项目 **版本仲裁中心**,把所有常见的jar的依赖版本都声明好了。

    - 比如:`mysql-connector-j`

在父工程中已经做了依赖管理,所以在导入依赖时就不需要写版本了。

2 启动器(starter)是什么?(整合web开发需要的所有依赖)

(我们的项目需要许多依赖web,servlet jackson等等,启动器会帮我们自动导好)

Spring Boot提供了一种叫做Starter的概念,它是一组预定义的依赖项集合,旨在简化Spring应用程序的配置和构建过程。Starter包含了一组相关的依赖项,以便在启动应用程序时自动引入所需的库、配置和功能。

主要作用如下:

1. 简化依赖管理

2. 自动配置

3. 提供约定优于配置

4. 快速启动和开发应用程序

5. 模块化和可扩展性

3 @SpringbootApplication的作用

@SpringBootApplication添加到启动类上,是一个组合注解,他的功效有具体的子注解实现!

@SpringBootApplication注解是Spring Boot框架中的核心注解,它的主要作用是简化和加速Spring Boot应用程序的配置和启动过程。

具体而言,@SpringBootApplication注解起到以下几个主要作用:

1. 自动配置:@SpringBootApplication注解包含了@EnableAutoConfiguration注解,

2. 组件扫描:@SpringBootApplication注解包含了@ComponentScan注解

3. 声明配置类:@SpringBootApplication注解本身就是一个组合注解,它包含了@Configuration注解

总的来说,@SpringBootApplication注解的主要作用是简化Spring Boot应用程序的配置和启动过程。它自动配置应用程序、扫描并加载组件,并将配置和启动类合二为一,简化了开发者的工作量,提高了开发效率。

统一配置管理  

 application.properties(统一文件):

 所有的配置文件都统一写在一个文件中,该文件的名称为application.properties或application.yml,且该文件必须放在src/main/resources目录下这是因为src/main/resources目录是Spring Boot默认的类路径(classpath),配置文件会被自动加载并可供应用程序访问。

注意:

①固定的key配置一些参数

②自定义key

代码举例:

application.properties文件:

#使用springboot提供的配置,修修改程序的参数,注意:key是固定的

server.servlet.context-path=/boot

#自定义配置

#如何读取引用配置文件:直接在controller类中声明接收该值的属性,然后用@value为其赋值即可

lq.name=刘清

lq.age=19

读取:

controller类

    @Value("${lq.name}")

    private String name;

    @Value("${lq.age}")

    private int age;

application.yaml配置介绍和使用

properties方式

web 设置服务器的端口号 项目根路径

key=value

出现的问题:

因为要为所有框架提供配置参数的位置,又要保证key不重复,所以key就会特别长-----------一般不推荐使用

推荐使用以.yml或.yaml结尾的application文件

yaml方式

#yaml是层次,可以继承的配置文件格式

#例如:

server:

  port: 8080

  servlet:

    context-path: /boot

lq:

  info:

    age;18 #注意:key:空格value

#集合配置

  gfs:

    - 高圆圆

    - 范冰冰

    - 二狗子

#yaml语法:

#  1. 数据结构用树形结构呈现,通过缩进来表示层级,

#  2. 连续的项目(集合)通过减号 ” - ” 来表示

#  3. 键值结构里面的key/value对用冒号 ” : ” 来分隔。

#  4. YAML配置文件的扩展名是yaml 或 yml

读取配置文件

读取方式和properties一致

#YAML格式相对于:properties文件具有更好的层次结构表示、自我描述性、注释支持、多行文本表示、复杂数据类型支持和更好的可读性。

批量配置文件读取

/**

 lq:

 info:

 password:123456   #注意:key:空格value

 username:liuqing

 gfs:

 - 高圆圆

 - 范冰冰

 - a

 - b

 * 读取配置文件的

 *   方式一:使用@value注解

 *     直接在属性上添加,注意:@value是为组件属性赋值的,所以该类一定要加入ioc容器

 *     ①@Value(key必须写全了)

 *     ②@Value只能读取单个值

 *   方式二:批量读取

 *   在实体类上添加一个@ConfigurationProperties(prefix = "lq.info")里面填通用的前缀

 *   优势:方便不用一个一个读取

 *              ②可以给集合类型赋值

 */

@Component

@Data

@ConfigurationProperties(prefix = "lq.info")

public class User {

    private String password;

    private String username;

    private List<String> gfs;

}

多环境配置与激活 

1. 属性文件分离:将应用程序的配置参数分离到不同的属性文件中,每个环境对应一个属性文件。例如,可以创建`application-dev.properties``application-prod.properties``application-test.properties`等文件。在这些文件中,可以定义各自环境的配置参数,如数据库连接信息、端口号等。然后,`application.properties`中通过`spring.profiles.active`属性指定当前使用的环境。Spring Boot会根据该属性来加载对应环境的属性文件,覆盖默认的配置。

2. YAML配置文件:与属性文件类似,可以将配置参数分离到不同的YAML文件中,每个环境对应一个文件。例如,可以创建`application-dev.yml`、`application-prod.yml`和`application-test.yml`等文件。在这些文件中,可以使用YAML语法定义各自环境的配置参数。同样,通过`spring.profiles.active`属性指定当前的环境,Spring Boot会加载相应的YAML文件。

例如:

其他文件名---------application-key.yml

application-dev.yml(开发)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///dev

      username: root

      password: root

application-test.yml(测试)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///test

      username: root

      password: root

application-prod.yml(生产)

spring:

  jdbc:

    datasource:

      driverClassName: com.mysql.cj.jdbc.Driver

      url: jdbc:mysql:///prod

      username: root

      password: root

环境激活

spring:

  profiles:

    active: dev(填的是文件名中的key)

注意;

如果设置了spring.profiles.active,并且和application有重叠属性,以active设置优先。

如果设置了spring.profiles.active,和application无重叠属性,application设置依然生效!

springmvc整合与配置

web相关配置

1.`server.port`: 指定应用程序的HTTP服务器端口号。

2. `server.servlet.context-path`: 设置应用程序的上下文路径。这是应用程序在URL中的基本路径。默认情况下,上下文路径为空。

3. `spring.mvc.view.prefix`和`spring.mvc.view.suffix`: 这两个属性用于配置视图解析器的前缀和后缀

4. `spring.resources.static-locations`: 配置静态资源的位置。默认情况下,Spring Boot会将静态资源放在classpath:/static目录下(故而一般不用配置)

5. `spring.http.encoding.charset`和`spring.http.encoding.enabled`: 这两个属性用于配置HTTP请求和响应的字符编码。

例如:

#springmvc相关的配置

#一般在server下设置

server:

  port: 80  #设置端口号,默认是8080

  servlet:

    context-path: /boot #设置项目根路径

spring:

  mvc:

    view: #视图解析器配置

      prefix: /WEB-INF/views/  #前缀名

      suffix: .jsp  #后缀名

  web:

    resources:

      static-locations: classpath:/webapp  #配置静态资源文件夹

      #一旦配置了,那么默认的静态资源文件夹就无法访问了

      #外部访问金泰资源的时候无需写静态资源文件夹(直接写文件名即可,要带上后缀)

静态资源处理:

在springboot中就定义了静态资源的默认查找路径

默认的静态资源路径为:

* *· classpath:/META-INF/resources/**

**· classpath:/resources/**

**· classpath:/static/**

**· classpath:/public/**

我们只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。 我们习惯会把静态资源放在classpath:/static/ 目录下。在resources目录下创建index.html文件

springbootspringmvc中的东西还是正常使用

springmvc的整合还是创建一个配置类实现WebMvcConfigurer

拦截器,全局异常类像之前一样创建;

druid池与兼容性处理

所需要导入的依赖:

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

所配置的信息:application.yaml文件

spring:

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource  #使用druid连接池

#    username: 账号

#    password: 密码  #如果是springboot2整合druid连接池,可使用此信息配置账号和密码,springboot3不行

      # Druid的其他属性配置 springboot3整合情况下,数据库连接信息必须在Druid属性下!

    druid:

        url: jdbc:mysql://localhost:3306/day01

        username: root

        password: root

        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

测试代码

需求:查询t_emp表中的所有数据

实体类:Employee略

controller

@Controller

@ResponseBody

@RequestMapping("emp")

public class EmployeeController {

    @Autowired

    private JdbcTemplate jdbcTemplate;

    @GetMapping("list")

    public List<Employee> list(){

        //数据库

        String sql="select * from t_emp";

        List<Employee> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));

        return query;

    }

}

出现问题:

通过源码分析,druid-spring-boot-3-starter目前最新版本是1.2.18,虽然适配了SpringBoot3,但缺少自动装配的配置文件,

解决

需要手动在resources目录下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件内容如下!

                    com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure

mybatis整合与配置

mybatis整合步骤:

1. 导入依赖:在您的Spring Boot项目的构建文件(如pom.xml)中添加MyBatis和数据库驱动的相关依赖。例如,如果使用MySQL数据库,您需要添加MyBatis和MySQL驱动的依赖。

2. 配置数据源:在`application.properties`或`application.yml`中配置数据库连接信息,包括数据库URL、用户名、密码、mybatis的功能配置等。

3. 创建实体类:创建与数据库表对应的实体类。

4. 创建Mapper接口:创建与数据库表交互的Mapper接口。

5. 创建Mapper接口SQL实现: 可以使用mapperxml文件或者注解方式

6. 创建程序启动类

7. 注解扫描:在Spring Boot的主应用类上添加`@MapperScan`注解,用于扫描和注册Mapper接口

8. 使用Mapper接口:在需要使用数据库操作的地方,通过依赖注入或直接实例化Mapper接口,并调用其中的方法进行数据库操作。

为什么此时的mapper接口与mapper.xml文件的包结构可以不一样:

之前是批量扫描,按照包去找对应的mapper接口与mapper.xml文件

在springboot场景下会分开配,会在配置文件中指定mapper.xml文件的配置;而接口的位置,会在启动类上用注解扫描。

代码举例:

Application.xml文件

server:

  address: 0.0.0.0  # 允许所有IP访问

# druid连接池

spring:

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource

    druid:

      url: jdbc:mysql://localhost:3306/mybatis-example

      username: root

      password: abc123LQ

      driver-class-name: com.mysql.cj.jdbc.Driver

#mybatis-彻底抛弃了mybatis-config.xml文件

#mapperxml文件的配置    setting的配置     别名的设置

mybatis:

  mapper-locations: classpath:/mappers/*.xml  #指定mapper.xml文件的位置

  type-aliases-package: com.atguigu.pojo  #给类起别名的设置

  configuration:

    map-underscore-to-camel-case: true  #开启驼峰式

    auto-mapping-behavior: full   #自动字段映射

    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl  #日志输出

实体类Employee:略

Mapper.xml文件(EmployeeMapper.xml):lue

Controller(EmployeeController类):略

启动类

@SpringBootApplication

@MapperScan("com.atguigu.mapper") //指定mapper接口所在的位置,会自动将所有mapper接口的代理对象放到ioc容器

public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class,args);

        System.out.println("hello world!");

    }

}

aop与tx整合

tx整合:

原来:

     * 给方法添加事务的操作

     *        0 导入JDBC的依赖

     *        1 选定我们需要的事务管理器的实现类,在配置类中创建该类的对象,使用注解的方法将该类添加到ioc

     *                         注意:该组件需要引入连接池的组件

     *        2 在配置类上加上 @EnableTransactionManagement 表示开启事务注解

     *        3 在我们想要添加事务的方法上加上 @Transactional那么该方法就有事务了

 

现在(使用spring-boot后):

因为添加了jbdc的依赖;而SpringBoot项目会自动配置一个 DataSourceTransactionManager,

所以我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了,

也不需要在配置类加@EnableTransactionManagement//开启事务注解的支持

     * 给方法添加事务的操作

     *        0 导入JDBC的依赖   

     *        1 选定我们需要的事务管理器的实现类,在配置类中创建该类的对象,使用注解的方法将该类添加到ioc(可以省略)

     *                         注意:该组件需要引入连接池的组件

     *        2 在配置类上加上 @EnableTransactionManagement 表示开启事务注解(可以省略)

     *        3 在我们想要添加事务的方法上加上 @Transactional那么该方法就有事务了

实现代码:

service

@Service

public class EmployeeService {

    @Autowired

    private EmployeeMapper employeeMapper;

    @Transactional

    public void delete( ){

        int rows=employeeMapper.delete(1);

        System.out.println("rows = " + rows);

        int i=1/0;

    }

}

controller

@Controller

@ResponseBody

@RequestMapping("/emp")

public class EmployeeController {

    @Autowired

    private EmployeeMapper employeeMapper;

    @Autowired

    private EmployeeService employeeService;

    @GetMapping

    public List<Employee> query(){

        employeeService.delete();

        return null;

    }

}

aop整合:

原来:

定义一个增强类(该类要加入ioc),在该类中定义一些方法(通知用@Before/@After…修饰),在用切点表达式指明改通知要作用在那些方法上(execution))

现在:

只需要导入依赖;然后直接使用aop注解即可。

不用在配置类添加@EnableAspectJAutoProxy//开启aspectj注解

代码举例:

@Component

@Aspect

public class LogAdvice {

    @Before("execution(* com..service.*.*(..))")

    public void before(JoinPoint point){

        String simpleName = point.getTarget().getClass().getSimpleName();

        String name = point.getSignature().getName();

        System.out.println("name = " + name);

        System.out.println("simpleName = " + simpleName);

    }

}

直接测试:成功

Springboot3项目打包和运行

添加打包插件:

> 在Spring Boot项目中添加`spring-boot-maven-plugin`插件是为了支持将项目打包成可执行的可运行jar包。如果不添加`spring-boot-maven-plugin`插件配置,使用常规的`java -jar`命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行。

<!--    SpringBoot应用打包插件-->

<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

    </plugins>

</build>

执行打包:

Clean-package

 

相关文章:

  • C++中如何比较两个字符串的大小--compare()函数实现
  • 空对象模式(Null Object Pattern)在C#中的实现详解
  • 【区块链+ 人才服务】北京师范大学区块链底层链平台 | FISCO BCOS 应用案例
  • 2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
  • PyTorch 学习笔记
  • C#实现实时读取西门子PLC数据,并存到Redis数据库中
  • Scala 异常处理
  • 如何高效生成达梦数据库测试数据?官方管理工具来了!
  • 蓝桥杯 2. 开赛主题曲【算法赛】
  • 基于AI设计开发出来的业务系统是什么样的?没有菜单?没有表格?
  • Winform零基础从入门到精通(13)——WinForm综合项目开发
  • 练习(含指针数组与数组指针的学习)
  • Unity 实现伤害跳字
  • 使用 node.js 和 MongoDB 编写一个简单的增删改接口 demo
  • 李建忠:智能体正将互联网从信息网络重构为行动网络
  • 【Oracle篇】跨字符集迁移:基于数据泵的ZHS16GBK转AL32UTF8全流程迁移
  • 【鸿蒙HarmonyOS】如何实现网络请求
  • 【区块链+ 人才服务】区块链虚拟仿真教学平台 | FISCO BCOS 应用案例
  • Kafka 和 Flink的讲解
  • git 的常用指令
  • server 2012 iis 添加网站/网络平台推广方式
  • 做网站最下面写什么软件/bt磁力种子
  • 网站建设公司人员配备/seo的中文名是什么
  • 微信网站怎样做/业务员用什么软件找客户
  • 长沙专业网站建设公司排名/广告策划书
  • 西安住房和城乡建设部网站/重庆seo网络优化师