springboot-1-入门

1、springboot简介,背景

简化Spring应用开发的一个框架;

整个Spring技术栈的一个大整合;

J2EE开发的一站式解决方案;

2、极简helloworld

流程:

使用spring initializr创建springboot新项目

在主程序的同级目录下创建包

  • control包
  • dao包
  • pojo包
  • service包

创建一个control

@Controller
public class HelloController { @ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World!";
}
}

直接运行主程序即可

@SpringbootApplication

//@SpringBootApplication
//等与springboot的配置类 + 自动配置开启 + 组件扫描范围
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.wang")
public class SpringbootSpringboot1Application {

主程序原理

之前:

public class SpringbootSpringboot1Application {

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

之后:

public class MainApplication {
public static void main(String[] args) {
//1、返回IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//2、查看IOC容器中的bean
String[] beanDefinitionNames = run.getBeanDefinitionNames();
for (String i:beanDefinitionNames){
System.out.println(i);
}
//3、从容器中获取自定义的bean
Pet pet = run.getBean("pet", Pet.class);
System.out.println("pet------------>>>>>"+pet);
}
}

可以理解为得到的run实例化对象就是一个IOC容器可以从里面获取到所有bean实例

3、yaml使用

流程:

导入提示配置依赖

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--这个提示包是开发工具,不需要打包-->
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

创建pojo

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person { private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet> allPets;
} @Data
public class Pet {
private String name;
private Double weight;
}

对应的yaml文件

# yaml表示以上对象
person:
userName: zhangsan
boss: false
birth: 2019/12/12 20:12:33
age: 18
pet:
name: tomcat
weight: 23.4
interests: [篮球,游泳]
animal:
- jerry
- mario
score:
english:
first: 30
second: 40
third: 50
math: [131,140,148]
chinese: {first: 128,second: 136}
salarys: [3999,4999.98,5999.99]
allPets:
sick:
- {name: tom}
- {name: jerry,weight: 47}
health: [{name: mario,weight: 47}]

注意:

1、在添加了这个配置之后不会立刻出现提示,需要重启项目

2、pojo类上加了@ConfigurationProperties(prefix = "person")之后必须要还要加上一个@Component,让IOC容器能够扫描到这个类

@ConfigurationProperties

该注解有一个prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以放在方法上

可以从注解说明中看到,当将该注解作用于方法上时,如果想要有效的绑定配置,那么该方法需要有 @Bean 注解且所属Class需要有 @Configuration 注解。

5\热部署(dev-tool)

Restart VS Reload

<!--dev-tool-自动重启,ctrl+F9快捷键自动重启-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

ctrl+F9快捷键快速重启

如果需要真正的热部署需要付费加载JRebel插件

6\JSR303验证

在pojo的类的对应属性使用JSR303验证的对应注解,可以保证无论哪种方式创建这个pojo都会进行这个注解的验证,从而达到验证的效果

@Data
@Validated
public class Person {
private String name;
private Integer age;
/*验证这个属性是否为邮箱格式,message属性为报错信息(默认为不是一个合法的邮箱格式*/
@Email(message = "邮箱格式有误")
private String email;
}

还有其他验证

Null检查
@Null(message = "") 验证对象是否为null
@NotNull(message = "") 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank(message = "") 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty(message = "") 检查约束元素是否为NULL或者是EMPTY. Booelan检查
@AssertTrue(message = "") 验证 Boolean 对象是否为 true
@AssertFalse(message = "") 验证 Boolean 对象是否为 false 长度检查
@Size(min=, max=,message = "") 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=,message = "") Validates that the annotated string is between min and max included. 日期检查
@Past(message = "") 验证 Date 和 Calendar 对象是否在当前时间之前
@Future(message = "") 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern(regexp = "",message = "") 验证 String 对象是否符合正则表达式的规则 数值检查
建议使用在包装类型(Integer这类),不建议使用在int类型上,
因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min(message = "") 验证 Number 和 String 对象是否大等于指定的值
@Max(message = "") 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax(message = "") 值不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin(message = "") 值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits(message = "") 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=,message = "") 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Range(min=, max=,message = "") 检查数字是否介于min和max之间. @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber(message = "") 信用卡验证
@Email(message = "") 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=,message = "") @URL(protocol=,host=, port=,regexp=, flags=,message = "")

7\多环境配置

properties文件时:一个主要配置文件,去调用另外俩(多)个配置文件

