0


SpringBoot

基础:

1,创建SpringBoot的方法:

1,基于idea自己创建

2,基于SpringBoot官网创建

3,基于将idea中SpringBoot官网改为阿里云网站创建

4,使用maven工程仿建

2,Idea中隐藏指定文件或指定类型文件

Setting+File Types->Ignored Files and Folders

输入要隐藏的文件名,支持*号文件

3,统一springboot的版中依赖,插件的版本

spring boot的官网中统一版本

继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

内对应完整的版本信息,和坐标引用信息;

阿里云中的继承

继承parent的形式也可以采用引入依赖的形式实现效果

<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>

<artifactId>spring-boot-starter</artifactId>

定义当前项目的依赖坐标,减少依赖配置

4,内置服务器

tomcat 默认,jetty,undertow

内嵌tomcat工作原理是将tomcat服务器作为对象运行,并将该对象交给Spring容器管理

5,rest风格

6,基础配置

属性配置

配置文件分类

优先级从上至下依次变低

application.properties

application.yml

application.yaml

不同配置文件中相同配置按照优先级相互覆盖,不同配置文件中不同配置全部保留

yaml文件

yaml语法规则:

字面值表示方式:

boolean:TRUE
#TRUE,true,True,FALSE,false,False均可
f1oat:3.14
#6.8523015e+5#支持科学计数法
int:123
#0b10100111010010101110
#支持二进制、八进制、十六进制
nu11:~
#使用表示muL(
string:HelloWorld
#字符串可以直接书写
string2:"Hello World"
#可以使用双引号包裹特殊字符
date:2018-02-17
#日期必须使用yyyy-MM-dd格式
datetime:2018-02-17T15:02:31+08:00#时间和日期之间使用T连接,最后使用+代表时区

1.yaml语法规则
大小写敏感
属性层级关系使用多行描述,每行结尾使用冒号结束
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许
使用Tab键)

属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
。#表示注释
2.注意属性名冒号后面与数据之间有一个空格
3.字面值、对象数据格式、数组数据格式(略)

yml数据读取

1,使用Environment对象封装全部配置信息
2.使用@Autowired自动装配数据到Environment对象中

@Value("${country}")
private String country1;
@Value("${user.name1}")
private String name;
@Value("${user.age}")
private int age;
@Value("${tempDir}")
private String tempDir;
//使用自动装配将yml文件中所有的数据全部封装到下面的变量中
@Autowired
private Environment env;

7,整合第三方技术

test包整合junit

测试类

需要引导类(main包下)和测试类(test包下)在相同的包路径下

若不在:解决方案:@SpringBootTest(class=引导类)

或@ContextConfiguration(class=引导类)

总结:

1.测试类如果存在于引导类所在包或子包中无需指定引导类
2,测试类如果不存在于引导类所在的包或子包中需要通过c1 asses属
性指定引导类

1.导入测试对应的starter(pom.xml)
2,测试类使用测试类用@SpringBootTest修饰
3.使用自动装配注解的形式添加要测试的对象

boot整合mybatis

I,勾选MyBatis技术,也就是导入MyBatis对应的starter
2,数据库连接相关信息转换成配置(application中添加数据库信息)
3.数据库SQL映射需要添加@Mapper被容器识别到(Dao层)

当mysql版本为5时的调整:

1.MySQL8.X驱动强制要求设置时区
修改url,添加serverTimezone设定
修改MySOL数据库配置(略)】
2.驱动类过时,提醒更换为com.mysql..cj,jdbc.Driver

boot整合mybatis-plus:

与mybatis的区别:

1,导入坐标不同

2,数据层实现简化

使用mybatis-plus

1,在idea中使用官网

在下面的网址中搜索mybatis-plus找到后点进去,用3.4.3版本查找到坐标

https://mvnrepository.com

如下

<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>

替换

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

2,使用阿里云

直接导入mybatis-plus

boot整合druid

1,先导入druid的坐标,即

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.22</version>
</dependency>

2,再变更druid的配置方式

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      ur1:jdbc: mysq1://localhost:3306/ssm?serverTimezone=UTC
      username: root
      password: root
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 11235813
    type: com.alibaba.druid.pool.DruidDataSource

基于SpringBoot的SSMP整合案例

