快速入门java微服务架构SpringBoot之一

news2024/11/24 15:02:05

Springboot概念:

Springboot提供了一种快速使用Springboot的方式,基于约定优于配置的思想。

可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编辑中,从而大大提高了开发的效率,一定程度上缩短了项目周期。2014年4月,SpringBoot1.0.0发布。Spring的顶级项目之一(https://spring.io).

官网:spring.io.project

springboot;使用最少的配置,来启动项目。

Spring缺点

1)配置繁琐。

虽然Spring的组件代码是轻量级的,但他的配置确实重量级的。一开始,Spring用XML配置。而且是很多XML配置。Spring2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。

Spring3.0引入了基于java的配置,这是一种类型安全的可重构配置方式,可以代替XML。

所有这些配置都代表了开发时的损耗,因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的问题。和所有框架一样,Spring实用,但它要求的回报也不少。

2)依赖繁琐:

项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且换需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

SpringBoot功能:

1)自动配置

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

2)起步依赖

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

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

3)辅助功能

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

SpringBoot并不是对Spring功能上的增强,而是提供了一种快速的使用Spring的方式。

小结

SpringBoot提供了一种快速开发Spring项目的方式,而不是对Spring功能上的增强。

Spring的缺点

*配置繁琐

*依赖繁琐

SpringBoot功能

*自动配置

*起步依赖:依赖传递

*辅助功能

SpringBoot快速入门:

案例:需求

搭建SpringBoot工程,定义HelloController。hello()方法,返回“Hello SpringBoot”。

案例实现步骤

1)创建Maven项目

2)导入SpringBoot起步依赖

3)定义Controller

4)编写引导类

5)启动测试

.实际操作:

File-》新建-》Maven-》Next—》

进入了pom文件

添加起步依赖:

<!-- springboot工程需要继承的父工程 -->

<parent>

<groupId>org.springframework</groupId>

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

<version>2.1.8.RELEASE</version>

</parent>

<dependencies>

<!-- web开发的起步依赖 -->

<dependency>

<groupId>org.framewrok.boot</groupId>

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

</dependency>

</dependencies>

HelloController.java:

@RestController

public class HelloController{

@RequestMapping("/hello")

public  String hello(){

return "hello Spring Boot!";

}

}

/*引导类。springboot项目入口*/

@SpringBootApplication

public class HelloApplication{

main{

SpringApplication.run(HelloApplication.class.args);

}

}

小结:

*SpringBoot在创建项目时,使用jar的打包方式。

*SpringBoot的引导类,是项目入口,运行main方法就可以启动项目。

*使用SpringBoot和Spring构建项目,业务代码编写方式完全一样。

案例:需求

使用idea快速构建SpringBoot工程,定义HelloController。hello()方法,返回“Hello”

“SpringBoot!”。

快速构建选Spring Initializr->选择

依赖原理分析:

1)spring-boot-starter-parent

2)spring-boot-starter-web

小结:

*在spring-boot-starter-parent中定义了各种技术的版本信息。组合了一套最优搭配的技术版本。

*在各种starter中,定义了完成该功能需要的坐标集合,其中大部分版本信息来自于父工程。

*我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题。

配置文件分类:

SpringBoot是基于约定的,所以很多配置都有默认值,就可以使用application。properties或者application.yml(applicatoin.yaml)进行配置。

*properties:

server.port=8080

*yml

server:

port: 8080

小结:

*SpringBoot提供了2中配置文件类型,properteis和yml/yaml

*默认配置文件名称:application

*在同一级目录下优先级为:properties>yml>yaml

YAML

YAML全称是YAML Ain'tMarkup Language。YAML是一种直观的能够被电脑识别的数据序列化格式并容易被人类阅读,容易被脚本语言交互的。可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,Java,Perl,C#,PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。

YAML文件的扩展名可以使用。yml或者。yaml。

*properties:

server.port=8080

server.address=127.0.0.1

*xml:

