首页 > 其他分享 >SpringBoot学习笔记

SpringBoot学习笔记

时间:2024-03-30 22:56:12浏览次数:37  
标签:jdbc SpringBoot spring 配置 boot 笔记 学习 class

ssm:https://www.bilibili.com/video/BV1Fi4y1S7ix/

SpringBoot2:https://www.bilibili.com/video/BV15b4y1a7yG/

1、概述

  1. Spring配置繁琐,依赖设置繁琐;SpringBoot可以简化Spring的初始搭建和开发过程
  2. SpringBoot优点:自动配置。起步依赖,辅助功能(内置tomcat服务器等)
  3. 最简SpringBoot程序所包含的基础文件:pom.xml文件和Application类
  4. SpringBoot官网(https://start.spring.io/)能快速创建SpringBoot项目
启动类

启动类是Boot工程的执行入口,运行main方法就可以启动项目,SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

2、配置说明

配置参考文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

SpringBoot提供了多种属性配置方式,其中.properties>.yml>.yaml;共存叠加

.yml是一种数据学序列化格式,数据存储格式;容易与脚本语言交互,以数据为核心,轻格式

.yml语法规则:

  1. 大小写敏感;属性层级关系使用多行描述,每行结尾使用冒号结束
  2. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格;属性值前面添加空格
  3. #表示注释
改端口
#application.properties
server.port=80
#application.yml
server:
	port: 81
#application.yaml
server :
	port: 82
日志输出
logging.level.root = debug
logging.level.com.lm = warn
yml文件例子
user:
	name:aa
	age:1
----------------
a:
	b:
		c:
----------------
# 数组
likes:
	- game
	- music
----------------
likes:[game,music]
----------------
# 对象
users:
	-
        name:zs
        age:12
    -
    	name:ls
        age:13
----------------
users:[{name:zs,age:12},{name:ls,age:13}]
----------------
date: 2018-02-09
datetime: 2018-02-17-T15:02:31+08:00
null:~
获取配置数据
lesson: SpringBoot
server:
	port: 80
enterprice:
	name: lm
	age: 20
	subject:
		- java
		- 前端
  1. 使用@Value读取单个数据
  2. Environment对象读取全部数据
import org.springframework.core.env.Environment

@RestController
@RequestMapper("/books")
public class BookController{
    @Value("${lesson}")
    private String lesson;
    @Value("${server.port}")
    private Integer port;
    @Value("${enterprice.subject[0]}")
    private String subject_00;  

    @Autowired
    private Environment environment;
    @GetMapper("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.print(environment.getProperty("lesson"));
        System.out.print(environment.getProperty("sever.port"));
        System.out.print(environment.getProperty("enterprice.subject[0]"));
    }
}

定义一个实体类封装指定数据,自定义对象封装指定数据;按照对象的形式读出来:可以将配置快速转成配置对象

  1. @Component定义为spring管控的bean;由spring帮我们去加载数据到对象中
  2. @ConfigurationProperties配置属性,指定要加载的数据,绑定配置信息到封装类中【当前对象从配置中读属性】
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
	private String name;
    private Integer age;
    private String[] subject;
}
@RestController
@RequestMapper("/books")
public class BookController{
    @Autowired
    private Enterprise enterprise;

    @GetMapper("/{id}")
    public String getById(@PathVariable Integer id){
        System.out.println(enterprise);
    }
}
自定义对象封装数据警告解决
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
变量引用!!!
baseDir: c:\windows
tempDir: ${baseDir}\temp      # ${属性名}引用属性   c:\windows\temp     
tempDir: "${baseDir}\temp"   # 解析\t,转义字符生效  c:\windows    emp     

这些是YAML格式的配置示例,它们定义了一些属性并进行了引用。

  1. baseDir: c:\windows:这一行定义了一个属性 baseDir,它的值是 c:\windows。这表示基础目录在Windows操作系统中为 C:\Windows

  2. tempDir: ${baseDir}\temp:这一行定义了一个属性 tempDir,它的值使用了${baseDir}来引用先前定义的 baseDir 属性。${baseDir}将会被解析为其对应的值,即c:\windows,所以整个表达式解析后为 c:\windows\temp。这表示临时目录为 C:\Windows\temp

  3. tempDir: "${baseDir}\temp":与第二个示例类似,但是使用了双引号将整个值括起来。在YAML中,使用双引号可以防止特殊字符的转义。因此,即使\t看起来像是一个转义字符(代表制表符),但由于双引号的存在,它将被当作两个字符处理,所以最终的值会保留\t而不是将其解释为制表符。所以这行实际表示的值是 c:\windows\temp,并且 \t 不会被解析为制表符。

总之,这些示例展示了如何在YAML配置中定义属性以及如何引用先前定义的属性,并展示了如何使用双引号来保留特殊字符的原始值。

3、依赖说明

jetty服务器