1,手工导入starter坐标(2个)
2,配置数据源与MyBatisPlus对应的配置
3.开发Dao接口(继承BaseMapper<泛型>)
4.制作测试类测试Dao功能是否有效

为Mp开日志

# id-type: auto使用id自增策略
# 进行日志配置
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus:
  global-config:
    db-config:
设置数据库表的前缀
      table-prefix: t_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

分页操作:

1,设置拦截器,作用:内部是动态的拼接sql语句,limit。。。

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

测试类中

@Test
void testGetPage() {
    IPage page = new Page(1, 1);
    bookDao.selectPage(page, null);
    System.out.println(page.getPages());最大页码值
    System.out.println(page.getCurrent());当前页面
    System.out.println(page.getSize());每页展示多少,条
    System.out.println(page.getTotal());每页数据总量
    System.out.println(page.getRecords());数据总量
}

分页功能修改bug:

分页功能

wrapper条件查询:

@Test
void testGetBy(){
    QueryWrapper<Book> qw=new QueryWrapper<>();
    qw.like("book_name","界");
    bookDao.selectList(qw);
}
//使用Lambda表达式
@Test
void testGetBy1(){
    String name="界";
    LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<>();
    //当外界传入那么需要判断name是否为空,否则查不到数据
   /* **if(name!=null) {
        lqw.like(Book::getBookName, "界");
    }***/
    lqw.like(Strings.isNotEmpty(name),Book::getBookName,"Spring");
    bookDao.selectList(lqw);
}

service层的快速开发 :

1.使用通用接口(ISerivce<T>)快速开发Service
2,使用通用实现类(ServiceImpl<M,T>)快速开发ServiceImpl
3,如果接口提供的现成方法不能满足业务需求,可以在通用接口基础上做功能重载或功能追加
4,注意重载时不要覆盖原始操作,避免原始提供的功能丢失

前后端联调

前端发送异步请求,调用后端接口
//列表
getAll(){
axios.get("/books").then((res)=>{
console.log(res.data);
});
},

清除数据

//重置表单
resetForm(){
this.formData {}
},
//弹出添加窗口
handleCreate(){
this.dialogFormVisible true;
this.resetForm();
},

//添加
handleAdd ()
//发送异步请求
axios.post("/books",this.formData).then((res)=>{
//加架操作成功,关闭弹层,显示数据
if(res.data.flag){
this.dialogFormVisible false;
this.$message.success("添加成功");
}else
this.$message.error("添加失败");
}
}).fina11y(()=>{
this.getAll();
})
},

删除操作

其中then为成功操作

catch为删除操作

删除操作步骤

请求方式使用Delete调用后台对应操作
删除操作需要传递当前行数据对应的1d值到后台
删除操作结束后动态刷新页面加载数据
根据操作结果不同,显示对应的提示信息
删除操作前弹出提示框避免误操作

修改功能

修改功能

同一将执行成功与否的信息交由后台代码执行 :

业务层接口功能开发:

控制层中的分页条件查寻

项目中的异常处理配置:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//作为springmvc的异常处理器
//@ControllerAdvice
@RestControllerAdvice
public class ProjectExceptionAdvice {
    //拦截所有的异常信息
    @ExceptionHandler(Exception.class)
    public R doException(Exception ex){
        //记录日志
        //通知运维
        //通知开发
        //下面的一段代码,防止万一出异常了,控制台还有信息,必不可少
        ex.printStackTrace();**//打印出异常**
        return new R("服务器异常,请稍后重试!");
    }
}

运维实用篇

命令提示符窗口显示没有主清单属性

没有加入maven的插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.itheima.SSMP.SsmpApplication</mainClass>
<skip>false</skip>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

BOOT-INF文件

jar包描述文件(MANIFEST.MF)
普通工程
Manifest-Version:1.0
Implementation-Title:springboot 08 ssmp
Implementation-Version:0.0.1-SNAPSHOT
Build-Jdk-Spec:1.8
Created-By:Maven Jar Plugin 3.2.0
基于spring-boot-maven-plugin打包的工程
Manifest-Version:1.0
Spring-Boot-Classpath-Index:BOOT-INF/classpath.idx
Implementation-Title:springboot_08_ssmp
Implementation-Version:0.0.1-SNAPSHOT
Spring-Boot-Layers-Index:BOOT-INF/layers.idx
Start-Class:com.itheima.SSMPApplication
Spring-Boot-Classes:BOOT-INF/classes/
Spring-Boot-Lib:BOOT-INF/1ib/
Build-Jdk-Spec:1.8
Spring-Boot-Version:2.5.4
Created-By:Maven Jar Plugin 3.2.0
Main-Class:org.springframework.boot.loader.JarLauncher//jar启动器

