SpringBoot相关

SpringBoot

1. what

springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。

spring项目搭建的缺点:

  1. 配置麻烦
  2. 依赖繁多
  3. tomcat启动慢

2 .springboot的特点(why)

  • 自动配置

springboot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的

  • 起步依赖

起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能

简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

  • 辅助功能

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器tomcat、安全、指标,健康检测、外部配置等。

3. 搭建springboot的项目(how)

在这里插入图片描述

在这里插入图片描述

4. springboot常用的配置文件种类

springboot提供了两种配置文件。

  • 后缀为properties的文件
  • 后缀为yml的文件

不管是哪种,它们的前缀都是application

  1. yaml文件格式

    冒号后面有空格,空格后面才是自己要填写的值

    server:
      port: 8080
      servlet:
        context-path: /aaa
    
  2. properties文件格式

    spring.application.name=demo2
    
    spring.profiles.active=test
    student.name=lay
    student.age=18
    student.sex=man
    

如果上面两个文件同时存在,properties优先级高

5. springboot中java如何读取配置文件中的内容【重点】

我们习惯把一些自己的信息放入配置文件中,便于修改。比如OSS、支付等。我们还希望通过java代码能够读取到配置文件中自己的信息

springboot提供了两种方式用于读取springboot配置文件中信息的方式

  • 使用@ConfigurationProperties注解

使用在类上@ConfigurationProperties(prefix=“前缀”)

可以读取任意类型

在这里插入图片描述

  • Student类,将@ConfigurationProperties添加到实体类上
@ConfigurationProperties(prefix = "student")
@Component//为类创建spring,而且在创建时自动读取配置文件中前缀为student的属性
@Data
public class Student {
    //名称必须和配置文件中的名称一致
    private String name;
    private String age;
    private String sex;
}
  • Controller类
@RestController
public class StudentController {
    @Autowired
    private Student student;

    @GetMapping("/info")
    public Student info(){
        return student;
    }
}

结果返回student中各个属性中的具体值

在这里插入图片描述

  • 使用@Value注解

它只能读取基本类型和字符串类型

在这里插入图片描述

  • controller层,将@Value注解添加到具体属性上
@RestController
public class StudentController {

    @Value("${student.name}")
    private String xm;
    
    @GetMapping("/info")
    public String info(){
        return xm;
    }
}

结果仅返回student中的具体姓名

在这里插入图片描述

  • @Component注解

    标注一个类为Spring容器的Bean,把普通pojo实例化到Spring容器中,相当于配置文件中的<bean id=“” class=“”/>

  • @ConfigurationProperties注解

    允许开发者将外部的配置属性自动绑定到 JavaBean 对象上

6. profile多环境配置【重点】

我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都有修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的

  1. profile配置方式
    • 多profile文件方式
    • yml多文档方式
  2. profile激活方式
    • 配置文件
    • 命令行参数

我们需要针对不同的环境来创建不同的配置文件。使用profile来激活对应的配置文件

比如:

application-dev.properties  [开发环境的配置文件]
application-test.properties [测试环境的配置文件]
application-pro.properties [生产环境的配置文件]
------------------------------------------------
相同配置依然还是放在application.properties中
不同配置对应放置

在这里插入图片描述

如何激活对应的配置文件:两种方式

  • 在application配置文件中激活
#激活对应环境的配置文件
spring.profiles.active=pro
  • 部署时激活对应环境的配置
命令行参数:java –jar xxx.jar --spring.profiles.active=dev

7. springboot注册web组件

web组件表示的就是servlet,filter过滤器组件

回顾servlet组件步骤

  • 创建一个类并继承HttpServlet重写service方法
  • 注册到web.xml文件中
  • 创建一个类并继承HttpServlet重写service方法

    • 实例

      public class MyServlet extends HttpServlet {
      
          //重写父类中的方法.接受参数以及业务处理
          @Override
          public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
              System.out.println("代码~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
          }
      }
      

      在web.xml文件中注册该servlet,后续有简化方法,即在相应的类中添加注解

      @WebServlet注解

      参数:name:该servlet的name

      ​ urlPatterns:该servlet的路径

  • 在web.xml文件中注册servlet

    • 实例

      <!--注册servlet-->
          <servlet>
              <!--servlet的名称可以随便起-->
              <servlet-name>myServlet</servlet-name>
              <!--指定自定义的servlet路径-->
              <servlet-class>com.ykq.servlet.MyServlet</servlet-class>
          </servlet>
      
          <!--请求路径映射到该servlet-->
          <servlet-mapping>
              <!--保证该名称必须和上面注册的名称一致-->
              <servlet-name>myServlet</servlet-name>
              <!--路径,可以随意定义,但必须加/-->
              <url-pattern>/my</url-pattern>
          </servlet-mapping>
      

