08、SpringBoot入门简介

news2024/11/15 19:23:45

1、简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

人们把 Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的 Spring 项目,并且尽可能的减少一切 XML 配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

2、优点

  • 创建独立运行的Spring应用程序
  • 可嵌入Tomcat,无需部署war文件
  • 简化maven配置
  • 自动配置Spring
  • 提供生产就绪型功能,如:日志,健康检查和外部配置等;
  • 不要求配置 XML;
  • 非常容易和第三方框架集成起来。

3、缺点

  • 版本更新快,可能出现较大的变化
  • 因为约定大于配置,所以经常会出现一些很难解决就的问题。

4、使用IDEA创建SpringBoot工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、初始化项目分析

1、spring-boot-starter-parent

Spring Boot 提供了一个名为 spring-boot-starter-parent 的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

  • parent 项目中的 dependencyManagement 里的声明的依赖,只具有声明的作用,并不实现引入,因此子项目需要显式的声明需要用的依赖。
  • 如果子项目想要使用夫项目的依赖必须进行声明,否则不会继承下来。
  • 只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且 version 和 scope 都读取自父 pom;另外若子项目中指定了版本号,那么会使用子项目中指定的 jar 版本。

2、Spring Boot Starter

Spring Boot 非常优秀的地方在于提供了非常多以 spring-boot-starter-* 开头的开箱即用的 starter 启动器。

  • 官方常见的有一下几种:
  • spring-boot-starter:核心启动器,提供了自动配置,日志和 YAML 配置支持。
  • spring-boot-starter-aop:支持使用 Spring AOPAspectJ 进行切面编程。
  • spring-boot-starter-freemarker:支持使用 FreeMarker 视图构建 Web 应用。
  • spring-boot-starter-test:支持使用 JUnit,测试 Spring Boot 应用。
  • spring-boot-starter-web:支持使用 Spring MVC 构建 Web 应用,包括 RESTful 应用,使用 Tomcat 作为默认的嵌入式容器。
  • spring-boot-starter-actuator:支持使用 Spring Boot Actuator 提供生产级别的应用程序监控和管理功能。
  • spring-boot-starter-logging:提供了对日志的支持,默认使用 Logback。

3、Web 启动器

这是 SpringBoot 提供的 Web 启动器,是一个快速集成 Web 模块的工具包,包含 Spring MVC,Jackson 相关的依赖,以及嵌入了 Tomcat9 服务器,默认端口 8080。

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

4、打包插件

<!-- pom.xml 中添加插件 -->
<build>
    <plugins>
        <!-- Spring Boot 打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

6、SpringBoot参数配置

1、application.properties语法

// 修改端口号
server.port=80
// 设置session的失效时间
server.session-timeout=30
// 设置tomcat的字符集
server.tomcat.uri-encoding=UTF-8
// 设置数据库相关
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/rbac
spring.datasource.username=root 
spring.datasource.password=admin

2、application.yml 语法

server:  
  port: 80
  session-timeout: 30  
  tomcat.uri-encoding: UTF-8  
  
spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/crm  
    username: root  
    password: admin  
    driverClassName: com.mysql.jdbc.Driver

3、配置优先级

一个项目中可以有多个配置文件存放在不同目录中,此时他们会遵循固定的优先级来处理有冲突的属性配置,优先级由高到底,高优先级的配置会覆盖低优先级的配置。
由高到低的配置如下:

  • 项目/config/application.properties
  • 项目/application.properties
  • classpath:config/application.properties
  • classpath:application.properties

7、参数绑定

1、参数配置在自定义的 properties

# db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/rbac
jdbc.username=root
jdbc.password=admin

2、xml方式加载

<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>

3、使用JavaConfig配置

/**
 *  @PropertySource:把属性配置加载到 Spring 的环境对象中
 *  @Value:从 Spring 环境对象中根据 key 读取 value
 */
@Configuration
@PropertySource("classpath:db.properties")
public class JavaConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public MyDataSource dataSource() {
        MyDataSource dataSource = new MyDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

4、参数配置在 application.properties

1、准备好 application.properties 和一个类 MyDataSource

# application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/crm
jdbc.username=root
jdbc.password=admin
@Data
public class MyDataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}

2、@Value 绑定单个属性

  • 在自定义类上绑定
@Component
@Data
public class MyDataSource {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
}
  • 配置类
@Configuration 
@ComponentScan("上面类所在的包路径")
public class JavaConfig { }

3、@ConfigurationProperties 绑定对象属性