<server>

<port>8080</port>

<address>127.0.0.1</address>

</server>

*yml

server:

    port: 8080

address: 127.0.0.1

简洁:以数据为中心。

YAML:基本语法:
1)大小写敏感

2)数据值前边必须有空格,作为分隔符

3)使用缩进表示层级关系

4)缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。

5)缩进的空格数目不重要,只要相同层级的元素左侧对其即可。

6)#表示注解,从这个字符一直到行尾,都会被解析器忽略。

server:

port: 8080

address: 127.0.0.1

name:abc

YAML:数据格式

*对象(map):键值对的集合。

person:

   name: zhansan

#行内写法

person: {name: zhangsan}

*数组:一组按次序排列的值。

address:

   -beijing

   -shanghai

#行内写法

address: [beijing,shanghai]

*纯量:单个的。不可再分的值

msg1: 'hello \n world'         #单引忽略转义字符

msg2: "hello \n world"        #双引识别转义字符

application.yml

server:

    port: 8080

name: abc

#对象

person:

     name: zhangsan

     age: 20

#对象行内写法

person2: {name: zhangsan,age: 20}

#数组

address:

    -  beijing

    -  shanghai

#数组的行内写法

address2:  [beijing,shanghai]

#纯量

msg1:  'hello \n world'

msg2:  "hello \n world"

YAML参数引用

name:  lisi

person:

    name:  ${name}   #引用上面定义的name值

YAML:小结

1)配置文件类型

*properties:和以前一样

*yml/yaml:注意空格

2)yaml:简洁,以数据为中心

*基本语法

*大小写敏感

*数据值前边必须有空格,作为分隔符

*使用空格缩进表示层级关系,相同缩进表示同一级。

*数据格式

*对象

*数组:使用 “- ”  表示数组每个元素

*纯量

*参数引用

*${Key}

如何读取配置文件的内容:

1)@Value

2)Environment(一个环境的对象)

3)@ConfigurationProperties(映射的一个关系)

@RestController

public class HelloController{

@Value("${name}")

private String name;

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

private String name2;

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

private int age;

@Value("${address[0]}")

private String address1 ;

@Value("${msg1}")

private String msg1 ;

@Value("${msg2}")

private String msg2 ;

@Autowired

private Environment env;#注入一个对象

@Autowired

private Person person;#注入一个对象

@RequestMapping("/hello2")

public class hello2(){ return "hello Spring Boot 222!"; }

P(name);

P(name2);

P(age);

P(address1);

P(msg1);

P(msg2);

P(env.getProperty("person.name"));.

P(env.getProperty("address[0]"));.

P(person);

String[] address = person.getAddress();

for(String s : address) {

P(s);

}

@RequestMapping("/hello")

public String hello(){ return "hello Spring Boot 222!";  }

}

@Componet

@ConfigurationProperties(prefix = "person")

public class Person{

private String name;

priavte int age;

private String[] address;

public String getName(){

return name;

}

//get and set方法,并且重写toString()

}

拓展:有一个打开文档的提示:

加一个注解文档:

<dependency>

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

<artifactId>spring-boot-configuration-processor</artifactId>

<optional>true</optional>

</dependency>

加上之后写yml会有一些提示。比如可以。出来。

SpringBoot配置

profile

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

1)profile配置方式(用来完成不同环境下,配置动态切换功能的)

    *多profile文件方式

    *yml多文档方式

2)profile激活方式

     *配置文件:在配置文件中配置:spring.profiles.active=dev

     *虚拟机参数 :在VM options指定: -Dspring.profiles.active=dev

     *命令行参数  :java -jar xxx.jar  --spring.profiles.active=dev

application.properties

application-dev.properties/yml 开发环境

application-pro.properties/yml 测试环境

application-test.properties/yml 生产环境

如何激活,在application.properties主文件中

spring.profiles.active=dev/pro/test

yml多文档配置方式  --分隔不同配置

application.yml

---

