SpringBoot简单入门
SpringBoot 入门
假装 == == 是高亮 黄色高亮!
后面的配置文件信息等可以用到再学,舍弃部分
@SpringBootApplication : 标注在一个类上,说明这个类是SpringBoot的主配置类,SpringBoot
就应该运行这个类的main方法来启动Spring应用 它唯一
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
-
@SpringBootConfiguration : 标注在某个类上,表示该类是SpringBoot的某个配置类
-
@Configuration: 用来标注一个类,表名这个类是Spring容器的配置类----相当于配置文件,配置类也是配置容器中的一个组件
-
@EnableAutoConfiguration: 开启自动配置功能
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
-
@AutoConfigurationPackage: 自动配置包
- @Import(AutoConfigurationPackages.Registrar.class): Spring的底层注解,给容器导入一个类
- AutoConfigurationPackages.Registrar.class: 这个类,会将主配置类,也就是@SpringBootApplication 标注的类,所在的包及所有子包中的组件扫描到Spring容器中
-
@Import(AutoConfigurationImportSelector.class)
- AutoConfigurationImportSelector.class 将所有需要导入的组件以全类名的方式返回;这些组件就会添加到Spring容器中
-
这个类会自动给Spring容器到导入和很多的自动配置类(xxxAutoConfiguration:就是给容器中导入这个场景所需要的所有组件,并且配置好)
-
该配置文件所对应的整合包如下
-
SpringBoot在启动的时候回自动从Jar包中的META-INF/spring.factories的配置文件中获取AutoConfigurationImportSelector指定的值,并且将这些值导入到容器中,自动配置类就生效了
- AutoConfigurationImportSelector.class 将所有需要导入的组件以全类名的方式返回;这些组件就会添加到Spring容器中
以前需要我们手动配置的东西,现在自动配置类都会帮我们直接配置
SpringBoot 描述:
SpringBoot 从Spring4.0 开始
对Spring整个技术栈进行整合
优点:
- 快速搭建项目
- 嵌入式Servlet容器,无需打包
- 自动的版本控制
- Starters自动配置,简化开发,也可以修改默认配置
- 无需配置XML,无代码生成
- 提供生产环境的监控
- 于云计算天然集成
微服务介绍
微服务:是一种架构风格
一个应用, 应该是一组小型服务,每个不同的服务之间通过HTTP的方式进行沟通
每一个服务都应该是可替换的,可独立的,可升级的 独立单元
一. SpringBoot简单使用
1. SpringBoot 编写 HelloWord
1.1 创建一个Maven工程,导入依SpringBoot赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
1.2 编写一个主程序
/**
* @SpringBootApplication 来标注一个Spring主程序类 说明这是一个Springboot应用
*/
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
1.3 编写业务代码
@Controller
public class Hello2Controller {
@RequestMapping("h")
@ResponseBody
public String test() {
return "hello Spring boot2";
}
}
业务代码,可以使用SpringMvc的原始注解,也可以使用SpringBoot提供的注解,
SpringBoot的注解对原始MVC注解做了简化 但是他们功能相同
1.4 部署SpringBoot项目
- 打jar包
<!--这个插件可以将应用打成一个可执行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
-
通过命令 java -jar xxxxx.jar 启动项目
访问浏览器即可
1.5 引入父项目
版本仲裁包 spring-boot-dependencies
这个项目是所有starter的父项目,对其他的starter做依赖管理
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent>
spring-boot-starter-parent项目所依赖的父项目,还依赖另外一个项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
spring-boot-dependencies
该项目中定义了对jar包版本控制的管理
他才是来真正管理SpringBoot所有的依赖版本的东西
1.6 导入的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
-
spring-boot-starter-web: SpringBoot场景启动器;
- 帮我们导入了 web项目所需要的所有必须包,并且依赖的版本都收到仲裁器控制
-
SpringBoot 将所有需要的包,都抽取成一个个spring-boot-starter-* , 如果有需要就进行引入
2. 快速创建一个SpringBoot项目
2.1.选择创建Spring initalizr工程,所有的ide工具都支持
2.2填写坐标名,项目名不支持大写
2.3选择构建项目想要加入的功能
2.4然后下一步下一步,项目ide回去官网自动下载项目配置
2.5导入成功后的项目全貌
这样整个架子就直接搭建好了,我们只需要写自己的逻辑就可以了
2.6 resource文件夹中的目录结构
- static : 保存所有的静态资源; js css images
- templates : 保存所有的模板页面;(Spring boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freenaker,thymeleaf);
- appliocation.properties: Spring 应用的配置文件;
二.SpringBoot配置
1. SpringBoot的全局配置文件
配置文件名称固定
- application.properties
- application.yml
支持两种类型的配置文件,他们作用相同
配置文件的作用: 修改SpringBoot配置的默认值,对其默认配置进行覆盖
1.1 两种配置文件的区别
application.properties
server.port=80
application.yml
server:
port: 81
😅:但是吧,两个配置文件一起使用,优先读取的是application.properties
1.2 获取配置文件信息
- YAML配置文件
persion:
name: 张三
age: 18
fav:
- arr1
- arr2
- arr3
maps: {say: love,do: fuck}
birth: 1921/1/1
- properties配置文件
persion.name=李四
persion.age=19
persion.birth=2018/1/1
persion.fav=arr1,arr2
persion.maps.say=love
persion.maps.do=fuck
- 注解@ConfigurationProperties(prefix = "persion")
- 这个配置问价注解,只有加到一个Bean中才会有效 所有加上一个@Component注解
@Component
@ConfigurationProperties(prefix = "persion")
public class Persion {
private String name;
private int age;
private String[] fav;
private Map maps;
private Date birth;
/**get...set...**/
}
- 导入配置文件处理器,绑定配置文件就会有提示
- 前提是在类中使用@ConfigurationProperties注解绑定了,然后在配置文件中就会有自动提示
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 不适用配置文件引入注解使用@Value
public class Persion {
@Value("${persion.name}")
private String name;
@Value("#{100*2}")
private int age;
@Value("1,2,3")
private String[] fav;
private Map maps;
private Date birth;
@ConfigurationProperties和@Value的区别
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入 | 一个个指定 |
松散语法 | 支持 | 不支持 |
SPEL | 不支持 | 支持 |
JSR303校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- JSR303校验
@NotNull(message="名字不能为空") @Max(value=120,message="年龄最大不能查过120") @Email(message="邮箱格式错误") ============================================================== 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 @Length(min=, max=) Validates that the annotated string is between min and max included. 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期 @Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。 数值检查 建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null @Min 验证 Number 和 String 对象是否大等于指定的值 @Max 验证 Number 和 String 对象是否小等于指定的值 @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 @Digits 验证 Number 和 String 的构成是否合法 @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Range(min=, max=) 被指定的元素必须在合适的范围内 @Range(min=10000,max=50000,message=”range.bean.wage”) @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=)
2. 引入局部(外部)配置文件
@ConfigurationProperties 注解默认的读取路径是application.properties/yml
2.1使用@PropertySource配置指定的数据配置文件
@Component
//指定了配置文件,还需要指定配置文件中的前缀,没有的话可以省略
@ConfigurationProperties(prefix = "persion")
@PropertySource("classpath:name.properties")
public class Persion {
2.2 使用@ImportResource 导入Spring.xml配置文件
- Spring的配置文件beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.msk.springboot01.Persion" id="persion"/>
</beans>
- 在主配置类中引入该文件
@SpringBootApplication
@ImportResource(locations = "classpath:beans.xml")
public class SpringBoot01Application {
public static void main(String[] args) {
SpringApplication.run(SpringBoot01Application.class, args);
}
}
- 测试该bean persion是否存在
@Autowired
ApplicationContext ioc;
@Test
public void isSave() {
boolean persion = ioc.containsBean("persion");
System.out.println("persion = " + persion);
}
outPut: persion = true
3. 编写配置类和引入
3.1 @Configuration 表名该类是一个配置类
@Configuration
public class MyAppconfig {
}
3.2 @Bean 给Spring配置一个Bean
这个Bean在spring中的名字就是方法名
@Configuration
public class MyAppconfig {
@Bean
public Persion persion() {
return new Persion();
}
}
4. 配置文件中使用占位符
#server.port=80
persion.name=李四${random.uuid}
persion.age=19
persion.birth=2018/1/1
persion.fav=arr1,arr2
persion.maps.say=love
persion.maps.do=fuck
outPut: Persion{name='李四f388a722-96ba-48fd-9fef-7c4618e28a93', age=19...}
4.1 随机数
${random.value},${random.int},${random.long},${random.int(10)},${random.int[1024,4123]}
- 如果使用占位符导入的对象没有值,可以使用: 冒号配置默认值