yaml文件时:用---分割代码块,第一个代码块去调用另外两(多)个代码块

properties作为配置文件时

在resource下创建三个properties文件:

  • application.properties
  • application-dev.properties
  • application-test.properties

application.properties文件中配置我们需要的另外俩格配置文件

#比如在配置文件中指定使用dev环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到dev下的配置了;
spring.profiles.active=dev

yaml作为代码块时


server:
port: 8081
#选择要激活那个环境块
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev #配置这个环境的名称
---
server:
port: 8084
spring:
profiles: prod #配置这个环境的名称

springboot-1-入门的更多相关文章

  1. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  2. SpringBoot Docker入门,SpringBoot Docker安装

    SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...

  3. 01-项目简介Springboot简介入门配置项目准备

    总体课程主要分为4个阶段课程: ------------------------课程介绍------------------------ 01-项目简介Springboot简介入门配置项目准备02-M ...

  4. SPRING-BOOT系列之SpringBoot快速入门

    今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...

  5. SpringBoot快速入门01--环境搭建

    SpringBoot快速入门--环境搭建 1.创建web工程 1.1 创建新的工程. 1.2  选择maven工程,点击下一步. 1.3 填写groupid(maven的项目名称)和artifacti ...

  6. SpringBoot 初入门

    SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...

  7. springBoot从入门到源码分析

    先分享一个springBoot搭建学习项目,和springboot多数据源项目的传送门:https://github.com/1057234721/springBoot 1. SpringBoot快速 ...

  8. SpringBoot基础篇-SpringBoot快速入门

    SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...

  9. Springboot快速入门篇,图文并茂

    Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...

  10. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

随机推荐

  1. win10下安装jmeter

    http://note.youdao.com/noteshare?id=49a31ed75e139e03055bb6fc79342ac2&sub=EFA14CDD037C4EA4BE2A42B ...

  2. 保存数据到csv文件报错:Permission denied: './train_data.csv'

    如果你此前已经输出,创建了文件,很有可能是你打开了此文件,导致写入不进去报错,关掉文件重新运行程序即可!

  3. 你知道这高效的12个Java精品库嘛?

    01. JUnit 第一个要说的当然是JUnit了,JUnit毕竟是Java圈目前最知名及常用的测试框架.JUnit之所以能够成为Java圈中最热门的测试库,是因为对于很多项目而言,单元测试是非常重要 ...

  4. 「10.16晚」序列(....)·购物(性质)·计数题(DP)

    A. 序列 考场不认真读题会死..... 读清题就很简单了,分成若干块,然后块内递增,块外递减,同时使最大的块长为$A$ B. 购物 考场思路太局限了,没有发现性质, 考虑将$a_{i}$,排序前缀和 ...

  5. 基于websocket vue 聊天demo 解决方案

    基于websocket vue 聊天demo 解决方案 demo 背景 电商后台管理的客服 相关技术 vuex axios vue websocket 聊天几种模型 一对一模型 一对一 消息只一个客户 ...

  6. 不会 Web 开发,也能让数据“动”起来的开源项目!

    本文面向有 Python 基础的小伙伴,有 Web 基础的更好 作者:HelloGitHub-吱吱 这里是 HelloGitHub 推出的<讲解开源项目>系列,今天要向小伙伴们介绍的是一个 ...

  7. Linux网络基础TCP/IP

    1.osi:七层 上三层,主要是用户层面;下四层是实际进行数据传输物理层: 设备之间比特流的传输,物理接口,电气特性等 端口号的作用 通过IP找到服务器,通过端口号找到具体哪个服务.网页服务的端口号是 ...

  8. Spring WebFlux 教程:如何构建反应式 Web 应用程序

    Spring WebFlux 教程:如何构建反应式 Web 应用程序 反应式系统提供了我们在高数据流世界中所需的无与伦比的响应能力和可扩展性.然而,反应式系统需要经过专门培训的工具和开发人员来实现这些 ...

  9. redis实现分布式锁天然的缺陷

    redis分布式锁基本原理 采用 redis 实现分布式锁,主要是利用其单线程命令执行的特性,一般是 setnx, 只会有一个线程会执行成功,也就是只有一个线程能成功获取锁: 看着很完美 看看可能有什 ...

  10. Java并发之ReentrantLock源码解析(四)

    Condition 在上一章中,我们大概了解了Condition的使用,下面我们来看看Condition再juc的实现.juc下Condition本质上是一个接口,它只定义了这个接口的使用方式,具体的 ...