IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java微服务篇1——SpringBoot -> 正文阅读

[Java知识库]Java微服务篇1——SpringBoot

Java微服务篇1——SpringBoot

1、什么是springboot

1.1、Spring出现的问题

Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的 Enterprise Java Bean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和 面向切面编程,用简单的Java对象(Plain Old Java Object,POJO)实现了EJB的功能

  • 虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很 多XML配 置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML 配置。Spring 3.0引入 了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML

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

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

1.2、SpringBoot的诞生

SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在 配置与逻辑 业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的 效率,一定程度上缩短 了项目周期

  • 起步依赖:本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依 赖,这些东西加在一起即支持某项功能。 简单的说,起步依赖就是将具备某种功能的依赖坐标打包到一起,并提供一些默认的功能
  • 自动装配:指的是springboot,会自动将一些配置类的bean注册进ioc容器,我们可以需 要的地方使用@autowired或者@resource等注解来使用它。 “自动”的表现形式就是我们只需要引我们想用功能的包,相关的配置我们完全不用管,springboot会自 动注入这些配置bean,我们直接使用这些bean即可

2、SpringBoot核心理念

约定大于配置

Build Anything with Spring Boot:Spring Boot is the starting point forbuilding all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.

使用Spring Boot构建任何东西:Spring Boot是构建所有基于Spring的应用程序的起点。Spring Boot的设计目的是让您以最少的Spring前端配置尽快启动和运行

3、SpringBoot快速入门

3.1、创建项目

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

3.2、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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--
    所有的springBoot项目都会直接或者间接的继承spring-boot-starter-parent
    1.指定项目的编码格式为UTF-8
    2.指定JDK版本为1.8
    3.对项目依赖的版本进行管理,当前项目再引入其他常用的依赖时就需要再指定版本号,避免版本冲突的问题
    4.默认的资源过滤和插件管理
    -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.winkto</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!--可以将project打包为一个可以执行的jar-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3.3、启动类

// SpringBoot的启动类通常放在二级包中,SpringBoot项目在做包扫描,会扫描启动类所在的包及其子包下的所有内容。

//标识当前类为SpringBoot项目的启动类
@SpringBootApplication
public class DemoApplication {

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

}

3.4、Controller

@RestController
public class SpringBootController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello, SpringBoot!";
    }
}

4、SpringBoot单元测试

// 标记为当前类为SpringBoot测试类,加载项目的ApplicationContext上下文环境
@SpringBootTest
class DemoApplicationTests {

    @Autowired
    SpringBootController springBootController;

    @Test
    void contextLoads() {
        System.out.println(springBootController.hello());
    }

}

5、热部署

在开发过程中,通常会对一段业务代码不断地修改测试,在修改之后往往需要重启服务,有些服务 需要加载很久才能启动成功,这种不必要的重复操作极大的降低了程序开发效率。为此,Spring Boot框 架专门提供了进行热部署的依赖启动器,用于进行项目热部署,而无需手动重启项目。

5.1、导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

5.2、开启Idea的自动编译

在这里插入图片描述

5.3、开启Idea的在项目运行中自动编译

Ctrl+Shift+Alt+/打开Maintenance选项框,勾选compiler.automake.allow.when.app.running

在这里插入图片描述
然后自行测试即可

6、配置文件

配置文件能够对一些默认配置值进行修改,Spring Boot使用一个application.properties或者application.yaml(application.yml)的文件作为全局配置文件,该文件存放在**src/main/resource目录(常用)**或者类路径的/config

实体类

@Component
// @ConfigurationProperties注解用来快速、方便地将配置文件中的自定义属性值批量注入到某个Bean对象的多个对应属性中(@Value仅支持基础类型!)
// 保证配置文件中person.xx与当前Person类的属性名一致
// 保证当前Person中的属性都具有set方法
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private double money;
    private String[] hobbies;
    private List<String> books;
    private Set<String> lotteries;
    private Map<String,String> bankcards;
    private Pet pet;
}
public class Pet {
    private String name;
    private int age;
}

