什么是springboot
1、什么是springboot
springboot属于spring的一个子项目,可以说是基于spring,主要是为了简化配置而诞生的一个解决方案框架,它可以利用引入starter而引入一组starter,从而简化了坐标的引入,同时简化配置使我们能更快速的专注单体程序(微服务)本身的开发。
2、springboot和spring及springCloud什么关系
简单点可以说 springboot基于spring,而springCloud属于微服务治理,springCloud则又是基于springboot
3、初识springboot案例
请参考 关于文中 :关于SpringBoot数据源的引入及第三方组件使用
4、springBoot自动配置类流程
springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中,然后通过yml 属性配置文件进行属性注入。
5、属性注入(使用到的依赖 参考下文引入的相关依赖)
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.0.Final</version>
</dependency>
5.1) 属性校验需要使用到校验器(依赖包)
5.2) 需要在对应的类上增加 @Validated 属性上则科室使用 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.3) 如果是(如:把B类作为A类的属性)内部类,或者外部类。则需要在属性上增加增加 @Valid ,并在内部属性、或者外部类 增加对应条控制 @NotNull、@Max、 @Min()、@NotEmpty 等等
5.4) 从配置文件yaml中属性绑定可以使用@ConfigurationProperties(jiac.name) 用于类上或者 @Value(“${jiac.age}”) 用于属性上,需要注意的是 @Value 不能用于从配置文件yaml中绑定复杂的数据类型
6、关于yaml中profile的用法
6.1)可以在yaml中使用 spring.peofiles.activ=test 启用
6.2)可以在主方法入口处通过参数配置 如 -Dspring.profiles.active=pro , -Dacme.enabled=false(用于覆盖配置文件中的属性)
7、springboot自动配置大体流程
7.1)springboot在做自动配置的时候,它会扫描classpath下面所有的jar,从jar中加载到它的自动配置类,然后把这些自动配置类以bean的形式注入到Ioc容器之中。然后我们开发人员在开发程序的时候 想使用哪个配置类,就可以在yaml 中进行相关的属性配置,就可以是直接使用某个配置类等等。
7.2)关于注解的说明
7.2.1) @SpringBootConfiguration 把启动类作为配置类
7.2.2) @EnableAutoConfiguration --开启自动配置类类
7.2.2.1) @AutoConfigurationPackage --自动配置包
7.2.2.2) @Import(AutoConfigurationImportSelector.class) --引入自动配置类选择器(根据引入的starter 通过@import筛选出对应的配置类,创建对应的bean,并注册到Ioc容器之中)
8、关于SpringBoot数据源的引入及第三方组件使用
8.1 使用数据源(DataSource)
8.2 使用数据库链接驱动(mysql)
8.3 使用第三方数据源组件
8.4 使用日志组件
如引入如下坐标即可使用(具体参见坐标注释说明):
<!--springboot依赖的坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据源坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--mysql坐标--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--指定数据源类型,如未引入 则默认使用HikariDataSource--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!--日志坐标--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.15</version></dependency><!--用于yaml属性配置时 提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.7.2</version></dependency><!--用于省略getter setter 方法,简化代码,带需要在实体类上标注@Data注解 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator 校验器--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.2.0.Final</version></dependency>
9 检验将属性填充至配置类
9.1)编写主启动类
9.2)编写配置类(如果不使用第三组件的数据源则可省略该配置类)
9.3)编写普通的controller
9.4) 编写yml属性配置文件
9.5) 以Debug启动测试程序访问测试地址http://localhost:8080/test(请在controller类中打一个断点,也可忽而略,主要为了验证属性被注入成功)
package cn.tx.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @ClassName SpringApplication* @Description TODO* @Author jiac* @Date 2022/8/7 18:54* @Version 1.0**/@SpringBootApplication
public class SpringApplications {public static void main(String[] args) {SpringApplication.run(SpringApplications.class,args);}
}
package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ClassName DataSourceConfig* @Description TODO* @Author jiac* @Date 2022/8/7 19:46* @Version 1.0**/@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入public DruidDataSource dataSource(){return new DruidDataSource();}
}
package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;/*** @ClassName HelloController* @Description TODO* @Author jiac* @Date 2022/8/7 18:54* @Version 1.0**/@RestController
public class HelloController {@Autowired //自动装配 或者通过构造方法注入private DataSource dataSource;@RequestMapping("test")public String hello(){System.out.println(dataSource);return "ok";}
}
#格式一定需要注意,同一层级一定需要对齐,否则测试会报错
spring:datasource:url: jdbc:mysql://localhost:3306/tx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456
#com.zaxxer.hikari.HikariDataSource 为默认数据源
#type: com.zaxxer.hikari.HikariDataSourcetype: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000min-evictable-idle-time-millis: 300000validation-query: SELECT 1 FROM DUAL
10springboot整合IdbcTemplate测试
10.1)整个IdbcTemplate简单点理解就是对数据源坐标、连接数据库坐标引入 至pom文件并在yml属性配置文件进行配置
10.2)整合JdbcTemplate进行数据库测试(由于前面驱动包均已准备就绪,此处只需要将JdbcTemplate注入使用即可,如下:)
访问 http://localhost:8080/jdbctemp
package cn.tx.boot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;/*** @ClassName * @Description TODO* @Author jiac* @Date 2022/8/7 23:30* @Version 1.0**/@RestController
public class JdbcTempController {// @Autowired //自动装配 或者通过构造方法注入private JdbcTemplate jdbcTemplate;public JdbcTempController(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@RequestMapping("jdbctemp")public List<Map<String, Object>> query(){List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from t_user");return maps;}
}
访问如下:
11springboot整合Mybatis测试(使用DruidDataSource,测试单表)
10.1)springboot 整合mybatis的核心分为5步:
1、导入驱动包
2、建立实体类(因为使用了@Data注解 则可省略Setter和Getter方法)
3、建立接口mapper 将该接口加入容器(@mapper) 并编写对应的增删改查
4、编写DruidDataSource 配置类
5、编写controller 进行测试 (因为测试所以忽略了Service层) ,浏览器访问
<!--springboot整合mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency>
package cn.tx.boot.model;
import lombok.Data;
import java.util.Date;@Data
public class Person {private int pid;private String pname;private String addr;private int gender;private Date birth;
}
package cn.tx.boot.mapper;import cn.tx.boot.model.Person;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import java.util.List;@Mapper
public interface PersonMapper {@Select("select * from person a where a.pid=#{pid}")public Person selectById(int pid);@Select("select * from person")public List<Person> selectAll();@Options(useGeneratedKeys = true,keyProperty = "pid")@Insert("insert into person(pid,pname,addr,gender,birth) values(#{pid},#{pname},#{addr},#{gender},#{birth})")public void insert(Person p);
}
package cn.tx.boot.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ClassName DataSourceConfig* @Description TODO* @Author jiac* @Date 2022/8/28 22:46* @Version 1.0**/@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource") //进行第三方组件绑定 将yml属性注入public DruidDataSource dataSource(){return new DruidDataSource();}
}
package cn.tx.boot.controller;import cn.tx.boot.mapper.PersonMapper;
import cn.tx.boot.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @ClassName MybatisController* @Description TODO* @Author jiac* @Date 2022/8/28 22:33* @Version 1.0**/@RestController
public class MybatisController {@Autowiredprivate PersonMapper personMapper;@RequestMapping("selectById")public Person selectById(){return personMapper.selectById(1);}@RequestMapping("selectAll")public List<Person> selectAll(){return personMapper.selectAll();}@RequestMapping("insert")public void insert(){Person person=new Person();person.setPname("学java");personMapper.insert(person);}
}
。。。。。。。。。。。。。。。学习更新待续。
注:(学习记录是为了更好的留下印象,便于后续查看,也是希望在这个过程中能更好的了解这一部分知识,如有错误之处,请即时指出,请大家相关讨论交流)
什么是springboot相关推荐
- 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...
- Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器
Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...
- SpringBoot部署脚本,拿走即用!
一个可以直接拿来使用的shell脚本,适用于springboot项目 #!/bin/bash # 这里可替换为你自己的执行程序,其他代码无需更改,绝对路径相对路径均可. # 若使用jenkins等工具 ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- springboot整合swagger2之最佳实践
来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成.功能测试功能框架. 一 ...
- SpringBoot中实现quartz定时任务
Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...
- Springboot 利用AOP编程实现切面日志
前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...
- 【Springboot】日志
springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层): JCL(Jakarta Commons Logging) ...
- 【springboot】配置
配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...
- 【springboot】入门
简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...
最新文章
- 自研DevOps实践
- linux 删除小于、大于固定大小的文件
- 对python乱序字符串检查算法研究
- [树套树] 网络管理
- java基本特性_Java面试总结之Java基础
- [react] react中的setState缺点是什么呢?
- Qt文档阅读笔记-Qt工作笔记-QTableWidget::selectedItems()官方解析与实例(如何进行多选)
- bzoj1951 [Sdoi2010]古代猪文 lucas+CRT+exgcd
- iOS 11更新第6个开发者测试版,变化最大的竟然是App Store标识
- 「非推广」为什么我说本是设计师专属的『数位板』,也是程序猿+科研狗的开会神器?
- 四元数-Quaterion
- 深入理解JS对象和原型链
- 前端实现序列帧_最简单的序列帧动画canvas插件
- quartus联合仿真步骤
- 矢量绘图工具 Ipe
- 天行健---宇宙的生与死
- 关于勒索病毒 Ransom:Win32.WannaCrypt 解决方案的最后一次说明
- 【英语语法入门】第41讲 原形不定式(2)感官动词
- 北斗卫星重要信息汇总
- Security:osquery 介绍