server:

    port:  8081

spring:

    profiles:  dev

---

server:

    port:  8082

spring:

    profiles:  test

---

server:

    port:  8083

spring:

    profiles:  pro

---

激活:

spring:

    profiles:

        active:  pro

虚拟机

Run/Denug Configuration

VM options:   -Dspring.profiles.active-test

Program arguments:   --spring.profiles.active=pro

打包jar:

springboot-profiles->Lifecycle->package

在有jar包的位置按Shift+右键

在cmd中输入java -jar .\文件名。后缀

回车

java -jar .\文件名。后缀 --spring.profiles.active=pro

完成切换。

内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:

1.file:./config/:  当前项目下的/config目录下

2。file:./        :  当前项目的根目录

3。classpath:/config/: classpath的/config目录

4。classpath:/          :classpath的根目录

加载顺序为上文的排列顺序,高优先级配置的属性会生效。

Profile-小结

1)profile是用来完成不同环境下,配置动态切换功能的。

2)profile配置方式。

*多profile文件方式:提供多个配置文件,每个代表一种环境。

三种文件的配置的开发环境

*yml多文档方式:

在同一个yml中使用---分隔不同配置。

3)profile激活方式

*配置文件:在配置文件中配置:spring.profiles.active=dev

*虚拟机参数:在VM options指定: -Dspring.profiles.active-dev

*命令行参数: java -jar XXX.jar  --spring.profiles.active=dev

classpath是类路径,类路径是在   .idea那里。

#修改项目的访问路径 默认值为/

server.servlet.context-path=/hello

server.port=8081

 

 在Shift+右键的运行方式下,运行jar,上图不会执行。因为根目录下的配置不会打进jar包

 

 后边是路径。

12.13.14.15是四个默认加载位置。

Springboot整合其他框架

案例:需求

springboot整合Junit

案例:实现步骤

1)搭建Springboot工程

2)引入starter-test起步依赖

3)编写测试类

4)添加测试相关注解

*@RunWith(springRunner.class)

*@SpringBootTest(classes = 启动类。class)

5)编写测试方法

 

 

如果包名一样可以去掉哪个路径。

包名不同也不指定路径,会出现找不到异常。 

 自动快速创建的情况下,包名是相同的。

SpringBoot整合Redis

案例:实现步骤:

1)搭建springboot工程。

2)引入redis起步依赖

3)配置redis相关属性

4)注入RedisTemplate模板

5)编写测试方法,测试。

 起步依赖

快速创建时选的是NoSQL--》Spring Data Redis(Access + Driver)

 自动注入RedisTemplate

加上get和set方法

默认自带的Redis本机端口号6379。

控制台启动Redis

在启动测试

成功。

如果不是本机的Redis

用yml配置

 下面的提示是可以修改的默认的配置。

###SpringBoot整合MyBatis

案例:实现步骤:

1)搭建SpringBoot工程

2)引入mybatis起步依赖,添加mysql驱动

3)编写DataSource和MyBatis相关配置。

4)定义表和实体类。

5)编写dao和mapper文件/纯注解开发

6)测试

 添加依赖。

 起步依赖和驱动依赖。

pom文件:

runtime这个是运行时生效的mysql驱动。

接下来准备数据库的资料。

 这是做好的sql文件

打开cmd

打开mysql

命令mysql -u(账号) -p(密码)比如:mysql -uroot -proot

插入表

select * from t_user;查询表

 然后添加get方法,set方法。重写toString。

application.yml

#datasource

spring:

    datasource:

        url:  jabc:mysql:///springboot           #///省略了用户名,端口,IP

        username:    root

        password:    root

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

 @Repostitory注解可以去除自动注入的波浪

 写一个UserMapper

url: jabc:mysql:///springboot?serverTimezone=UTC

 

 

 

 

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

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

相关文章

matlab主成分分析算法在人脸识别的具体应用

