跳至主要內容

Springboot-1.项目构建

holic-x...大约 5 分钟框架Springboot

Springboot-项目构建

Springboot概念

基本概念

​ SpringBoot基于Spring4.0设计,是由 Pivotal 公司提供的框架

  • 2014 年 4 月发布 Spring Boot 1.0 基于Spring4.0
  • 2018 年 3 月 Spring Boot 2.0发布 基于Spring 5.0

SpringBoot 基于 Spring 开发。不仅继承了Spring框架原有的优秀特性,它并不是用来替代 Spring 的解决方案,而和 Spring 框架紧密结合进一步简化了Spring应用的整个搭建和开发过程。其设计目的是用来简化 Spring 应用的初始搭建以及开发过程,其核心在于通过提供默认配置等方式让开发者快速构建项目。

​ 关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,提供对应的组件支持,例如 Redis、MongoDB、Dubbo、kafka,ES等等。SpringBoot 应用中这些第三方库几乎可以零配置地开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

Springboot优点

  • 快速构建一个独立的 Spring 应用程序 ;
  • 嵌入的 Tomcat 、 Jetty 或者 Undertow,无须部署 WAR 文件;
  • 提供starter POMs来简化Maven配置和减少版本冲突所带来的问题;
  • 对Spring和第三方库提供默认配置,也可修改默认值,简化框架配置;
  • 提供生产就绪型功能,如指标、健康检查和外部配置;
  • 无需配置XML,无代码生成,开箱即用;

img

Why Springboot?

​ SpringBoot 简化了基于 Spring 开发,这只是最直观的一方面;还有一个方面: 也更得力于各微服务组件的支持,这也是谈 SpringBoot 必谈微服务的原因。(起初是Netflix移植到Spring),可以说是Spring Cloud带动了SpringBoot ,SpringBoot成就了SpringCloud。

image-20240405104647658

​ 微服务对照的是传统的单体应用开发(all in one),单体应用开发风格就是把所有的东西都写在一个应用里面(例如OA、CRM、ERP、页面等)将所有的代码放在一个应用程序中打成wwar,随后放到部署容器中运行(tomcat等)。这种单体应用的场景适用于用户体量小的场景,便于维护。但是随着日益增长的用户需求和功能扩展,这种容易牵一发动全身的风格(修改一个功能就要重新部署)则无法适配

Demo构建

1.使用Spring Initializer快速创建Spring Boot项目

项目构建

​ 可借助idea快速构建springboot项目,选择版本和关联依赖(也可自行引入springboot依赖),编写一个Controller逻辑

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/hi")
    @ResponseBody
    public String hello(){
        System.out.println("hello world");
        return "hello";
    }
}

​ 启动类启动访问:http://localhost:8080/hello/hi

​ 默认没有配置路径,可通过resources/application.properties配置服务器根路径(一般将application.properties转化为application.yml风格)

项目部署

​ spring‐boot‐maven‐plugin插件会将springboot项目打包成一个可执行的jar

image-20240405111251704

项目结构介绍

​ pom.xml:maven管理配置文件,其中spring-boot-starter-parent是Springboot的父级依赖提供相关的Maven依赖(管理Springboot应用中的所有依赖版本);spring-boot-starter-web是springboot项目的场景启动期,导入web模块正常运行所依赖的组件(Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景的启动器)

Application 启动类:通过@SpringBootApplication注解标注为一个主程序类,用于说明这是一个Springboot应用(自动装配就是基于此开启)

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        // Spring应用启动起来
        SpringApplication.run(Application.class,args);
    }
}

image-20240405111955264

2.自定义SpringApplication

​ 可以自定义SpringApplication配置项目信息

/**
 * 自定义项目启动类
 */
@SpringBootApplication
public class CustomSpringApplication extends SpringApplication {

    public CustomSpringApplication() {
        super();
        // 在这里可以添加自定义的EnvironmentPostProcessor
//        this.addInitializers(new MyCustomInitializer());
//        this.addListeners(new MyCustomListener());
        System.out.println("hello custom springApplication");
    }

    public static void main(String[] args) {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(CustomSpringApplication.class);
        builder.bannerMode(Banner.Mode.OFF).run(args);
    }
}

3.配置文件的使用

配置文件(application.yml)

SpringBoot使用一个全局的配置文件 核心配置文件,配置文件名在约定的情况下名字是固定的;

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

  • application.properties
  • application.yml
  • application.yaml
application.properties
server.port=8081
server.servlet.context-path=/hello


application.yml
server:
  port: 8088
  servlet:
    context-path: /hello

​ 建议整个应用程序都使用同一个版本的配置文件,避免一些配置加载顺序问题导致的程序异常。对于不同环境的配置文件加载可构建多Profile文件,例如application.yml、application-dev.yml、application-prod.yml、application-test.yml、

# 设定默认激活配置
spring:
  profiles:
    active: dev

​ 或者在启动jar的时候默认指定(通过命令行控制)

java -jar xxx.jar --spring.profiles.active=dev

@Value和@ConfigurationProperties

如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果专门编写了一个javaBean来和配置文件进行映射,就直接使用@ConfigurationProperties;

@PropertySource:加载指定的配置文件;

@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;

​ Spring Boot里面没有Spring的配置文件,自己编写的配置文件,也不能自动识别;想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

Springboot3.0自动配置流程图open in new window

image-20240405115216824

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3