Spring Boot学习笔记(1)
- 1.环境
- 1.win
- 2.mac
- 3. IDEA
- 2.知识点
- 1.Record类
- 2.Switch开关表达式
- 3. var和sealed
- 4.springboot
- 5.启用lombok
学习资料: 官网, 手册, 视频。
1.环境
1.win
1.下载vscode
2.安装jdk,我电脑有这个环境,没有的可以搜一下,记得配置环境变量;然后如果电脑里有多个jdk的话,切换的时候在环境变量里把JAVA_HOME
的值变成你要的版本,我现在用的是17版本,所以是C:\Program Files\Java\jdk-17.0.4.1
。查看:java -version
3.安装maven,然后配置环境变量path,可以参考博文,我的版本3.9.4,然后在conf/settings.xml 里面配置本地仓库地址和jdk版本:
<localRepository>D:\repository</localRepository>
<profiles>
<profile>
<id>java-17</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</profile>
</profiles>
并修改阿里云镜像:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置完之后可以mvn -version
查看maven版本和配置的jdk版本
4.在vscode里面安装插件:Java Extension Pack(Java扩展)和Spring Boot Extension Pack(Spring Boot扩展)和Lombok Annotations Support for VS Code。
5.配置vscode中配置:设置,扩展,java debugger,edit in settings.json,添加:
"java.configuration.maven.userSettings": "D:\\Softwares\\apache-maven-3.9.4\\conf\\settings.xml",
"maven.executable.path": "D:\\Softwares\\apache-maven-3.9.4\\bin\\mvn",
"java.home":"C:\\Program Files\\Java\\jdk-17.0.4.1",
6.创建Spring Boot项目
Ctrl+Shift+p输入Spring选择greate a Maven project,java,填写Groupid和项目名称等信息,选择Jar包,我的jdk是17,选择spring web,然后在跳出来的文件框里选择项目保存地址。
DevTools(代码修改热更新,无需重启)、Web(集成tomcat、SpringMVC)、Lombok(智能生成setter、getter、toString等接口,无需手动生成,代码更简介)、Thymeleaf(模板引擎)。
然后打开这个项目,先测试一下,在src\main\java\com\公司域名\项目名\controller\HelloController.java里面写:
package com.wlw.demo2.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello world";
}
}
然后运行主文件,就可以在http://localhost:8080/hello查看到hello world。
这里修改一下pom.xml里面的一些配置文件:
<java.version>17</java.version>
7.项目打包的话用:mvn clean package
把项目打成可执行的jar包,然后运行java -jar demo.jar
启动项目。
● 官方提供的场景:命名为:spring-boot-starter-*
● 第三方提供场景:命名为:*-spring-boot-starter
集中式管理配置,只需要修改application.properties
文件
2.mac
1.安装jdk:先去官网下载jdk,然后安装,我装的jdk20。
配置环境变量:
输入/usr/libexec/java_home -v 20
查看jdk20版的安装目录,然后打开环境变量配置文件:vim ~/.bash_profile
,然后在里面配置刚才查的jdk的安装目录:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
输入:source ~/.bash_profile
让环境变量生效,然后输入java -version
就可以查看到自己的java版本(20.0.2)。
2.安装maven:先去官网下载,然后解压这个包(右键,open with,archive utility),将文件夹放到自己保存的地方。
然后开始配置maven的环境,vim ~/.bash_profile
,
export MAVEN_HOME=/Users/zoe/Documents/springboot_files/apache-maven-3.9.4
export PATH=$MAVEN_HOME/bin:$PATH
输入:source ~/.bash_profile
让环境变量生效,然后输入mvn -version
就可以查看到自己的java版本(3.9.4)。
这里我是在Bash shell里面修改了这些,但我有时也会用Zsh shell,所以将jdk和maven的环境变量也加入到zsh shell里:
vim ~/.zshrc
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_HOME=/Users/zoe/Documents/springboot_files/apache-maven-3.9.4
export PATH=$MAVEN_HOME/bin:$PATH
source ~/.zshrc
最后对maven的conf里面的setting文件里和win做一样的修改,我的里面他已经默认用jdk20了,所以现在只需要设置一个仓库就可以:<localRepository>Users/zoe/Documents/springboot_files/repository </localRepository>
。
3.在vscode里面安装插件,然后配置:设置,扩展,java debugger,edit in settings.json,添加:
"java.configuration.maven.userSettings": "/Users/zoe/Documents/springboot_files/apache-maven-3.9.4/conf/settings.xml",
"maven.executable.path": "/Users/zoe/Documents/springboot_files/apache-maven-3.9.4/bin/mvn",
"java.home": "/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home"
4.创建项目测试:
command+shift+p:greate a Maven project,然后同上。
3. IDEA
感觉都是用IDEA,所以给电脑也下了一个,首先去官网,下载安装idea,创建maven工程,选择自己电脑的jdk位置,用org.apache.maven.archetypes:maven-archetype-quickstart,打开工程后打开setting里面的Build,Execution,Deployment里面的BuildTools里面的Maven,然后在Maven home path里面选择自己下载的maven地址,然后settings file可以选择自己maven地址里面的conf/settings.xml。最后再看一下Maven里面的runner里面的jdk是不是自己本地的版本。最后再打开刚才配置的maven道德配置文件setting.xml(D:\Softwares\apache-maven-3.9.4\conf\setting.xml),给里面设置自己的本地仓库地址和阿里云镜像。
2.知识点
1.Record类
1.Record类通常用于表示具有固定属性的数据对象,自动生成一个构造函数,用于初始化对象的属性,提供了默认的实现,如构造函数、equals()、hashCode() 和 toString() 方法以及获取属性的公共访问器。
创建:
package org.example.pk1;
public record Student(Integer id,String name,String email,Integer age) {
}
然后使用junit4.12进行测试,这里需要在pom里面修改一下版本然后更新库。
在类名上(Alt+Enter)选择Create Test,JUnit4。
在测试类里(Alt+Insert)选择TestMethod,快速生成测试方法。
//1.使用record类创建对象
Student zs=new Student(1,"张三","11@qq.com",18);
Student ls=new Student(2,"李四","22@qq.com",19);
//2.使用record对象的tostring方法
System.out.println("张三:"+zs.toString());//张三:Student[id=1, name=张三, email=11@qq.com, age=18]
//3.公共访问器获取属性值
System.out.println(zs.name());//张三
//4.equals方法
System.out.println(zs.equals(ls));//false
2.record 类可以包含实例方法和静态方法,就像普通的类一样。
public record Student(Integer id, String name, String email, Integer age) {
//1.实例方法,用对象访问
public String concat(){
return String.format("姓名是%s,年龄是%d",this.name,this.age);
}
//2.静态方法,类访问
public static String emailToUpper(String email){
return Optional.ofNullable(email).orElse("no email").toUpperCase();
}
}
在test里面分别用对象和类访问
@Test
public void test2() {
Student zs=new Student(1,"张三","11@qq.com",18);
//1.使用对象,调用实例方法
System.out.println(zs.concat());//姓名是张三,年龄是18
}
@Test
public void test3() {
//2.使用类,调用静态方法
System.out.println(Student.emailToUpper("zs@qq.com"));//ZS@QQ.COM
}
3.构造方法:紧凑的,规范的,定制的。
4.record类的接口实现:当一个类声明它将实现一个接口时,它需要提供接口中定义的所有抽象方法的具体实现。
首先定义接口和接口要实现的方法:
package org.example.pk1;
public interface PrintInterface {
//1.定义接口内的方法
void myprint();
}
然后创建record类实现接口,定义接口方法的具体实现:
package org.example.pk1;
import java.util.StringJoiner;
public record ProducRecord(Integer id, String name, Integer num) implements PrintInterface {
@Override
public void myprint() {
StringJoiner j=new StringJoiner("&");
String s=j.add(id.toString()).add(name).add(num.toString()).toString();
System.out.println("商品信息是"+s);
}
}
最后在测试类里,使用对象调用接口方法:
@Test
public void test4(){
ProducRecord p1=new ProducRecord(1,"手机",50);//商品信息是1&手机&50
p1.myprint();
}
5.record可以局部使用,嵌套使用,instanceof。
2.Switch开关表达式
1.Switch 新的语法:case label -> 表达式
@Test
public void test5() {
int week=2;
String out="";
switch(week){
case 1,7 -> out="今天休息";
case 2,3,4,5,6->out="今天工作";
default -> throw new RuntimeException("无效周日期");
}
System.out.println(out);
}
2.yeild 让 switch 作为表达式,能够返回值:变量 = switch(value) { case v1: yield 结果值; case v2: yield 结果值;case v3,v4,v5… yield 结果值
@Test
public void test6() {
int week=7;
String out=switch(week){
case 1,7:yield "休息";
case 2,3,4,5,6:yield "工作";
default:yield "错误格式";
};
System.out.println(out);
}
3.switch 表达式中使用 record,结合 case 标签-> 表达式,yield 实现复杂的计算。
3. var和sealed
1.Text Block 文本块:使用三个双引号字符括起来的字符串
2.var 声明局部变量:var 标识符声明具有非空初始化式的局部变量
3.sealed 密封类:主要特点是限制继承,Java 中已有final 关键字,修饰类不能被继承和 private限制私有类;
而sealed 作为关键字可在 class 和 interface 上使用,结合 permits
关键字,定义限制继承的子类,子类声明有三种
final
终结,依然是密封的
sealed
子类是密封类,需要子类实现
non-sealed
非密封类,扩展使用,不受限
4.springboot
1.脚手架
Spring Initializr 脚手架的 web 地址: https://start.spring.io/
阿里云脚手架:https://start.aliyun.com
2.运行和打包
A.开发工具,例如 IDEA 执行 main 方法
B.Maven 插件 mvn spring-boot:run
C:打包后:java -jar XXX.jar
,这里首先在pom.xml里面做一点儿配置:
<packaging>jar</packaging>//1.将工程打包成jar包的形式
<build>
<finalName>myjavajar</finalName>//2.打包成jar包的名字
...
</build>
//3.在maven的Lifecycle里面clean一下,然后选择package打包,就会在项目的target目录下生成jar包
java -jar myjavajar.jar//4.在命令行里运行jar包
3.配置文件
配置:properies 或 yaml(yml)文件
使用:@Value(”${key:默认值}“)
4.Environment
外部化的抽象,是多种数据来源的集合。从中可以读取 application 配置文件,环境变量,系统属性。使用方式在 Bean 中注入Environment,注入环境对象的注解是:@Autowired
,然后调用它的 getProperty(key)
方法。
5.多环境配置
Spring Boot 规定环境文件的名称 application-{profile}.properties(yml)。其中 profile 为自定义的环境名称,推
荐使用 dev 表示开发 ,test 表示测试。prod 表示生产,feature 表示特性。 profile 名称是自定义的。Spring Boot
会加载 application 以及 application-{profile}两类文件。配置文件里:spring.config.activate.on-profile:XXX(比如dev)
,在application里面配置激活的是哪个环境:spring.profiles.active:XXX(比如dev)
6.读取多个配置文件数据:@ConfigurationProperties(prefix="XXX")
属性是非静态的。