Windonws端口被占用

命令行启动常见问题及解决方案
Windonws端口被占用
#查询端口
netstat -ano
#查询指定端口
netstat-ano | findstr "端口号"
#根据进程PID查询进程名称
tasklist |findstr"进程PID号"
#根据PID杀死任务
taskkill -F -pid"进程PID号"
#根据进程名称杀死任务
taskkill -f -t -im"进程名称"//任务名称

临时属性:

配置临时端口:

1,使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件
中的属性
2,临时属性添加方式:java -jar工程名.jar-属性名=值
3,多个临时属性之间使用空格分隔
4.临时属性必须是当前boot工程支持的属性,否则设置无效

springboot项目在linux系统中启动:

配置文件分类:

1.SpringBoot中4级配置文件

1级:file:config./application.yml【最高】
2级:file:application.yml
3级:classpath:config/application.yml
4级:classpath:application.yml【最低】

2.作用:

1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

自定义配置文件:

1,文件的名字

properties和yml文件均支持

2,文件的路径

支持写多个配置文件的格式 ,优先级:最后的配置优先

自定义配置文件总结:

1.配置文件可以修改名称,通过启动参数设定
2,配置文件可以修改路径,通过启动参数设定
3,微服务开发中配置文件通过配置中心进行设置

1.SpringBoot在开发和运行环境均支持使用临时参数修改工程配置
2.SpringBoot.支持4级配置文件,应用于开发与线上环境进行配置的灵
活设置
3,SpringBoot支持使用自定义配置文件的形式修改配置文件存储位置
4,基于微服务开发时配置文件将使用配置中心进行管理

springboot多环境开发:

1.多环境开发需要设置若干种常用环境,例如开发、生产、测试环境
2.yaml格式中设置多环境使用---区分环境设置边界
3.每种环境的区别在于加载的配置属性不同
4.启用某种环境时需要指定启动时使用该环境

防止配置泄露:测试,开发,生产分开配置

多环境分组管理 :

常用的方法

使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

注意:

当主环境dev与其他环境有相同属性时,主环境属性生效;其他环境中有相同属性时,最后加载的环境属性生效

# 不常用                         
#spring:
#  profiles:
#    active: dev
#    include: devMVC,devDB

便于线上维护管理

spring:
  profiles:
    active: dev
    group:
      "dev": devDB,devMVC
      "pro": proDB,proMVC

多环境开发控制:

注意:在pom.xml中当改变活动文件dev为pro时clean还无法改变时,使用maven中的compile手工执行compoile加载文件,才可以切换

<!--    设置多环境-->
    <profiles>
        <profile>
            <id>env_dev</id>
            <properties>
                <profile.active>dev</profile.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>env_pro</id>
            <properties>
                <profile.active>pro</profile.active>
            </properties>
        </profile>
    </profiles>

1,当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,
SpringBoot使用@.,@占位符读取Maven对应的配置属性值
2.基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试
工程时pom.xml每次更新需要手动compile方可生效

日志:

设置日志级别

# 打开debug 
logging:
  level:
    root: info
#debug: true 开启debug级别
# 设置分组,对某个组设置日志级别
logging:
  group:
    ebank: com.itheima.profiles.controller,com.itheima.profiles.service
    iservice: com.alibaba
  level:
    root: info
    ebank: warn

快速创建日志对象:

第一种:控制层继承一个类如下:

public class BaseClass {
    private Class clazz;
    public static Logger logger;
    public BaseClass(){
        clazz=this.getClass();
        logger= LoggerFactory.getLogger(clazz);
    }
}

**第二种:使用注解: **

第一:<!--        添加lombok坐标  :不用在控制层写log的代码-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
第二:使用在控制层的接口中使用@Slf4j注解

日志输出格式控制:

PID:进程ID,用于表明当前操作所处的进程,当多服务同时记录日志时,该值可用于协助程序员调试程序
所属类/接口名:当前显示信息为SpringBoot重写后的信息,名称过长时,简化包名书写为首字母,甚至直接删除

