[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,无代码生成,开箱即用;
Why Springboot?
SpringBoot 简化了基于 Spring 开发,这只是最直观的一方面;还有一个方面: 也更得力于各微服务组件的支持,这也是谈 SpringBoot 必谈微服务的原因。(起初是Netflix移植到Spring),可以说是Spring Cloud带动了SpringBoot ,SpringBoot成就了SpringCloud。
微服务对照的是传统的单体应用开发(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
项目结构介绍
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);
}
}
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标注在一个配置类上