主成分析&#xff08;Principal Component Analysis&#xff0c;简称PCA&#xff09;是一种常用的降维算法&#xff0c;可以将高维数据转化为低维数据&#xff0c;同时保留原始数据的最重要特征。PCA算法在人脸识别中有广泛的应用&#xff0c;可以提取人脸图像中的主要特征&…

《啊哈算法》第二章--队列 栈 链表

文章目录 前言一、数据结构基础知识(衔接知识)二、队列三、栈四、链表总结 前言 上一节我们学习了排序算法当中的快速排序 冒泡排序 桶排序 &#xff0c;那么本节得主要学习内容是队列 栈 链表得相关数据结构得知识 一、数据结构基础知识(衔接知识) 基于学习这本书得都是一些…

《英雄联盟》丢失d3dcompiler_47.dll怎么办,推荐这个修复方案

不知道大家有么有遇到过&#xff0c;在打开《英雄联盟》的时候&#xff0c;计算机提示丢失d3dcompiler_47.dll&#xff0c;无法继续执行此代码。d3dcompiler_47.dll是一个动态链接库文件&#xff0c;它是与Direct3D编译器相关的组件之一。像是photoshop等软件&#xff0c;英雄联…

IEEE754 标准是如何制定浮点数的存储的

1. IEEE754 标准简介 IEEE754 标准是一种用于浮点数表示和运算的标准&#xff0c;由国际电工委员会&#xff08;IEEE&#xff09;制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则&#xff0c;旨在提供一种可移植性和一致性的方式来表示和处理浮点数 IEEE754 …

c#使用ThreadPool

说到ThreadPool&#xff0c;都知道是线程池。在c#中&#xff0c;有很多方式可以实现线程。从时间上来排序&#xff0c;大概是这样的&#xff0c;Thread&#xff0c;backgroundworker&#xff0c;ThreadPool&#xff0c;Parallel&#xff0c;Task。其中后面2种是最新的&#xff…

第十八章:Auto-DeepLab:用于语义图像分割的层次化神经架构搜索

0.摘要 最近&#xff0c;神经架构搜索&#xff08;NAS&#xff09;已经成功地识别出在大规模图像分类任务上超越人工设计的神经网络架构。在本文中&#xff0c;我们研究了NAS在语义图像分割任务中的应用。现有的工作通常集中在搜索可重复的基本单元结构&#xff0c;而手动设计控…

一些有趣的Git学习资料

Git 可以说是程序员必备的技能之一了&#xff0c;基于 Github/Gitlab 以及相关工作流的使用&#xff0c;Git 已经融入到了我们的日常工作中&#xff0c;这里分享一些有趣的 Git 学习资料&#xff0c;希望可以帮助大家更好的理解 Git。 1. Welcome to Learn Git Branching 以动…

第二周笔记