%d:日期
%m:消息
%n:换行

server:
  port: 80
# 打开debug
logging:
  group:
    ebank: com.itheima.profiles.controller,com.itheima.profiles.service
    iservice: com.alibaba
  level:
    root: info
    ebank: warn
#debug: true
# 设置某个包的日志级别
#    com.itheima.profiles.controller: debug
    # 设置分组,对某个组设置日志级别
# 设置日志的模板模式
  pattern:
    #console: "%d - %m %n"
**    console: "%d - %clr(%5p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"**

设置日志文件:

单一日志:
logging:
    file:
       name: server.log

日志文件详细设置:

滚动日志:

logging:
file:

     name:  server.log

  
  logback:
     rollingpolicy:
       max-file-size: 1MB
       file-name-pattern: server.%d{yyyy-MM-dd}.%i.log

设置日志文件的最大内存和内存满时自动建立新的文件封装

开发实用篇:

热部署:

手工启动热部署:

第一步:开启开发者工具

<!--        导入热部署的坐标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

第二步:激活热部署

ctrl+F9

或者点击idea上菜单栏Build中的build project

1,开启开发者工具后启用热部署
2.使用构建项目操作启动热部署(Ctr1+F9)
3,热部署仅仅加载当前开发者自定义开发的资源,不加载jar资源

自动开启热部署:

在手工开启热部署的基础上进行如下操作:

手动干预热部署的范围配置:

默认不触发重启的目录列表
/META-INF/maven
/META-INF/resources
/resources
/static
/public
/templates

手动干预:

在配置坐标的基础上进行如下配置:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 11235813
    type: com.alibaba.druid.pool.DruidDataSource
 ** devtools:
    restart:
      # 设置不参与热部署的文件或文件夹
      exclude: static/**,public/**,config/application.yml**

配置高级:

bean的第三方绑定:

添加依赖:lombok和

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>**druid**</artifactId>
    <version>1.1.16</version>
</dependency>

无论是绑定自身的bean还是绑定第三方bean需要该注解:

//@ConfigurationProperties(prefix = "*****配置文件中的属性")
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource() {
    DruidDataSource ds = new DruidDataSource();
    //ds.setDriverClassName("com.mysql.jdbc.Driver");
    return ds;
}

注意:@EnableConfigurationProperties.({要设为bean的类,便于管理,清晰可见,ServerConfig.class})与@Component:(在引导类中设置前者则不能设置该注解,该注解也会将被注解的类设为bean导致bean重复)不能同时使用

//@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServerConfig {
    private String ipAddress;
    private int port;
    private long timeout;
    private Duration serverTimeOut;
    private DataSize dataSize;
}

宽松绑定:

@ConfigurationProperties支持宽松绑定

@Value不支持宽松绑定

注意:绑定前缀名命名规范:仅能使用纯小写字母、数字、下划线作为合法的字符

@Bean
@ConfigurationProperties(prefix = "datasource")//不能用“dataSource”
public DruidDataSource dataSource() {
    DruidDataSource ds = new DruidDataSource();
    return ds;
}

1.@ConfigurationProperties绑定属性支持属性名宽松绑定
2,@Value注解不支持松散绑定
3.绑定前缀命名命名规则

bean的校验:

①:添加JSR303规范坐标与Hibernate校验框架对应坐标

     <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
     <dependency>
         <groupId>javax.validation</groupId>
         <artifactId>validation-api</artifactId>
     </dependency>
<!--提供hibernate框架提供的校验器做实现类-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

②:对Bean开启校验功能

③:设置校验规则

@Validated
public class ServerConfig {
    private String ipAddress;
//③:设置校验规则
   ** @Max(value = 8888,message = "最大值不能超过8888")
    @Min(value = 202,message = "最小值不能低于202")**
    private int port;

yaml语法规则:

八进制:格式:“0(0-7)”

六进制:格式:0x(0-9,a-f)
字面值表达方式
boolean:TRUE #TRUE,true,True,FALSE,false,False.均可
f1oat:3.14 #6.8523015e+5#支持科学计数法
int:123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
nu11:~ #使用~表示null
string:HelloWorld #字符串可以直接书写
string2:"Hello World" #可以使用双引号包裹特殊字符
date:2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime:2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区

加载测试专用属性:

// 注解内的两个属性都是作为更改yml配置文件中的临时属性,其中agrs配置的属性级别更高
@SpringBootTest(properties = {"test.prop=testValue1"},args = {"--test.prop=testValue2"})
class ConfigurationApplicationTests {
    @Value("${test.prop}")
    private String msg;
    @Test
    void contextLoads() {
        System.out.println(msg);
    }
}

加载测试专用配置:

测试类中加载web环境:

测试类中模拟web发送http请求:

测试类产生随机数据:

在配置文件中如下写:

然后在测试类中引入,并自动装配,打印出来。

测试类中不想测试时改变数据库原有数据:

在测试类上添加:

//设置事务回滚,防止测试类改变数据库的数据
@Transactional
若添加如下注解,事务无法回滚
@Rollback(value = false)

数据层解决方案:

内置数据源:

数据源配置
SpringBoot提供了3种内嵌的数据源对象供开发者选择

当druid数据源配置时没有type属性时

并且关闭druid的坐标

系统自动使用内置数据源HikariCp

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 11235813
    //type: com.alibaba.druid.pool.DruidDataSource

在不使用druid时使用hikari:注意:url不能写入hikari中

三种springboot提供的内嵌数据源:

HikariCp
Tomcat提供DataSource
Commons DBCP

SpringBoot提供了3种内嵌的数据源对象供开发者选择
◆HikariCP:默认内置数据源对象
Tomcat提供DataSource:HikariCP不可用的情况下,且在web环境中,将使用tomcat服务器配置的数据源对象
Commons DBCP:Hikari不可用,tomcat数据源也不可用,将使用dbcp数据源
通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,如需配置,在下一级配置中设置具体设定

jdbcTemplate持久化取代:mybatis-plus/mybatis:

jdbcTemplate:相关配置:

内置持久化解决方案jdbcTemplate

关闭mybatis-plus坐标(其中含哟有dbc坐标,jdbc中含有hikari数据源坐标)

//导入jdbc坐标
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
@Test
void jdbcTest(@Autowired JdbcTemplate jdbcTemplate) {
    String sql = "select * from t_book";
    /* //普通方法
    List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
    System.out.println(maps);*/
    RowMapper<Book> rm = new RowMapper<Book>() {
        @Override
        public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
            Book temp = new Book();
            temp.setId(rs.getInt("id"));
            temp.setBookName(rs.getString("book_name"));
            temp.setPrice(rs.getInt("price"));
            temp.setStack(rs.getInt("stack"));
            return temp;
        }
    };
    **//query进行查询操作**
    List<Book> list = jdbcTemplate.query(sql, rm);
    System.out.println(list);
}
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    hikari:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 11235813
      # 最大的连接池数量
      maximum-pool-size: 50
 ** jdbc:
    template:
      fetch-size: -1 # 缓存行数
      max-rows: 500 # 最大行数
      query-timeout: -1 # 查询超时时间**
//存储操作
@Test
void jdbcSave(@Autowired JdbcTemplate jdbcTemplate) {
    String sql = "insert into t_book values(null,'吞噬星空',300,322)";
  **  //update进行增删改操作**
    jdbcTemplate.update(sql);

}

idea内置数据库:

内嵌数据库H2:

现有数据层解决方案技术选型:

Druid+MyBatis-Plus+MySQL

内嵌数据库
SpringBoot提供了3种内嵌数据库供开发者选择,提高开发测试效率
H2 HSQL Derby

关闭mysql驱动坐标 导入h2坐标和jpa 并设置当前项目工程为web环境:spring-boot-starter-web

但spring-boot-starter不能少

 <!--        测试内置数据库 不需要mysql驱动-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
<!--测试内置数据库,需设置web环境-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
访问localhost/h2

**关闭mysql数据源,并添加如下配置 **

server:
  port: 80
spring:
  h2:
    console:
      enabled: true**//默认true为h2数据库开启**
      path: /h2 ** //运行引导类,并输入localhost/h2**
  datasource:
    url: jdbc:h2:~/test
    hikari:
      driver-class-name: org.h2.Driver
      username: sa
      password: 123456

访问用户名sa,默认密码123456

H2数据库线上运行时请务必关闭

将enabled: true 设位false,在上线时关闭。

总结:

数据源配置(Hikari)
持久化技术(JdbcTemplate)
数据库(H2)

