Java微服务架构之Spring Boot —上篇

这篇具有很好参考价值的文章主要介绍了Java微服务架构之Spring Boot —上篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot 概述

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

Spring的缺点:

(配置繁琐)

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但它要求的回报也不少。
(2)依赖繁琐
项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

Springboot功能:

1)自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
2)起步依赖:依赖传递
起步依赖本质上是一个Maven项目对象模型(ProjectObjectModel,POM),定义了对其他库的传递依赖这些东西加在一起即支持某项功能。
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

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

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

SpringBoot 快速入门

需求:搭建SpringBoot工程,定义HelloController.hello()方法,返回”HeloSpringBoot!”

案例:实现步骤 :创建Maven项目、导入SpringBoot起步依赖、定义Controller、编写引导类、 启动测试

代码:

bianpom文件增加需要继承的父工程和起步以来

 <!--springboot工程需要继承的父工程-->
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    </parent>

    <dependencies>
        <!--web开发的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

编写控制类:

package com.itheima.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {
    @RequestMapping("/hello") // 规定路径
    public String hello(){
        return "Hello Spring Boot !";
    }
}

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

总结:

小结
SpringBoot在创建项目时,使用jar的打包方式。
SpringBoot的引导类,是项目入口,运行main方法就可以启动项目
使用SpringBoot和Spring构建的项目,业务代码编写方式完全一样。

创建spring Initializr

首先我们勾选web 的depen

构建controller

@RestController
public class HelloController {


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

运行引导类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootInitApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootInitApplication.class, args);
    }

}

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

SpringBoot 起步依赖原理分析

起步依赖原理分析
1)spring-boot-starter-parent

2)spring-boot-starter-web

小结:

1.在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
2.在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程
3.我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题。

SpringBoot 配置

配置文件分类

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。

properties:

server.port=8080

yaml

server:
  port: 8080

如果我们在application.properties或者application.yml(application.yaml)都进行配置。生效的优先如下:

pplication.properties > application.yml > application.yam

小结:

SpringBoot提供了2种配置文件类型:properteis和yml/yam
默认配置文件名称:application
在同一级目录下优先级为:properties>yml>yaml

yaml

YAML全称是YAML Ain't Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C/C++,Ruby,Python,Java,Per,C#,PHP等。YML文件是以数据为核心的,比传统的xmI方式更加简洁。RYAML文件的扩展名可以使用.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

简洁,以数据为核心

YMAL核心的语法:

1.大小写敏感
2.数据值前边必须有空格,作为分隔符
3.使用缩进表示层级关系
4.缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。

5.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

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

server:
    port:8080
    address: 127.0.0.1
name: abc

YAML数据格式:

# 对象(map):键值对的集合
person:
  name: zhangsan
  age: 20
  address:
  - beijing
  - shanghai
# 行内写法
person: {name: zhangsan}


# 数组: 一组按次序排列的值
address:
  - beijing
  - shanghai
# 行内写法
address: [beijing,shanghai]

# 纯量:单个的、不可再分的值
 msg1: 'hello \n world' # 单引忽略转义字符
 msg2: "hello \n world" # 双引识别转义字符

参数引用:

name: lsis

person:
    name: ${name}

小结:

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

读取配置文件内容

读取配置内容

1)@Value

    // 第一种:使用value的方法的进行
    @Value("${name}")
    private String name;

2)Environment

    @Autowired
    private Environment env; // 直接初始化环境的对象

    System.out.println(env.getProperty("person.name"));
    System.out.println(env.getProperty("address[0]"));

3)@ConfigurationProperties

// Person 类被spring所识别
@Component

// 会把yml中的的name: abc注入进去 而不会注入Person对象的属性值,指定前缀才行
//@ConfigurationProperties

// 注入Person对象的属性值
@ConfigurationProperties(prefix = "person")


System.out.println(person); // Person{name='abc', age=0} 或 Person{name='zhangsan', age=20} (加了前缀后生成的)
// 重新定义成员变量
String[] address = person.getAddress();// 返回数组地址,然后address指向该地址
// 打印
for (String s:address){
     System.out.println(s);
}



profile

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

1) profile配置方式

多profile文件方式

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

在创建3个属性文件。

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

激活

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

yml多文档方式

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构


2) profile激活方式

配置文件 
# 无激活就默认为8080端口

#spring.profiles.active=dev # 8081
#spring.profiles.active=test # 8082
#spring.profiles.active=pro # 8083

虚拟机参数

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

这时端口从pro转换为test  (8083-8082)

或者

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

则端口变成了8083了。


命令行参数

首先打成jar包

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

然后运行 这个时候 我遇到了报错 主要原因module中的存在两个主类 具体的解决方法可以看下面的。我的做法是在pom文件中指定了一个主类:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- Set the main class -->
                    <mainClass>com.itheima.springbootprofiles.SpringbootProfilesApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

可以参考这老帖子的解释:

Unable to find a single main class from the following candidates [app.datapool.util.AESUtil, app.dat-CSDN博客

spring boot打包部署 XXX.jar中没有主清单属性或者Error: Invalid or corrupt jarfile_springboot打成jar启动报error: invalid or corrupt jarfil-CSDN博客

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

小结
Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

内部配置加载顺序

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

从上到下为加载的优先级顺序,我们一般配置的yml文件 在打包时,就会默认加载到我们的classpath:/目录下。

下面是我们举的例子:

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

1会默认覆盖2的内容 1>2 

现在我们创建新的配置文件

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

这时候 则会继续覆盖之前的内容

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

我们在模块外面创建属性文件时候 1>2 且大于上面的12 的优先级的。

外部配置加载顺序

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

SpringBoot 整合其他框架

整合Junit

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

整合redis

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

启动redis服务

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

编写测试方法

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

先写入数据

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

获取数据

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

整合MyBatis

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

首先我们在配置好的mysql的前提下 创建库和表格 然后插入数据

CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;

USE `springboot`;

/*Table structure for table `t_user` */

DROP TABLE IF EXISTS `t_user`;

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `t_user` */

insert  into `t_user`(`id`,`username`,`password`) values (1,'zhangsan','123'),(2,'lisi','234');

首先创建user类

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

配置属性文件内容为mysql的信息

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

首先是不写配置文件的方式进行测试

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

再然后是配置文件的方法

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构

Java微服务架构之Spring Boot —上篇,Javaweb,spring boot,java,架构文章来源地址https://www.toymoban.com/news/detail-860373.html

到了这里,关于Java微服务架构之Spring Boot —上篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot如何实现微服务架构中的API网关?

    随着微服务架构的流行,越来越多的企业开始构建自己的微服务系统。在这种情况下,API网关变得尤为重要。API网关是微服务架构中的一个组件,它可以帮助我们管理和路由所有的API请求。Spring Boot提供了一些工具和框架,可以帮助我们轻松地实现API网关。在本文中,我们将

    2024年02月07日
    浏览(45)
  • Spring Boot与Feign:微服务架构下的优雅通信

    本文将详细介绍在Spring Boot框架中如何使用Feign进行微服务之间的优雅通信。我们将从Feign的基本原理讲起,然后逐步展开使用Feign的完整流程和步骤,包括代码示例和详细注释。通过本文,读者将能够轻松掌握Feign在Spring Boot微服务架构中的应用。 Feign是一个声明式的Web Servi

    2024年02月21日
    浏览(35)
  • JavaWeb编程面试题——Spring Boot

    面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待。不以刷题进大厂为目的,而是以学习为目的。这里的知识点会持续更新,目录也会随时进行调整。 关注公众号:编程火箭车 。在【粉丝福利】中点击【面题大全】,其中的

    2024年02月06日
    浏览(35)
  • 【Java开发】 Spring 11 :Spring Boot 项目部署至云服务器

    Spring Boot 项目开发结束后的工作便是运维,简单来说需要配置 Web 运行参数和项目部署两大工作,本文将尽可能详细地给大家讲全! 目录 1 定制 Web 容器运行参数 1.1 运行参数介绍 1.2 项目搭建 ① 通过 IDEA Spring Initializr 创建项目 ② 添加 Spring Web 等依赖 ③ 编写 controller 层的

    2023年04月23日
    浏览(39)
  • 计算机毕业设计 基于Spring Boot智能停车计费系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

    🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不

    2024年02月07日
    浏览(36)
  • Ubuntu服务器中java -jar 后台运行Spring Boot项目

    问:我在我的服务器中java -jar 运行springboot项目,但是我操作不了命令了,必须要终止掉才能执行后面的操作,怎么样才能让他后台运行呢?比如我的jar包名是tools-boot-0.0.1-SNAPSHOT.jar 使用nohup命令: 在命令前加上nohup,并通过重定向将输出保存到文件中。例如: 问:这个outp

    2024年02月08日
    浏览(49)
  • JavaWeb——基于Spring Boot的图书数字化管理系统的设计与实现

    课程设计总结 随着信息技术的快速发展,数字化管理已经成为各行各业提高效率和管理水平的重要手段。在图书管理领域,数字化管理系统可以有效地提高管理效率,提供更好的用户体验。本项目旨在开发一个基于 Spring Boot 的图书数字化管理系统,为管理员和读者提供便捷

    2024年02月15日
    浏览(55)
  • 架构师spring boot 面试题

    Spring Boot 微服务具有以下特点: 独立性 :每个微服务都是独立的部署单元,有自己的代码库和数据库。这使得微服务可以独立开发、测试、部署和扩展。 分布式 :微服务架构将一个大型应用程序拆分为多个小型服务,这些服务可以分布在不同的服务器上。这种分布式性质允

    2024年02月09日
    浏览(32)
  • 微服务 Spring Cloud 2021 Spring Boot 2.7.x Java JDK8升级到JDK17研究

    项目正在使用jdk8 如果要升级到jdk17 则需要升级springboot版本及springcloud版本 (springcloud版本和springboot版本必须匹配 要一块升级) 。目前使用的版本如下: spring boot 版本为 2.1.5.RELEASE spring cloud 版本为 Greenwich.SR2 spring 版本为 5.1.7.RELEASE jdk 由 8 升级到 17 spring boot 由 2.1.5.RELEASE

    2024年02月01日
    浏览(45)
  • 拾壹博客Spring Boot转换成Spring Cloud Alibaba架构

    改的地方实在太多了,所以过程记录不下去了,但是业务模块跟Boot是一毛一样的没有变化,直接发项目代码,包括了nacos中的配置文件在对应的模块,运行大概是没有问题。 成果: 链接已死,真的大无语。 等哪天把家里的k8s的minio整一下。先传到CSDN咯。 PS:其实过年前就已

    2024年02月06日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包