springboot-1-入门
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 #配置这个环境的名称