@ConfigurationProperties(prefix = “person”)爆红问题

虽然爆红,但是不影响运行,实在看着不爽,引入一个依赖解决一下

<!--处理@ConfigurationProperties(prefix = "person")爆红-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

6.1、properties配置文件

#tomcat的端口号
server.port=8099

#基础类型
person.name=zhangsan
person.age=20
person.money=123.5
#数组和集合(list,set)种赋值方式可以互换
person.hobbies=basketball,football,volleyball
person.books[0]=book1
person.books[1]=book2
person.books[2]=book3
person.lotteries[0]=book1
person.lotteries[1]=book2
person.lotteries[2]=book3
#map
person.bankcards.ICBC=123456789
person.bankcards.ABC=987654321
#对象
person.pet.name=huahua
person.pet.age=2

6.2、yaml配置文件

YAML文件格式是Spring Boot支持的一种JSON文件格式,相较于传统的Properties配置文件,YAML文 件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式,application.yaml配置文件的工作原理和application.properties是一样的,yaml格式配置文件看起来更简洁一些

对空格要求极其严格

server:
  port: 8099
person:
  name: zhangsan
  age: 20
  money: 123.5
  hobbies: baskball,football,volleyball
  books:
    - book1
    - book2
    - book3
  lotteries: [lottery1,lottery2,lottery3]
  bankcards: {ICBC: 123456789,ABC: 987654321}
  pet:
    name: huahua
    age: 2

6.3、测试

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    Person person;

    @Test
    void contextLoads() {
        System.out.println(person.toString());
    }

}

6.4、配置文件优先级

spring-boot-starter-parent-2.5.3.pom中出现这个的配置文件加载顺序,那么文件的优先级yml<yaml<properties

<includes>
  <include>**/application*.yml</include>
  <include>**/application*.yaml</include>
  <include>**/application*.properties</include>
</includes>

6.5、自定义配置文件

有时候我们需要一些额外的配置文件,比如secretkey.properties,但是SpringBoot并不知道我们要加载这个配置文件,此时我们需要使用@PropertySource加载自定义配置文件(@PropertySource只对properties文件可以进行加载,对于yml或者yaml不能支持,需要自行实现)

@Component
@PropertySource("classpath:secretkey.properties")
@ConfigurationProperties(prefix = "secretkey")
public class SecretKey {
    private int num;
    private String secretkey;

    public SecretKey() {
    }

    public SecretKey(int num, String secretkey) {
        this.num = num;
        this.secretkey = secretkey;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getSecretkey() {
        return secretkey;
    }

    public void setSecretkey(String secretkey) {
        this.secretkey = secretkey;
    }

    @Override
    public String toString() {
        return "SecretKey{" +
                "num=" + num +
                ", secretkey='" + secretkey + '\'' +
                '}';
    }
}
secretkey.num=22
secretkey.secretkey=abcdefg
// 标记为当前类为SpringBoot测试类,加载项目的ApplicationContext上下文环境
@SpringBootTest
class DemoApplicationTests {

    @Autowired
    SecretKey secretKey;

    @Test
    void contextLoads() {
        System.out.println(secretKey.toString());
    }

}

6.6、自定义配置类(推荐使用)

在Spring Boot框架中,通常使用@Configuration注解定义一个配置类,Spring Boot会自动扫描和识别 配置类,从而替换传统Spring框架中的XML配置文件

// 标识该类是一个配置类
@Configuration
public class WinktoConfig {
    // 将返回值对象作为组件添加到Spring容器中,该组件id默认为方法名
    @Bean
    public ObjectMapper objectMapper(){
        return new ObjectMapper();
    }
}
@SpringBootTest
class DemoApplicationTests {

    @Autowired
    SecretKey secretKey;

    @Autowired
    ObjectMapper objectMapper;

    @Test
    void contextLoads() throws JsonProcessingException {
        System.out.println(objectMapper.writeValueAsString(secretKey));
    }

}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:51:51  更:2021-08-07 11:53:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 1:54:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码