SpringBoot3条记
简介:springboot整合了springframework,整合了许多设置,让我们可以或许快速创建一个以springframework为底子的项目。
标题:
到现在为止,你已经学习了多种设置Spring步调的方式。但是无论利用XML、注解、Java设置类照旧他们的混实用法,你都会以为设置文件过于复杂和繁琐,让人头疼!
办理:
SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(阐明:SpringBoot底层是Spring),大多数 SpringBoot 应用只须要编写少量设置即可快速整合 Spring 平台以及第三方技能!
SpringBoot总结:简化开辟,简化设置,简化整合,简化摆设,简化监控,简化运维。
快速入门
父工程的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- springboot(将springboot提供的底子包做父工程) -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
</parent>
<groupId>com.atguigu</groupId>
<artifactId>springboot-base-quick-01</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 导入对应的启动器 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
启动类
/**
* 创建一个启动类
* 步调:
* 在该类上加上@SpringBootApplication代表此类是启动类
* 该注解的作用:
* ①代表此类事设置类,
* ②自动加载设置 @EnableAutoConfiguration 自动加载其他设置类
* ③@ComponentScan 默认会扫描当前包/子包的注解
* 在方法中通过 SpringApplication调用run()方法,传入当前类.class与args
* 作用:
* ①创建ioc容器
* ②启动内置的web服务
* 当运行该类时,自动创建ioc容器,启动tomcat服务器软件
* 只要在启动类雷同的包或子包下加的注解就会被自动扫描
*/
@SpringBootApplication//启动类
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);//自动创建ioc容器,启动tomcat服务器软件
}
}
总结:
1. 为什么依靠不须要写版本?
- 每个boot项目都有一个父项目`spring-boot-starter-parent`
- parent的父项目是`spring-boot-dependencies`
- 父项目 **版本仲裁中心**,把全部常见的jar的依靠版本都声明好了。
- 比如:`mysql-connector-j`
https://i-blog.csdnimg.cn/direct/92ac9b92a5f24b409308059ea6289545.png
在父工程中已经做了依靠管理,以是在导入依靠时就不须要写版本了。
的
2 启动器(starter)是什么?(整合web开辟须要的全部依靠)
(我们的项目须要许多依靠web,servlet jackson等等,启动器会帮我们自动导好)
Spring Boot提供了一种叫做Starter的概念,它是一组预界说的依靠项聚集,旨在简化Spring应用步调的设置和构建过程。Starter包罗了一组干系的依靠项,以便在启动应用步调时自动引入所需的库、设置和功能。
紧张作用如下:
1. 简化依靠管理
2. 自动设置
3. 提供约定优于设置
4. 快速启动和开辟应用步调
5. 模块化和可扩展性
3 @SpringbootApplication的作用
@SpringBootApplication添加到启动类上,是一个组合注解,他的功效有详细的子注解实现!
@SpringBootApplication注解是Spring Boot框架中的核心注解,它的紧张作用是简化和加快Spring Boot应用步调的设置和启动过程。
详细而言,@SpringBootApplication注解起到以下几个紧张作用:
1. 自动设置:@SpringBootApplication注解包罗了@EnableAutoConfiguration注解,
2. 组件扫描:@SpringBootApplication注解包罗了@ComponentScan注解
3. 声明设置类:@SpringBootApplication注解本身就是一个组合注解,它包罗了@Configuration注解
总的来说,@SpringBootApplication注解的紧张作用是简化Spring Boot应用步调的设置和启动过程。它自动设置应用步调、扫描并加载组件,并将设置和启动类合二为一,简化了开辟者的工作量,进步了开辟服从。
同一设置管理
application.properties(同一文件):
全部的设置文件都同一写在一个文件中,该文件的名称为application.properties或application.yml,且该文件必须放在src/main/resources目次下。这是由于src/main/resources目次是Spring Boot默认的类路径(classpath),设置文件会被自动加载并可供应用步调访问。
留意:
①固定的key设置一些参数
②自界说key
代码举例:
application.properties文件:
#利用springboot提供的设置,修修改步调的参数,留意:key是固定的
server.servlet.context-path=/boot
#自界说设置
#怎样读取引用设置文件:直接在controller类中声明吸收该值的属性,然后用@value为其赋值即可
lq.name=刘清
lq.age=19
读取:
controller类
@Value("${lq.name}")
private String name;
@Value("${lq.age}")
private int age;
application.yaml设置先容和利用
properties方式
web 设置服务器的端标语 项目根路径
key=value
出现的标题:
由于要为全部框架提供设置参数的位置,又要包管key不重复,以是key就会特别长-----------一样寻常不保举利用
保举利用以.yml或.yaml末了的application文件
yaml方式
#yaml是条理,可以继续的设置文件格式
#比方:
server:
port: 8080
servlet:
context-path: /boot
lq:
info:
age;18 #留意:key:空格value
#聚集设置
gfs:
- 高圆圆
- 范冰冰
- 二狗子
#yaml语法:
# 1. 数据布局用树形布局出现,通过缩进来表现层级,
# 2. 连续的项目(聚集)通过减号 ” - ” 来表现
# 3. 键值布局内里的key/value对用冒号 ” : ” 来分隔。
# 4. YAML设置文件的扩展名是yaml 或 yml
读取设置文件
读取方式和properties同等
#YAML格式相对于:properties文件具有更好的条理布局表现、自我形貌性、解释支持、多行文本表现、复杂数据范例支持和更好的可读性。
批量设置文件读取
/**
lq:
info:
password:123456 #留意:key:空格value
username:liuqing
gfs:
- 高圆圆
- 范冰冰
- a
- b
* 读取设置文件的
* 方式一:利用@value注解
* 直接在属性上添加,留意:@value是为组件属性赋值的,以是该类肯定要参加ioc容器
* ①@Value(key必须写全了)
* ②@Value只能读取单个值
* 方式二:批量读取
* 在实体类上添加一个@ConfigurationProperties(prefix = "lq.info")内里填通用的前缀
* 上风:①方便不消一个一个读取
* ②可以给聚集范例赋值
*/
@Component
@Data
@ConfigurationProperties(prefix = "lq.info")
public class User {
private String password;
private String username;
private List<String> gfs;
}
多情况设置与激活
1. 属性文件分离:将应用步调的设置参数分离到差异的属性文件中,每个情况对应一个属性文件。比方,可以创建`application-dev.properties`、`application-prod.properties`和`application-test.properties`等文件。在这些文件中,可以界说各自情况的设置参数,如数据库毗连信息、端标语等。然后,在`application.properties`中通过`spring.profiles.active`属性指定当前利用的情况。Spring Boot会根据该属性来加载对应情况的属性文件,覆盖默认的设置。
2. YAML设置文件:与属性文件雷同,可以将设置参数分离到差异的YAML文件中,每个情况对应一个文件。比方,可以创建`application-dev.yml`、`application-prod.yml`和`application-test.yml`等文件。在这些文件中,可以利用YAML语法界说各自情况的设置参数。同样,通过`spring.profiles.active`属性指定当前的情况,Spring Boot会加载相应的YAML文件。
https://i-blog.csdnimg.cn/direct/b32cb6a7a01b4ba2994730f1d6d09aa6.png
比方:
其他文件名---------application-key.yml
application-dev.yml(开辟)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///dev
username: root
password: root
application-test.yml(测试)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///test
username: root
password: root
application-prod.yml(生产)
spring:
jdbc:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///prod
username: root
password: root
情况激活
spring:
profiles:
active: dev(填的是文件名中的key)
留意;
如果设置了spring.profiles.active,而且和application有重叠属性,以active设置优先。
如果设置了spring.profiles.active,和application无重叠属性,application设置依然收效!
springmvc整合与设置
web干系设置
1.`server.port`: 指定应用步调的HTTP服务器端标语。
2. `server.servlet.context-path`: 设置应用步调的上下文路径。这是应用步调在URL中的根本路径。默认情况下,上下文路径为空。
3. `spring.mvc.view.prefix`和`spring.mvc.view.suffix`: 这两个属性用于设置视图剖析器的前缀和后缀
4. `spring.resources.static-locations`: 设置静态资源的位置。默认情况下,Spring Boot会将静态资源放在classpath:/static目次下(故而一样寻常不消设置)
5. `spring.http.encoding.charset`和`spring.http.encoding.enabled`: 这两个属性用于设置HTTP哀求和相应的字符编码。
比方:
#springmvc干系的设置
#一样寻常在server下设置
server:
port: 80 #设置端标语,默认是8080
servlet:
context-path: /boot #设置项目根路径
spring:
mvc:
view: #视图剖析器设置
prefix: /WEB-INF/views/ #前缀名
suffix: .jsp #后缀名
web:
resources:
static-locations: classpath:/webapp #设置静态资源文件夹
#一旦设置了,那么默认的静态资源文件夹就无法访问了
#外部访问金泰资源的时间无需写静态资源文件夹(直接写文件名即可,要带上后缀)
静态资源处置惩罚:
在springboot中就界说了静态资源的默认查找路径
默认的静态资源路径为:
* *· classpath:/META-INF/resources/**
**· classpath:/resources/**
**· classpath:/static/**
**· classpath:/public/**
我们只要静态资源放在这些目次中任何一个,SpringMVC都会帮我们处置惩罚。 我们风俗会把静态资源放在classpath:/static/ 目次下。在resources目次下创建index.html文件
在springboot下springmvc中的东西照旧正常利用
springmvc的整合照旧创建一个设置类实现WebMvcConfigurer
拦截器,全局非常类像之前一样创建;
druid池与兼容性处置惩罚
所须要导入的依靠:
<!-- web开辟的场景启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据库干系设置启动器 jdbctemplate 事件干系-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- druid启动器的依靠 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.18</version>
</dependency>
<!-- 驱动类-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
所设置的信息:application.yaml文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource #利用druid毗连池
# username: 账号
# password: 暗码 #如果是springboot2整合druid毗连池,可利用此信息设置账号和暗码,springboot3不可
# Druid的其他属性设置 springboot3整合情况下,数据库毗连信息必须在Druid属性下!
druid:
url: jdbc:mysql://localhost:3306/day01
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 初始化时创建物理毗连的个数
initial-size: 5
# 毗连池的最小空闲数量
min-idle: 5
# 毗连池最大毗连数量
max-active: 20
# 获取毗连时最大期待时间,单元毫秒
max-wait: 60000
# 申请毗连的时间检测,如果空闲时间大于timeBetweenEvictionRunsMillis,实行validationQuery检测毗连是否有用。
test-while-idle: true
# 既作为检测的隔断时间又作为testWhileIdel实行的依据
time-between-eviction-runs-millis: 60000
# 烧毁线程时检测当前毗连的末了活动时间和当前时间差大于该值时,关闭当前毗连(设置毗连在池中的最小生存时间)
min-evictable-idle-time-millis: 30000
# 用来检测数据库毗连是否有用的sql 必须是一个查询语句(oracle中为 select 1 from dual)
validation-query: select 1
# 申请毗连时会实行validationQuery检测毗连是否有用,开启会低沉性能,默以为true
test-on-borrow: false
# 归还毗连时会实行validationQuery检测毗连是否有用,开启会低沉性能,默以为true
test-on-return: false
# 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下发起关闭。
pool-prepared-statements: false
# 要启用PSCache,必须设置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的标题,可以把这个数值设置大一些,比如说100
max-pool-prepared-statement-per-connection-size: -1
# 归并多个DruidDataSource的监控数据
use-global-data-source-stat: true
测试代码
需求:查询t_emp表中的全部数据
实体类:Employee略
controller类:
@Controller
@ResponseBody
@RequestMapping("emp")
public class EmployeeController {
@Autowired
private JdbcTemplate jdbcTemplate;
@GetMapping("list")
public List<Employee> list(){
//数据库
String sql="select * from t_emp";
List<Employee> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));
return query;
}
}
出现标题:
通过源码分析,druid-spring-boot-3-starter现在最新版本是1.2.18,固然适配了SpringBoot3,但缺少自动装配的设置文件,
办理:
须要手动在resources目次下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件内容如下!
com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
mybatis整合与设置
mybatis整合步调:
1. 导入依靠:在您的Spring Boot项目标构建文件(如pom.xml)中添加MyBatis和数据库驱动的干系依靠。比方,如果利用MySQL数据库,您须要添加MyBatis和MySQL驱动的依靠。
2. 设置数据源:在`application.properties`或`application.yml`中设置数据库毗连信息,包罗数据库URL、用户名、暗码、mybatis的功能设置等。
3. 创建实体类:创建与数据库表对应的实体类。
4. 创建Mapper接口:创建与数据库表交互的Mapper接口。
5. 创建Mapper接口SQL实现: 可以利用mapperxml文件大概注解方式
6. 创建步调启动类
7. 注解扫描:在Spring Boot的主应用类上添加`@MapperScan`注解,用于扫描和注册Mapper接口。
8. 利用Mapper接口:在须要利用数据库利用的地方,通过依靠注入或直接实例化Mapper接口,并调用此中的方法举行数据库利用。
为什么此时的mapper接口与mapper.xml文件的包布局可以不一样:
之前是批量扫描,按照包去找对应的mapper接口与mapper.xml文件
在springboot场景下会分开配,会在设置文件中指定mapper.xml文件的设置;而接口的位置,会在启动类上用注解扫描。
代码举例:
Application.xml文件
server:
address: 0.0.0.0 # 答应全部IP访问
# druid毗连池
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
url: jdbc:mysql://localhost:3306/mybatis-example
username: root
password: abc123LQ
driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis-彻底扬弃了mybatis-config.xml文件
#mapperxml文件的设置 setting的设置 别名的设置
mybatis:
mapper-locations: classpath:/mappers/*.xml #指定mapper.xml文件的位置
type-aliases-package: com.atguigu.pojo #给类起别名的设置
configuration:
map-underscore-to-camel-case: true #开启驼峰式
auto-mapping-behavior: full #自动字段映射
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #日志输出
实体类Employee:略
Mapper.xml文件(EmployeeMapper.xml):lue
Controller(EmployeeController类):略
启动类:
@SpringBootApplication
@MapperScan("com.atguigu.mapper") //指定mapper接口所在的位置,会自动将全部mapper接口的署理对象放到ioc容器
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);
System.out.println("hello world!");
}
}
aop与tx整合
tx整合:
原来:
* 给方法添加事件的利用
* 0 导入JDBC的依靠
* 1 选定我们须要的事件管理器的实现类,在设置类中创建该类的对象,利用注解的方法将该类添加到ioc
* 留意:该组件须要引入毗连池的组件
* 2 在设置类上加上 @EnableTransactionManagement 表现开启事件注解
* 3 在我们想要添加事件的方法上加上 @Transactional那么该方法就有事件了
现在(利用spring-boot后):
由于添加了jbdc的依靠;而SpringBoot项目会自动设置一个 DataSourceTransactionManager,
以是我们只需在方法(大概类)加上 @Transactional 注解,就自动纳入 Spring 的事件管理了,
也不须要在设置类加@EnableTransactionManagement//开启事件注解的支持
* 给方法添加事件的利用
* 0 导入JDBC的依靠
* 1 选定我们须要的事件管理器的实现类,在设置类中创建该类的对象,利用注解的方法将该类添加到ioc(可以省略)
* 留意:该组件须要引入毗连池的组件
* 2 在设置类上加上 @EnableTransactionManagement 表现开启事件注解(可以省略)
* 3 在我们想要添加事件的方法上加上 @Transactional那么该方法就有事件了
实今世码:
service层:
@Service
public class EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
@Transactional
public void delete( ){
int rows=employeeMapper.delete(1);
System.out.println("rows = " + rows);
int i=1/0;
}
}
controller层:
@Controller
@ResponseBody
@RequestMapping("/emp")
public class EmployeeController {
@Autowired
private EmployeeMapper employeeMapper;
@Autowired
private EmployeeService employeeService;
@GetMapping
public List<Employee> query(){
employeeService.delete();
return null;
}
}
aop整合:
原来:
界说一个加强类(该类要参加ioc),在该类中界说一些方法(关照用@Before/@After…修饰),在用切点表达式指明改关照要作用在那些方法上(execution(…))
现在:
只须要导入依靠;然后直接利用aop注解即可。
不消在设置类添加@EnableAspectJAutoProxy//开启aspectj注解
代码举例:
@Component
@Aspect
public class LogAdvice {
@Before("execution(* com..service.*.*(..))")
public void before(JoinPoint point){
String simpleName = point.getTarget().getClass().getSimpleName();
String name = point.getSignature().getName();
System.out.println("name = " + name);
System.out.println("simpleName = " + simpleName);
}
}
直接测试:乐成
Springboot3项目打包和运行
添加打包插件:
> 在Spring Boot项目中添加`spring-boot-maven-plugin`插件是为了支持将项目打包成可实行的可运行jar包。如果不添加`spring-boot-maven-plugin`插件设置,利用通例的`java -jar`下令来运行打包后的Spring Boot项目是无法找到应用步调的入口点,因此导致无法运行。
<!-- SpringBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
实行打包:
Clean-package
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]