内嵌Tomcat是SpringBoot的辅助功能之一,将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理

jetty更轻量级,负载性能低,undertow和tomcat差不多

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactedId>spring-boot-starter-web</artifactedId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactedId>spring-boot-starter-tomcat</artifactedId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactedId>spring-boot-starter-jetty</artifactedId>
</dependency>

4、注解说明

@RestController@controller@ResponseBody 的结合

@Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。

@ResponseBody 类中所有的API接口返回的数据,不论Map或是其他Object,它会以Json字符串的形式返回给客户端

@PathVariable 可以将 URL 中占位符参数绑定到控制器方法的形参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的形参中。

@Repository写在数据层上的,把类定义为一个bean,和@Component一样

5、整合说明

整合Mybatis
  1. SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区或在MySQL数据库端配置时区

因为强制使用的是MySQL8的驱动,强制要求设置时区

服务器时区:

 url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC

驱动类过时:

driver-class-name: com.mysql.cj.jdbc.Driver

映射配置: (XML/注解)【核心配置: 数据库连接相关信息】

  • 定义数据层接口写sql语句并映射配置@Mapper
  • 定义类与表头信息一致并测试
整合Mybatis-Plus

idea创建boot项目时换一个网址:https://start.aliyun.com或maven工程导入对应依赖

#配置mp相关配置,指定表名开头
mybatis-plus:
	global-config:
		db-config:
			table-prefix: tb1_
整合Druid
druid-spring-boot-starter
# 方法1
spring:
	datasource:
		type: com.alibaba.druid.pool.DruidDataSource
# 方法2(推荐)
spring:
	datasource:
		druid:
			driver-class-name: ...
Spring整合JUnit
@RunWith(SpringJUint4ClassRunner.class)         //设置运行器
@ContextConfiguration(classes = SpringConfig.class)  // 加载环境
public class xxxText{
    @Autowired
    private A a;
    @Test
    public void testSave(){
        a.save();
    }
}
SpringBoot整合JUnit
<dependency>
    <groupId>org.springframewor.bootk</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

启动类就起到了配置类的作用,他会把他所在的包及子包扫描一遍;测试类会默认加载引导类,初始化spring的环境

测试类会加载同层包下的带有@SpringBootApplication里的@SpringBootConfiguration里的配置信息

如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定,如果不在一个包下就指定参数@SpringBootTest(classes = 引导类名.class)

@SpringBootTest
class test{
    @Autowired
    private A a;
    @Test
    public void save(){
        a.save();
    }
}
Spring整合Mybatis

SpringConfig:导入JdbcConfig,导入MyBatisConfig

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath;jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class}
public class SpringConfig {
    
}

JDBCConfig;定义数据源(加载properties配置项: driver、url、username、password)

jdbc.properties配置文件

public class JdbcConfig {
    @Value("$jdbc.driver}")
    private String driver;
    @Value("${jdbc.ur1}")
    private String url;
    @Value("${jdbc.username}")
    private String userName ;
    @Value("${jdbc.password}")
    private String password;
    
    @Bean
    public DataSource getDataSource(){
    	DruidDataSource ds = new DruidDataSource();
    	ds.setDriverClassName(driver);
    	ds.setUr1(ur1);
    	ds.setUsername(userName);
    	ds.setPassword(password);
    	return ds;
    }
}
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db
jdbc.username=root
jdbc.password=1234

MyBatisConfig:定义SqlSessionFactoryBea,定义映射配置

@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
	SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
	ssfb.setTypeAliasesPackage("com.itheima.comain");
	ssfb.setDataSource(dataSource);
	return ssfb;
}
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.itheima.dao");
    return msc;
}
SpringBoot整合mybatis

SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区或在MySQL数据库端配置时区

加个@Mapper就可以

<dependency>
    <groupId>org.mybatis.spring.boot</groupId
        ><artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url:jdbc:mysql: //localhost:3306/ssm_db?serverTimezone=UTC
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

6、多环境开发

使用---区分多环境

yml配置格式
#设置启用的环境
spring:
	profiles:
		active: dev
		
---
#开发
spring:
  config:
    activate:
      no-profiles: dev
server:
  port: 8080
---
#生产
spring:
  config:
    activate:
      no-profiles: pro
server:
  port: 8081
---
#测试
spring:
  config:
    activate:
      no-profiles: test
server:
  port: 8082
properties配置格式

主配置文件application.properties:

#设置启用的环境
spring.profiles.active=dev

环境分类配置文件application-dev.properties:

server.port=8080

环境分类配置文件application-pro.properties:

server.port=8081

环境分类配置文件application-test.properties:

server.port=8082
多环境命令行启动参数配置
  1. 当配置中有中文,idea改成utf-8
  2. 带参数启动SpringBoot优先级较高
    1. 参数优先级顺序:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

测试环境:

java -jar 文件名.jar  --spirng.profiles.active=test