NOSQL:

Redis下载与基本使用

Redis是一款key-value存储结构的内存级NoSQL数据库
支持多种数据存储格式
支持持久化
支持集群

下载路径
https://github.com/tporadowski/redis/releases

下载windows版本的Redis-x64-5.0.14.1.msi安装包

在安装路径下打开cmd命令提示符(两个控制台)

服务端启动命令
redis-server.exe redis.windows.conf
客户端启动命令
redis-cli.exe

使用shutdown处理bug

再次登录,就可以了。

若是清屏的话输入clear

windows时输入cls清屏

springboot整合redis:

//导入redis的坐标
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

<!--        导入jedis坐标 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
# 配置redis
spring:
  redis:
    host: localhost
    port: 6379
#    client-type: jedis
    client-type: lettuce
    lettuce:
      pool:
        max-active: 16
    jedis:
      pool:
        max-active: 16

# **使用jdis技术 默认是使用lettuce设置为jedis**

注意:lettuce不存在线程安全问题

idea中实现整合:

一:在创建新的项目时勾选nosql中的第一项

创建后产生的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二:在yml文中进行配置local,port(多余,默认都设置了!)

三:在测试类中进行测试

@Autowired
private RedisTemplate redisTemplate;
//set方法
@Test
void set() {
    ValueOperations ops = redisTemplate.opsForValue();
    ops.set("age", 4);
}

@Test
void get() {
    ValueOperations ops = redisTemplate.opsForValue();
    Object age = ops.get("age");
    System.out.println(age);
}
//hset方法
@Test
void hset() {
    HashOperations ops = redisTemplate.opsForHash();
    ops.put("info","age", 4);
}

@Test
void hget() {
    HashOperations ops = redisTemplate.opsForHash();
    Object val = ops.get("info", "age");
    System.out.println(val);
}

springboot整合mongodb数据库

Mongodb应用场景

最像关系型数据库的非关系型数据库
淘宝用户数据
◆存储位置:数据库
◆特征:永久性存储,修改频度极低
游戏装备数据、游戏道具数据
◆存储位置:数据库、Mongodb
特征:永久性存储与临时存储相结合、修改频度较高
直播数据、打赏数据、粉丝数据
◆存储位置:数据库、Mongodb
◆特征:永久性存储与临时存储相结合,修改频度极高
物联网数据
存储位置:Mongodb
特征:临时存储,修改频度飞速

Windows版Mongo下载
https://www.mongodb.com/try/download

Windows)版Mongo启动
先进行服务端启动
mongod --dbpath=..\data\db(无空格)使用第一次就可以了,db内文件已添加
再进行客户端启动
mongo (--host=127.0.0.1--port=27017)括号内不用写

Mongodb基本操作

注意:在命令提示符窗口中,建立新的数据库时,仅仅只是在内存中建立,无法在硬盘中显示;
新增
db.集合名称.insert/save/insert0ne(文档)
修改
db.集合名称.remove(条件)
删除
db.集合名称.update(条件,{操作种类:{文档}})

常见错误:

@SpringBootTest
class Mongodb5ApplicationTests {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Test
    void contextLoads() {
        Book book=new Book();
        book.setId(1);
        book.setName("springboot");
        book.setType("springboot");
        book.setDescription("springboot");
        mongoTemplate.save(book);
    }
//数据库中原有数据会引起报错,因为原有数据的id不是int类型的
    @Test
    void find(){
        List<Book> all = mongoTemplate.findAll(Book.class);
        System.out.println(all);
    }
报错rg.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.bson.types.ObjectId] to type [int]

spring boot整合ES

分布式全文搜索引擎

使用Apifox中

put http://localhost:9200/books 建立一个数据库之类的东西

{

"mappings":{

    "properties":{

        "id":{

            "type":"keyword"  

        },

        "name":{

            "type":"text",

            "analyzer":"ik_max_word",

            "copy_to":"all"

        },

        "type":{

            "type":"keyword"

        },

        "description":{

            "type":"text",

            "analyzer":"ik_max_word",

            "copy_to":"all"

        },

//将描述和名字内容整合进行分词,都进行查询

        "all":{

            "type":"text",

            "analyzer":"ik_max_word"//分词器

        }

    }

}

}

