你们好,我是小菜,一个渴望在互联网行业作到蔡不菜的小菜。可柔可刚,点赞则柔,白嫖则刚!
死鬼~看完记得给我来个三连哦!java
“本文主要介绍
SprinBoot
若有须要,能够参考
若有帮助,不忘 点赞 ❥mysql
法1:修改和server有关的配置web
properties server.tomcat.uri-encoding=UTF-8 //通用的Servlet容器设置 server.xxx //Tomcat的设置 server.tomcat.xxx
spring
法2:编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置
sql
Servlet
Filter
Listener
因为 SpringBoot 默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,因此没有web.xml
文件数据库
注册三大组件用如下方式:apache
ServletRegistrationBean
:
tomcat
FilterRegistrationBean
:
ServletListenerRegistrationBean
:
默认支持如下容器springboot
Tomcat
<!-- 引入web模块默认就是使用嵌入式的Tomcat做为Servlet容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码
Jetty
<!-- 先排除内置默认容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--引入其余的Servlet容器-->
<dependency>
<artifactId>spring-boot-starter-jetty</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
复制代码
Undertow
<!-- 先排除内置默认容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--引入其余的Servlet容器-->
<dependency>
<artifactId>spring-boot-starter-undertow</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
复制代码
EmbeddedServletContainerAutoConfiguration
:
服务器
EmbeddedServletContainerFactory
(嵌入式Servlet容器工厂)
public interface EmbeddedServletContainerFactory {
//获取嵌入式的Servlet容器
EmbeddedServletContainer getEmbeddedServletContainer(
ServletContextInitializer... initializers);
}
}
复制代码
EmbeddedServletContainer
:(嵌入式的Servlet容器)
以TomcatEmbeddedServletContainerFactory
为例
嵌入式容器的配置修改怎么生效
方法1:ServerProperties
方法2: EmbeddedServletContainerCustomizer
(定制器帮咱们修改了Servlet容器的配置)
修改原理:
容器中导入了EmbeddedServletContainerCustomizerBeanPostProcessor
ServerProperties
:也是定制器
EmbeddedServletContainerFactory【TomcatEmbeddedServletContainerFactory】
EmbeddedServletContainerCustomizerBeanPostProcessor
(只要是嵌入式的Servlet容器工厂,后置处理器就工做)EmbeddedServletContainerCustomizer
,调用定制器的定制方法嵌入式Servlet容器:应用打成可执行的jar
优势: 简单、便携
缺点:默认不支持JSP、优化定制比较复杂
步骤:
建立一个war项目
将嵌入式的Tomcat指定为provided
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
复制代码
编写一个SpringBootServletInitializer
的子类,并调用configure()
方法
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//传入SpringBoot应用的主程序
return application.sources(SpringBoot04WebJspApplication.class);
}
}
复制代码
启动服务器就可使用
原理:
jar包
:执行SpringBoot主类的main方法,启动 Ioc
容器,建立嵌入式的Servlet容器
war包
:启动服务器,服务器启动SpringBoot应用SpringBootServletInitializer
,启动 Ioc
容器
对于数据访问层,不管是SQL
仍是NOSQL
,Spring Boot
默认采用整合Spring Data
的方式进行统一处理,添加大量自动配置,屏蔽了不少设置。引入各类xxxTemplate
,xxxRepository
来简化咱们对数据访问层的操做。对咱们来讲只须要进行简单的设置便可。
spring-boot-starter-jdbc
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
复制代码
application.yml
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://192.168.15.22:3306/test
driver-class-name: com.mysql.jdbc.Driver
复制代码
结论:
org.apache.tomcat.jdbc.pool.DataSource
做为数据源DataSourceProperties
里面自动配置原理:
参考DataSourceConfiguration
,根据配置建立数据源,默认使用Tomcat链接池。可使用spring.datasource.type
指定自定义的数据源类型
SpringBoot默承认以支持:
org.apache.tomcat.jdbc.pool.DataSource
HikariDataSource
BasicDataSource
自定义数据源类型
@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type")
static class Generic {
@Bean
public DataSource dataSource(DataSourceProperties properties) {
//使用DataSourceBuilder建立数据源,利用反射建立响应type的数据源,而且绑定相关属性
return properties.initializeDataSourceBuilder().build();
}
}
复制代码
DataSourceInitializer
:ApplicationListener
做用:
runSchemaScripts()
:运行建表语句
runDataScripts()
:运行插入数据的sql语句
默认只须要将文件命名为:
schema-*.sql
、data-*.sql
操做数据库:自动配置了JdbcTemplate操做数据库
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.8</version>
</dependency>
复制代码
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
复制代码
步骤:
1)配置数据源相关属性
2)给数据库建表
3)建立JavaBean
4)注解使用
在容器中添加一个ConfigurationCustomizer
在启动类中添加MapperScan注解批量扫描全部的Mapper接口
5)配置文件使用
mybatis:
#指定全局配置文件的位置
config-location: classpath:mybatis/mybatis-config.xml
#指定sql映射文件的位置
mapper-locations: classpath:mybatis/mapper/*.xml
复制代码
SpringData简介
“Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。
它能够极大的简化JPA的写法,能够在几乎不用写实现的状况下,实现对数据的访问和操做。除了CRUD外,还包括如分页、排序等一些经常使用的功能。
SpringData整合
spring:
jpa:
hibernate:
#更新或者建立数据表结构
ddl-auto: update
#控制台显示SQL
show-sql: true
复制代码
如下文件是配置在META-INF/spring.factories
ApplicationContextInitializer
SpringApplicationRunListener
以上两个须要配置在(META-INF/spring.factories
)
org.springframework.context.ApplicationContextInitializer=\
com.atguigu.springboot.listener.HelloApplicationContextInitializer
org.springframework.boot.SpringApplicationRunListener=\
com.atguigu.springboot.listener.HelloSpringApplicationRunListener
复制代码
如下两个只须要放在ioc容器中
ApplicationRunner
CommandLineRunner
“今天的你多努力一点,明天的你就能少说一句求人的话!
我是小菜,一个和你一块儿学习的男人。
💋