若觉得上面的方式比较笨重,可以把前缀编写到 @ConfigurationProperties 属性上,并且设置类属性与需要绑定的参数名相同,可实现自动绑定,但是注意,若是使用测试类加载贴有 @Configuration 的配置类,则需要在配置类中添加 @EnableConfigurationProperties 注解;若是使用测试类加载贴有 @SpringBootApplication 的配置类,则不需要。

@Component
@ToString
@Setter
@ConfigurationProperties(prefix="jdbc")
public class MyDataSource {
    private String driverClassName;
    private String url;
    private String username;
    private String password;
}


@Bean
@ConfigurationProperties("jdbc")
public MyDataSource dataSource() {
    return new MyDataSource();
}

4、使用 Spring 的 Environment 对象绑定属性

@Configuration
@PropertySource("classpath:db.properties")
public class JavaConfig {
    /**
     * environment:表示 Spring 的环境对象,该对象包含了加载的属性数据
     * 可以获取到 application.properties 里面的参数,也可以获取到 @PropertySource 中的参数
     * 但 application.properties 的优先级比 @PropertySource 高
     */
    @Autowired
    private Environment environment;

    @Bean
    public MyDataSource dataSource() {
        MyDataSource dataSource = new MyDataSource();
        dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getProperty("jdbc.url"));
        dataSource.setUsername(environment.getProperty("jdbc.username"));
        dataSource.setPassword(environment.getProperty("jdbc.password"));
        return dataSource;
    }
}

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

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

相关文章

我用Echarts图表分析巴西队历年战绩,预测卡塔尔世界杯能否夺冠

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

baostock量化怎样下载十档行情数据?

baostock量化对数据的下载其实就是通过计算的方式去决策股票的买卖。目前根据量化计算方式其实跟量子计算一点关系都没有。那么&#xff0c;都说在股票量化交易过程中&#xff0c;可以利用l2股票接口来获取策略选股的方案是很普遍的&#xff0c;利用数据接口下载十档行情&#…

[附源码]Python计算机毕业设计SSM基于协同过滤算法的甜品推荐系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Echart柱状图表排名