post http://localhost:9200/books/_doc/1(1代表的是id) 若后面没加数字代表的是随机id代表的是 执行的文档的post操作,将之前的text添加数据也可以是http://localhost:9200/books/_create/1

body类型的raw数据

{
"id":1,
"name":"springboot",
"type":"springboot",
"description":"springboot"
}

get  http://localhost:9200/books/_doc/1 查询单个数据
get http://localhost:9200/books/_search通过该方法查询全部

get http://localhost:9200/books?q=name:springboot

创建文档
POST
http://localhost:9200/books/_doc
#使用系统生成id
POST
http://localhost:9200/books/_create/1
#使用指定id,
POST
http://localhost:9200/books/doc/1
#使用指定id,不存在创建,存在更新(版本递增)

查询文档
GET
http://localhost:9200/books/_doc/1
#查询单个文档
GET
http://localhost:9200/books/_search
#查询全部文档
条件查询
A
GET
http://localhost:9200/books/_search?q=name:springboot
删除文档
DELETE
http://localhost:9200/books/_doc/1

修改文档(全量修改)
PUT
http://localhost:9200/books/_doc/1
name”:"springboot",
type":"springboot",
"description":"springboot"
修改文档(部分修改)
POST
http://localhost:9200/books/_update/1
"doc";{
name":"springboot"
}

将一个book对象转为json格式

1.导坐标

<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency>

2.在测试类中转为json

String json =JSON.toJSONString(book);

springboot缓存作用

使用默认缓存

1,导坐标

<!--        导入缓存需要的坐标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

2,在引导类中加入注解

//允许开启缓存功能
@EnableCaching

3,在服务层使用缓存注解

@Override
//value随便写,key使用#id形式写可以读取到id,存储数据到“cachespace”中
@Cacheable(value = "cacheSpace", key = "#id")
public Book getById(Integer id) {
    return bookDao.selectById(id);
}

SpringBoot提供的缓存技术除了提供默认的缓存方案,还可以对其他缓存技术进行整合,统一接口,方便缓存技术
的开发与管理
Generic
JCache
Ehcache
Hazelcast
Infinispan
Couchbase
Redis
Caffenine
Simple(默认)
memcached Springboot并未提供,但市面上流行

使用ehcache缓存

1.缓存供应商变更:Ehcache

在yml配置文件中进行配置缓存类型和ehcache的xml文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 11235813
    type: com.alibaba.druid.pool.DruidDataSource
#    设置缓存格式默认是simple
  cache:
    type: ehcache
    ehcache:
      config: ehcache.xml
2,导坐标

注意:springboot原本的缓存坐标不能删除,springboot的内置缓存支持更该后的其他缓存类型

<!-- 导入ehcache的坐标,缓存坐标,并不是springboot自带的,还要导入ehcache的xml配置文件-->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
3,导ehcache.xml文件

注意:

<!--     diskPersistent="false"表示的是是否持久化存储-->
<!--单独定义一个缓存与接口层的缓存值相对应:name="smsCode";缓存内容的存在时长timeToLiveSeconds="10"-->
    <cache
        name="smsCode"
        eternal="false"
        diskPersistent="false"
        maxElementsInMemory="1000"
        overflowToDisk="false"
        timeToIdleSeconds="10"
        timeToLiveSeconds="10"
        memoryStoreEvictionPolicy="LRU" />

使用redis格式缓存

1.导入坐标,不用删encache坐标,配置中更该缓存格式就可以

2.启动redis

3,配置redis到yml中

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    username: root
    password: 11235813
    type: com.alibaba.druid.pool.DruidDataSource
  cache:
    type: redis
    redis:
#      是否添加前缀,就是缓存的value值
      use-key-prefix: true
#      是否使用value值的前缀
      cache-null-values: true
#      指定value值的前缀
      key-prefix: ssm_
      time-to-live: 10s
  redis:
    host: localhost
    port: 6379

使用memcached格式缓存

关闭的话就用memcached.exe -d stop进行关闭

SpringBoot未提供对memcached的整合,需要使用硬编码方式实现客户端初始化管理
1,导入坐标,因为没有整合,所以到maven仓库中复制

2,springboot并没有整合memcached,所以直接硬编码,无法在直接yml文件中配置