临时改端口:

java -jar 文件名.jar  --spirng.profiles.active=test  --server.port=88
多环境开发兼容问题(maven/boot)

都配置多环境开发时的兼容问题

boot应该听从maven的设定,maven传递的属性:maven中设置多环境属性xml,SpringBoot中引用maven属性yml


资源文件处理的插件

解析{},加载yml里的配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <useDefaultDelimiters>true</useDefaultDelimiters>
    </configuration>
</plugin>

pom.xml

<!--多环境-->
<profiles>
    <!--开发环境-->
    <profile>
        <id>dev</id>
        <properties>
            <profile.active>dev</profile.active>
        </properties>
    </profile>
    <!--生产环境-->
    <profile>
        <id>pro</id>
        <properties>
            <profile.active>pro</profile.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!--测试环境-->
    <profile>
        <id>test</id>
        <properties>
            <profile.active>test</profile.active>
        </properties>
    </profile>
</profiles>

修改yml

spring:
  profiles:
    active: ${profile.active}
配置文件分类

测试时要修改的临时属性太多java xxxxxxxx --xxx --xxx --xxx --xxx,使用配置文件启动

1级与2级留做系统打包后设置通用属性(上线);3级与4级用于系统开发阶段设置通用属性(开发)

SpringBoot中的4种配置文件

  1. file : config/application.yml(最高)(jar包同级目录)
  2. file : application.yml
  3. classpath: config/application.yml
  4. classpath: application.yml(最普通的配置文件)

标签:jdbc,SpringBoot,spring,配置,boot,笔记,学习,class
From: https://www.cnblogs.com/lm02/p/18106171

相关文章

  • java9到java17的新特性学习--github新项目
    ......
  • 【图论】3.30学习记录 k短路(A*算法)
    从最短路说起的k短路3.26看了最短路和次短路。我们发现次短路实际上就是把最短路给破坏掉然后跑最短路...那我想...是不是破坏(k-1)次就能得到k短路呢,很显然是的,但是复杂度比较高,(因为一次dij是O(nlogn)级别的,次短路的话最坏要跑m次当最短路有m条边的时候)那么k比较大的时候就......
  • 【测试开发学习历程】Python数据类型:字符串-str(下)
    目录5.5format()方法5.6count()方法5.7join()方法5.8replace()方法5.9split()方法5.10rstrip()/lstrip()/strip()方法5.11capitalize()方法5.12upper()5.13lower()5.14title()5.15endswith()方法5.16startswith()方法5.17以is开头的方法5转义字符......
  • jupyter笔记
    1、安装:通过conda安装。新建虚拟环境:condainstall-njupyterpython=3.10#一开始用的3.11.8,各种不服,最终发现有个组件需要<3.11进入虚拟环境:condaactivatejupyter安装:condainstalljupyterlab补全:根据运行时报错安装缺失的组件:condainstalljupyter_server_fileid......
  • SpringBoot 手动控制事务,即编程式事务
    前置知识Spring事务默认只在发生未捕获的RuntimeException时才回滚SpringAOP异常捕获需要被拦截的方法显式的抛出异常。默认情况下AOP只捕获RuntimeException类的异常,但可以通过配置来捕获特定的异常手动控制事务案例在日常开发中,如果没办法使用@Transactional注......
  • Living-Dream 系列笔记 第52期
    本期题目均为\(\texttt{II}\)类树形dp,即树上多重背包。T1令\(dp_{i,j}\)表示以\(i\)为根的子树保留\(j\)条边的最大边权。答案即为\(dp_{1,q}\),因为不管\(1\)连着的边选/不选,答案都会上传到根。当然如果你愿意,求一遍\(\max\{dp_{i,q}\}\)也行。易得初始状态:......
  • java毕业设计企业人事管理系统(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的快速发展,企业管理逐渐向数字化、智能化方向迈进。人事管理作为企业内部管理的重要组成部分,其信息化水平直接关系到企业的运行效率和管理水......
  • java毕业设计汽车零件厂绩效管理(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代企业管理中,绩效管理是连接企业战略目标与员工个人目标的桥梁,它对于提升员工工作积极性、优化团队协作效率以及推动企业持续发展具有重要作用。对于......
  • C语言学习笔记day17
    1.结构体类型得定义      struct结构体名{         数据类型1成员变量1;         数据类型2成员变量2;         数据类型3成员变量3;         ...      };2.结构体变量得定义      存......
  • Blazor学习记录_8.CSS隔离和代码隔离_异常处理_流式渲染
    19.CSS隔离和代码隔离19.1代码隔离使用C#partial关键字,创建一个与razor文件同名,扩展名加.CS的C#类文件,然后把razor文件中的@code中的代码迁移至cs文件中。注意命名空间、泛形参数声明、依赖注入的迁移19.2CSS隔离如同前面代码隔离文件一样,我们创建一个组件样式文......