var charts { // 按顺序排列从大到小 cityList: [38号点, 8号点, 15号点, 16号点, 24号点], cityData: [7500, 6200, 5700, 4200, 3500] } var top10CityList charts.cityList var top10CityData charts.cityData var color [#ff9500, #02d8f9, #027fff] var color…

CAS:1351272-41-7;[1-(4-乙烯基苯基)-1,2,2-三苯基]乙烯;AIE材料

中文名称:[1-(4-乙烯基苯基)-1,2,2-三苯基]乙烯 英文名称:(2-(4-vinylphenyl)ethene-1,1,2-triyl)tribenzene CAS:1351272-41-7 分子式:C28H22 分子量:358.47 沸点:460.445.0 C(Predicted) 密度:1.0810.06 g/cm3(Predicted) 用途:仅用于科研,不用于人体 提供提下定制合成…

算法 KECP 被顶会 EMNLP 收录,极少训练数据就能实现机器阅读理解

作者&#xff1a;王嘉宁、汪诚愚、邱明辉、石秋慧、王洪彬、黄俊、高明 近日&#xff0c;阿里云机器学习平台 PAI 与华东师范大学高明教授团队合作在自然语言处理顶级会议 EMNLP2022 上发表基于 Prompt-Tuning 的小样本机器阅读理解算法 KECP&#xff08;Knowledge Enhanced C…

【人工智能】体验一下ChatGPT

体验一下ChatGPT 1.体验地址 chatGPT 注册openai的账号 注意:如果注册过程中一直不成功,可以清清缓存 2.接受短信的手机号 得有个国外手机号&#xff0c;或者1块钱去sms-activate.org注册一个虚拟的手机号 3.功能 最近OpenAI 发布了备受期待的原型通用 ChatGPT&#xf…

一段eslint jsx-a11y/anchor-is-valid警告背后的原因

我们在做React项目时&#xff0c;经常用到a标签做一些跳转动作&#xff0c;但是每次eslint都要提示 jsx-a11y/anchor-is-valid这段代码&#xff0c;我们可以通过/* eslint-disable jsx-a11y/anchor-is-valid */把这个规则屏蔽掉&#xff0c;但是显然不够优化&#xff0c;那到底…

8_2、Java基本语法之多线程的两种创建方式(jdk5之前)

一、前言 Java语言的JVM允许程序运行多个线程&#xff0c;它通过java.lang.Thread 类来体现。 二、JDK1.5之前创建新执行线程有两种方法 继承Thread类的方式 实现Runnable接口的方式 三、继承Thread类的方式 1、使用继承Thread类的方式创建一个线程&#xff1a; ①.创建一个…

c++17可变参函数模板详解

c语言中对于 可变参数的处理是用va_list等一系列宏去做的 他只会生成一个函数 但是理解起来非常麻烦 因为你不得不去了解很多关于汇编层面栈帧的知识 c对于可变参数函数模板进行了改进 他会生成多个函数 而不是在一个函数里玩 个人觉得c这种方式更加先进而且更好理解 接下来让…

线性代数的本质

注&#xff1a;目前没有精力去美化排版&#xff0c;所有博客仅作为自己学习记录所用 《线性代数的本质》课程链接&#xff08;bilibili&#xff09; 目录&#xff1a; P1-P4的内容&#xff1a; 1.线性代数的加法&#xff1a;为什么这样子来定义呢&#xff08;如图&#xff…

(附源码)SSM人力资源管理系统 毕业设计 271621

SSM人力资源管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#…

Servlet(二):Servlet的运行原理HttpServlet、HttpServletRequest、HttpServletResponse类详解

Servlet运行原理Servlet API详解HttpServlet类HttpServletRequest类HttpServletResponse类Servlet API详解 Servlet API中包含了很多的内容&#xff0c;但我们主要用到的是以下三个类&#xff0c;HttpServlet&#xff0c;HttpServletRequest&#xff0c;HttpServletResponse …

2022-04-10-Docker

layout: post #标题配置 title: Docker #时间配置 date: 2022-04-10 22:50:00 0800 #目录配置 categories: Docker #标签配置 tag: 学习笔记 content {:toc} Docker 1.初识 Docker 1.1 docker概念 我们写的代码会接触到好几个环境&#xff1a;开发环境、测试环境以及生产环…

祖师爷香农,到底有多神?

1916年&#xff0c;第一次世界大战激战正酣。在这一年的4月30日&#xff0c;远离战场的美国密歇根州佩托斯基&#xff08;Petoskey&#xff09;&#xff0c;一个男婴呱呱坠地。这个男婴&#xff0c;就是我们这篇文章的主角——香农。香农的全名&#xff0c;叫做克劳德艾尔伍德香…

Alvas.Audio专门为C#和VB.Net程序员设计

Alvas.Audio专门为C#和VB.Net程序员设计 Alvas.Audio库使C#和VB.Net程序员能够创建执行(包括混合声音信息)、捕获、转换和编辑音频的应用程序。 Alvas.Audio音频是C#音乐库。Web程序员。 这使您能够生产。NET程序&#xff0c;例如Winforms/WPF/Windows服务/控制台录音机、Inter…

steam搬砖项目,新手也能月入8000+(详细教程)

大家好&#xff0c;我是阿阳 这个项目很早之前就有了&#xff0c;而且这么久以来一直非常稳定。 作为一名没有任何经验却想通过低成本投入来赚钱的小白&#xff0c;做steam搬砖项目真的可以实现财富自由 0成本&#xff0c;操作简单&#xff0c;有手机就能做&#xff01;真的…

【Golang】欲入此Go先看Go的基本语法

&#x1f4d3;推荐网站(不断完善中)&#xff1a;个人博客 &#x1f4cc;个人主页&#xff1a;个人主页 &#x1f449;相关专栏&#xff1a;CSDN专栏、个人专栏 &#x1f3dd;立志赚钱&#xff0c;干活想躺&#xff0c;瞎分享的摸鱼工程师一枚 &#x1f34a;前言 完成了我们众多…

OpenAI 最强对话模型 ChatGPT 注册使用笔记

2022年12月5日OpenAI 发布了对话语言模型 ChatGPT&#xff0c;并开放了免费试用。ChatGPT 是一款基于GPT3模型的聊天机器人&#xff0c;该聊天机器人可以在模仿人类说话风格的同时回答大量的问题。在现实世界之中&#xff0c;例如数字营销、线上内容创作、回答客户服务查询&…

Python使用Opencv图像处理方法完成手势识别(一)

Opencv完成手势识别HSV的提取特征提取轮廓绘制完整代码由于是使用Opencv完成手势识别&#xff0c;所以首先利用颜色特征是对手的颜色进行提取&#xff0c;获得HSV的最小值与最大值。HSV的提取 HSV颜色空间阈值主要是靠Trackbar调节阈值和cv2.inRange来生成掩膜来提取。 这是我…