@Component
@ConfigurationProperties(prefix = "memcached")
@Data
public class XMemcachedProperties {
    //设置端口号,地址
    private String servers;
    //设置数据连接池的数量
    private int poolSize;
    //设置超时时间
    private long opTimeout;
}
# 在yml文件中自己配,springboot不提供
memcached:
  servers: localhost:11211
  poolSize: 10
  opTimeout: 3000
@Configuration
public class XMemcachedConfig {
    @Autowired
    private XMemcachedProperties memcachedProperties;
    //装上memcached的服务,还要告诉服务器的地址和端口在builder方法中
    @Bean
    public MemcachedClient getMemcachedClient() throws IOException {
        MemcachedClientBuilder memcachedClientBuilder=new XMemcachedClientBuilder(memcachedProperties.getServers());
        memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());
        memcachedClientBuilder.setOpTimeout(memcachedProperties.getOpTimeout());
        MemcachedClient memcachedClient=memcachedClientBuilder.build();
        return memcachedClient;
    }
}

使用jetCache格式缓存

jetCache设定了本地缓存与远程缓存的多级缓存解决方案
本地缓存(1oca1)
LinkedHashMap
Caffeine
远程缓存(remote)
Redis
Tair

jetcache在yml中的配置属性网上找

想实现缓存,要将是对象时可序列化的

第一点:

对象要序列化

public class Book **implements Serializable **

第二点:

jet cache:
#  statIntervalMinutes: 1
  local:
    default:
      type: linkedhashmap
#      键转换器,解决对象转为String类型,无论远程还是进程都要配置
      keyConvertor: fastjson
  remote:
    default:
      type: redis
      host: localhost
      port: 6379
      **keyConvertor: fastjson
      valueEncode: java
      valueDecode: java**
      poolConfig:
        maxTotal: 50
    sms:
      type: redis
      host: localhost
      port: 6379
      poolConfig:
        maxTotal: 50

spring的task使用

1,在引导类中 添加

//开启定时任务
@EnableScheduling

2,在一个class类中

@Component
public class MyBean {
//表示加载任务的时间间隔
    **@Scheduled(cron = "0/1 * * * * ?")**
    public void print(){
        System.out.println(

//表示当前线程的名字

**Thread.currentThread().getName()**+
"spring task run...");
    }

}

在yml文件中task的相关配置

activemq的安装

activemq的使用:

1,安装软件

2,导坐标

3,配置

spring:
  activemq:
    broker-url: tcp://localhost:61616
  jms:
#    发布订阅模式,不是点对点行式
    pub-sub-domain: true
    template:
      default-destination: itheima
  rabbitmq:
    host: localhost
    port: 5672
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: order

rocketmq:
  name-server: localhost:9876
  producer:
    group: group_rocketmq

4,设置监听,一发消息,就往下执行

//@Component
public class MessageListener {
    //jms监听器
  **  @JmsListener**(destination = "order.queue.id")
    **@SendTo**("order.other.queue.id")
    public String receive(String id){
        System.out.println("已完成短信发送业务,id:"+id);
        return "new:"+id;
    }
}

spring整合ribbitmq

RabbitMQ基于Erlang语言编写,需要安装Erlang,并配置其环境变量path和erlang_home

登录ribbitmq的密码和用户名都为guest

服务管理可视化(插件形式)
查看已安装的插件列表
rabbitmq-plugins.bat list
开启服务管理插件
rabbitmq-plugins.bat enable rabbitmq_management
访问服务器
http://localhost:15672
服务端口:5672,管理后台端口:15672
用户名&密码:guest

可以手动在任务管理器中手动开启或停止

访问不了的可以重启

springboot整合kafka

springbootadmin

Spring Boot Admin,开源社区项目,用于管理和监控SpringBoot应用程序。客户端注册到服务端后,通过HTTP
请求方式,服务端定期从客户端获取对应的信息,并通过U界面展示对应信息。
使用spring-boot-admin时要设置其版本与springboot的版本一致

1,在pom中导入admin的坐标****,和web的坐标

2,配置yml文件中的端口为8080

3,在引导类中添加@EnableAdminServer的注解

在命令提示符窗口数据人jconsole,是Java提供的监控平台

C:\Users\魏正想>jconsole

** 终于结束了!**

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/Wzx198012/article/details/139032007
版权归原作者 Wzx198012 所有, 如有侵权,请联系我们删除。

“SpringBoot”的评论:

还没有评论