public class Calc { //加法, 把和作为一个结果返回出去, 返回给调用者 public int add3(int num1, int num2){ if(num1 0 && num2 0){ return 0; //隐式包含一个if-else结构 } //使用return 关键字 return nu…

【Linux操作系统】多线程抢票逻辑——学习互斥量(锁)函数接口

文章目录 1.进程线程间的互斥相关背景概念2.联系代码学习同步互斥问题3.互斥量&#xff08;锁&#xff09;的函数接口3.1初始化互斥量3.2销毁互斥量3.3互斥量加锁和解锁3.4改进多线程抢票代码 1.进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫…

beego验证码(配置到redis存储)

我们定义一个全局变量用于存储redis连接 RedisDb *redis.Client 然后连接 redis 这一块我们将redis信息写到app.conf文件里了&#xff1a; redisDb 1 redisAddr "127.0.0.1:6379" redisPwd "" package initializeimport ("beego_learning/global&q…

【Java基础教程】(十四)面向对象篇 · 第八讲:多态性详解——向上及向下转型、关键字 final与 instanceof的作用~

Java基础教程之面向对象 第八讲 本节学习目标1️⃣ final 关键字1.1 final类1.2 final方法1.3 final属性 2️⃣ 多态性2.1 向上转型2.2 向下转型2.3 关键字 instanceof &#x1f33e; 总结 本节学习目标 掌握final 关键字的主要作用及使用&#xff1b;掌握对象多态性的概念以…

【CSDN新星计划】初阶牛C/C++赛道——顺序程序设计(C语句)

目录 3.1 C语句的作用和分类 &#x1f349;&#xff08;1&#xff09;控制语句 &#x1f349;&#xff08;2&#xff09;函数调用语句 &#x1f349;&#xff08;3&#xff09;表达式语句 &#x1f349;&#xff08;4&#xff09;空语句 &#x1f349;&#xff08;5&#…

【C++进阶之路】vector的基本使用和模拟实现

前言 作为STL的容器之一&#xff0c;vector的名字通常令人疑惑&#xff1f;在字面上&#xff0c;我们通常会翻译成向量&#xff0c;但感觉又解释不通&#xff0c;总觉得应该叫dynamic array翻译成动态数组/顺序表&#xff0c;更容易理解&#xff1f;那为啥呢&#xff1f; 我从…

【Java】微服务项目的部署

微服务项目的部署 准备Centos安装 Docker镜像加速检查加速器是否生效 下载docker-compose方法1 curl方法2 pip方法3 直接下载released 用docker-compose部署中间件导入项目安装jdk maven git设置idea内存减小jar启动占用内存增加idea可使用内存 本文参考 https://gitee.com/…

音乐怎么转换成wav格式?分享这五个方法给大家!

在音频编辑和处理过程中&#xff0c;将音乐文件转换为WAV格式是一种常见需求。WAV格式以其无损音质和广泛的兼容性而受到许多人的喜爱。下面介绍了五种常用的方法&#xff0c;帮助您将音乐文件转换为WAV格式&#xff0c;其中方法一使用记灵在线工具。 方法一&#xff1a;记灵在…

非常规自增自减

非常规自增自减 目录 一&#xff0e; 概述二&#xff0e; 例题 一&#xff0e; 概述 在C语言的单目操作符中有&#xff08;自增&#xff09;和–&#xff08;自减&#xff09;这两个运算符。假设有变量i&#xff0c;我想让变量i加上1&#xff0c;那么我们会写成ii1这样的形式。…

自旋锁与开关中断临界区的区别

自旋锁和开关中断临界区都是用于保护共享资源的机制&#xff0c;但它们的实现方式和使用场景有所不同。 自旋锁主要是用于多核CPU上的并发编程中&#xff0c;它通过不断地检查锁的状态来等待锁的释放&#xff0c;从而避免了线程的阻塞。当一个线程需要访问共享资源时&#xff…

VTK 三维模型 体绘制 关于环境光、漫反射、镜面反射

光源: 1):环境光:环境光是一种低强度的光,由光线经过周围环境表面多次反射后形成的,利用环境光可以描述一块区域的亮度,通常在场 景中,环境光的颜色是一个常量. 2):太阳光:即定向光源,特点是从无穷远出发射光线,光线是平行的,光线强度不会随着距离衰减. 3):点光源:在有限空间…

maven安装和换源

1. 安装(17条消息) maven历史版本下载和安装_beiback的博客-CSDN博客 安装 maven历史版本仓库 下载 Index of /dist/maven/maven-3 (apache.org)https://archive.apache.org/dist/maven/maven-3/ 选择对应版本-binaries/-zip 解压即可使用 2.换源 (17条消息) 手把手教你更改…

【读书笔记】从实模式到保护模式

计算机语言 x86汇编语言&#xff1a;从实模式到保护模式&#xff08;操作系统引导课&#xff09; 原书作者李忠 用电表示数据 寄存器的作用&#xff1a;具有记忆功能的器件。锁存可以通过下面的开关控制&#xff0c;平时开关为空&#xff0c;按下开关之后&#xff0c;将输入锁…