思考:在springboot中没有web.xml文件,如何注册servlet?

提供了一个配置类

创建一个Servlet

public class MyServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("~~~~~~~~~~~~~~~~");
    }
}

创建一个配置类

@Configuration
public class MyConfig {
    //注册servlet
    @Bean
    public ServletRegistrationBean myServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean<>();
        bean.setName("mys");
        bean.setServlet(new MyServlet());
        bean.addUrlMappings("/myServlet");
        return bean;
    }
}

回顾filter过滤器步骤

  1. 创建一个类并实现Filter接口,重写doFilter方法
  2. 注册到web.xml文件中
  • 创建一个类并实现Filter接口,重写方法
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //初始化过滤器-只有一次
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //过滤规则
        System.out.println("====过滤器====");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("===过滤器放行了===");
    }

    @Override
    public void destroy() {
        //销毁过滤器-浏览器或服务器关闭时
    }
}
  • 在web.xml文件中注册
<!--注册过滤器-->
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.ykq.filter.MyFilter</filter-class>
    </filter>
    <!--过滤规则-->
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <!--
           /*:表示拦截所有的请求
           /views/*: 只拦截包含views/资源
           /*.do: 拦截请求后缀未.do资源
        -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

spring如何注册filter,同注册servlet同理

创建一个filter

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("经过了过滤器");
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

创建一个配置类

@Configuration
public class MyConfig {
    //注册过滤器
    @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean filter=new FilterRegistrationBean();
        filter.setName("my");
        filter.setFilter(new MyFilter());
        filter.addUrlPatterns("/bn");
        return filter;
    }
}

@Configuration注解

是Spring的注解。

作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象

用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

8. springboot包扫描的原理

ssm项目必须加包扫描,而现在springboot没有写包扫描了

自动扫描主类所在的包

因为自带了包扫描的功能,核心在主类的注解@SpringBootApplication上,它是一个复合注解

里面包含@EnableAutoConfiguration开启自动配置

上述注解里面包含注解@AutoConfigurationPackage

上述注解里面包含注解@Import({AutoConfigurationPackages.Registrar.class}),需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描

如果我们不想让它扫描主类所在的包,我们可以使用@ComponentScan(basePackages={“”}来指定自己的包

在这里插入图片描述

通过@ComponentScan注解指定扫描自己的包,默认的包扫描消失

9. springboot的自动装配原理

我们原来的ssm项目,都需要加载前端控制器DispatcherServlet,而现在的springboot并没有加载DispatcherServlet。springboot具备自动装配的功能

springboot启动时,加载了使用@SpringBootApplication注解的类

该注解是一个复合注解,包含了@EnableAutoConfiguration注解,该注解开启了自动装配功能,该注解也是一个复合注解。

里面包含@Import({AutoConfigurationImportSelector.class}),导入AutoConfigurationImportSelector,该类自动装配选择器类,该类会自动加载很多自动装配。每个自动装配都会完成对应的自动装配功能。

在这里插入图片描述

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

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

相关文章

【学术会议征稿】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024)

第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09;将于…

SAP 物料批量执行MD02代码分享

通常我们在运行MRP的时候要么就是跑MD01整个工厂层级的,要么就是单个物料层级的MRP用MD02去单个物料去执行。 HANA后有了MRPLIVE,可以支持多物料的运行MRP,但是无法控制MRP的运行参数,根据采购类型跑出对应的单据,F跑出的采购申请,E跑出的是计划订单。 需求是要可以批量运…

网上下载的视频怎么转成mp4格式?教你一招轻松解决

网上拥有许多的视频资源&#xff0c;动漫&#xff0c;短视频&#xff0c;影视等等都层出不穷&#xff0c;很多小伙伴都会把一些视频进行下载下来&#xff0c;不过下载下来的视频都不是MP4格式的&#xff0c;在兼容性方面会比较的麻烦&#xff0c;会有播放器不支持的情况&#x…

SpringBoot新手快速入门系列教程十:基于Docker Compose,部署一个简单的项目

前述&#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤&#xff0c;如果您对docker不太熟悉请参考我的上一个教程&#xff1a;SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff0c;部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…

Elon Musk开源Grok

转载自&#xff1a;AILab基地 早在6天前&#xff0c;马斯克就发文称xAI将开源Grok 图片 13小时前&#xff0c;马斯克开源了旗下公司X的Grok训练模型&#xff0c;并喊话OpenAI&#xff0c;你名字里的Open到底在哪里 图片 下面是xai-org的GitHub开源地址[https://github.com/x…

shein测试开发会问些啥?

&#x1f3c6;本文收录于《CSDN问答解惑-》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

【大模型搭建】部署Ollama,pull失败,手动构建方案

Ollama 是一个专注于简化大规模机器学习模型开发的框架。它提供了一系列工具来帮助开发者轻松地定义、训练和部署大型语言模型。 优点&#xff1a; • 提供了简洁的API&#xff0c;易于上手。 • 支持多种硬件加速选项&#xff0c;如GPU和TPU。 • 内置了许多预训练模型&#x…

常见点云处理总结汇总

点云处理是一系列操作和技术&#xff0c;用于分析和处理三维点云数据&#xff0c;以提取有用的信息并生成可视化结果。以下是常见的点云处理方法及其简要说明&#xff1a; 1. 点云预处理 滤波&#xff1a;去除噪声和无效点&#xff0c;如使用统计滤波、半径滤波等。下采样&a…

IDEA自动生成测试类以及测试方法(JUnit测试工具)

IDEA自动生成测试类以及测试方法 (1) 光标移至需要生成测试类的类后面&#xff0c;右击 Go To → Test, 或者直接使用快捷键 Ctrl Shift T 。 &#xff08;2&#xff09;点击 Create New Test &#xff08;3&#xff09;设置测试库和测试方法&#xff0c;点击 OK &#xff…

赋能 Web3 与 AI 的未来,TARS 协议如何重塑去中心化生态?

TARS 协议如何在 Web3 生态中引领 AI 技术的变革&#xff1f;作为新兴的模块化 AI 平台&#xff0c;TARS 通过整合先进的 AI 模型和区块链技术&#xff0c;为用户提供了更加智能、安全和高效的解决方案。让我们一起回顾第 16 期 TinTinAMA 的精彩内容吧&#xff01; 在 TinTinL…

一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆

文 | AUTO芯球 作者 | 雷慢 万万没想到&#xff0c;懂车帝夏测运动会杀出一匹最大的黑马&#xff0c;竟然是极越01。 当前正在进行的懂车帝夏测运动会&#xff0c;在“纯电SUV/MPV续航达成率”赛事中&#xff0c;极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…

WebRTC批量发送消息API接口的特性有哪些?

WebRTC批量发送消息api接口怎么样&#xff1f;接口性能怎么用&#xff1f; WebRTC技术允许浏览器和移动应用进行实时通信。通过WebRTC&#xff0c;开发者可以构建视频、语音、数据共享等应用。AokSend将重点探讨WebRTC批量发送消息API接口的特性。 WebRTC批量发送消息API接口…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

静态时序分析:Leaf Cell(叶单元)

相关阅读​​​​​​​静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 在DC中&#xff0c;leaf cell&#xff08;叶单元&#xff09;有时会出现在描述中&#xff0c;例如set_input_delay的-reference_pin选项的参数&#xff0c;就必须是一个端口或…

元组列表之案例

1.列表推导式 基本语法&#xff1a; [表达式 for语句1 if 语句1 for语句2 if语句2 ........ ] 1.零到九的平方列表 a [i*i for i in range(10)] print(a) 2.for 循环前面加if else #如果是偶数乘以2&#xff0c;如果是奇数直接输出 a [i*2 if i%2 0 else i for i in ran…

windows下安装和使用nacos

概述 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发 现、服务配置、服务元数据及流且管理 Nacos官方文档&#xff1a;https://nacos.io/zh-cn/docs/quick-start.html Nacos下载地址&#xff1a;https://n…

入门PHP就来我这(高级)24 ~ Session判断用户登录

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 上一篇我们介绍了Session管理部分的概念&#xff0c;本文通过session来改写一些用户登录&…

Unity发布webgl之后修改StreamingAssets 内的配置文件读取到的还是之前的配置文件的解决方案

问题描述 unity发布webgl之后&#xff0c;修改在StreamingAssets 中的配置信息&#xff0c;修改之后读取的还是之前的配置信息 读取配置文件的代码IEnumerator IE_WebGL_LoadWebSocketServerCopnfig(){var uri new System.Uri(Path.Combine(Application.streamingAssetsPath…

和鲸101计划夏令营火热进行中!北中医助阵医学数据探索

上周&#xff0c;和鲸社区 2024 夏令营已经正式开营&#xff01; 从 2021 年开始&#xff0c;和鲸社区在每年暑假期间都会为大家提供集中化、系统化的数据科学相关的技能实践和培训&#xff0c;每年都有几千名同学借此机会积累宝贵的实战经验&#xff0c;丰富个人简历作品&…

新质生产力赛道核心解读,机械制造何以“向智向新”

机械行业&#xff0c;国民经济的坚实基石与核心驱动力&#xff0c;为各行各业提供高效生产工具。立于产业链的中游&#xff0c;向上游紧密连接着高精尖的核心零部件制造商与基础原材料供应商&#xff1b;向下游&#xff0c;则广泛渗透并深刻影响着基础设施建设、交通运输&#…