第一个程序(阿里云版本)
-
新建模块,选择Spring Initializr,并配置相关基础信息
-
修改后效果
-
选择需要使用的技术集
-
创建控制包,并开发控制器类
-
运行Springboot00102QuickstartApplication
-
当出现一下画面就代表已经运行成功了
入门程序案例
-
parent
-
在pom.xml文件中定义了的父工程,定义了所用坐标的版本号,子工程在添加依赖是就不需要自己手动设置版本号,避免版本冲突问题
-
parent是定义了若干个坐标版本
-
spring-boot-starter-parent(又继承spring-boot-dependencies)
-
使用阿里云的方案(我使用),就没有引入spring-boot-starter-parent的父工程,而是直接引用spring-boot-dencies
-
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
-
starter
-
定义了parent,只是定义了,却没有使用,是谁在使用了?starter
-
starter就是一个包含若干个坐标pom文件,我们去引用对应starter就是使用对应的坐标
-
<modelVersion>4.0.0</modelVersion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.4.2</version> <name>spring-boot-starter-web</name>
-
-
引导类
-
@SpringBootApplication public class Springboot00102QuickstartApplication { public static void main(String[] args) { SpringApplication.run(Springboot00102QuickstartApplication.class, args); } }
-
SpringBoot的引导类是Boot
工程的执行入口
,运行main方法就可以启动项目 -
SpringBoot工程
运行后创建并初始化Spring容器
,扫描引导类所在包加载bean -
引导类靠@SpringBootApplication注解在作用
-
@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} )} )
-
-
内嵌tomcat
-
在入门案例中,我们没有去配置tomcat,而tomcat像一个对象用坐标的方式,使用starter将tomcat而配置,程序里面包含了一个服务器
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.4.2</version> <scope>compile</scope> </dependency>
-
基础配置
-
三种属性配置方式
- propertise(传统)
- yml(主流)
- yaml
-
注意: 在springboot中配置对应的starter,后才可以使用对应的配置属性
- 使用关键字 + idea提示方式配置
-
三种配置方式的优先级
- properties >yml >yaml
- 当属性相同时,采用以上的优先级覆盖, 不同属性相互都能起作用
-
YAML,(YAML Ain’t Markup Language),一种数据序列化格式
- 注意: 使用空格来进行缩进表示层层级关系
-
读取yaml单一属性数据
-
准备一些数据(按规则书写)
-
server: port: 8080 message: county: china province: zhejiang area: hui
-
-
读取
@RestController public class BookController { @Value("${message.county}") //el private String county1; //这个变量名可以不与yml文件中变量名相同 @GetMapping("/book") public String getById() { System.out.println("springboot is running"); return county1; } }
-
总结:用@Value进行数据注入,采用
${一级属性名.二级属性名}
来读取yml的属性
-
-
yaml文件中的变量引用
-
数据准备
baseDir: c:\win10 #应用上面baseDir tempDir: ${baseDir}
-
取数据
-
-
读取yaml全部属性数据(解决用变量名读取数据,在变量名有若干个情况下)
-
@Autowired private Environment env;
-
读取数据
env.getProperty("baseDir");
-
-
读取yaml引用类型属性数据(解决在yaml文件中只想读取某部分属性)
-
数据准备
datasource: driver: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: root
-
构造pojo类,用于分装上面数据
public class MyDataSource { //重要,这里的变量名必须和配置文件中的变量名相同 private String driver; private String url; private String username; private String password; public MyDataSource() { } public MyDataSource(String driver, String url, String username, String password) { this.driver = driver; this.url = url; this.username = username; this.password = password; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "MyDataSource{" + "driver='" + driver + '\'' + ", url='" + url + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
-
由spring帮我们去加载数据到对象中去,一定要告诉审判日给你加载这组信息(用注解)
@Component //将对象加载到spring容器中去 @ConfigurationProperties("datasource") //datasource的变量名和配置文件也要相同
-
使用时候从spring中直接去获取信息使用(@Autowired)
-
整合第三方技术
-
整合Junit
-
junit配置整合比较特殊,在新建spring boot工程时候即使不勾选任何技术集,也会自己配置测试对应的starter.
-
原因: 因为是在maven工程下配置,而maven工程的生命周期是包含测试模块,所以不需要我们导入starter
-
@SpringBootTest//test核心注解
-
重点:如果测试类在springboot启动类的包或者子包中,可以省略启动类的设置,也就是省略classes的设定
-
如图,将引导包放在bay下将会报
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
-
-
MyBatis整合
- 在技术集中选择MyBatis框架和MySql驱动
- 添加配置(数据库连接)
- 写持久层(dao)代码
-
Diurd整合
- mvnresposity寻找坐标,导入即可
-
整合第三方中间件总结
- 导入对应的starter,如果springboot没有对应starter,就去mvnresposity
- 在yml文件中写相关的配置
- 使用第三方中间件