springboot优点
- springboot starter 将常用的依赖进行了整合,将其合并到一个依赖中。
- 使编码变得简单,采用javaconfig的形式对spring进行配置,并且提供了大量的注解。
- 自动配置,利用spring条件配置的支持,合理推测应用所需要使用的bean,并自动化配置他们。
- 使部署变得简单,内置了三种servlet容器,tomcat,jetty,undertow,只需要java环境就可以运行,可以达成一个jar包。
- 微服务框架,可以部署分布式架构。
启动
@SpringBootApplication
public class MySpringApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringApplication.class,args);
}
}
创建可执行jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
默认扫描器basepackage
@SpringBootApplication
public class MySpringApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringApplication.class,args);
}
}
进入注解
@SpringBootApplication
进入注解@EnableAutoConfiguration
再进入
进入Registrar
内部内在方法registerBeanDefinitions 进行BasePacjage信息注册
参数metadata为启动类信息
第一次进不包含bean 所以进else
收集类信息
类名BasePackages
beanDefinition.getConstructorArgumentValues().addIndexedArgumentValue(0, packageNames);
设置类属性packageNames 为启动类所在的包
BEAN=org.springframework.boot.autoconfigure.AutoConfigurationPackages
总的来说就是创建一个AutoConfigurationPackage的bean对象,属性为basePackages数组存启动类所在的包。
热启动
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
选择自动编译
当修改文件时 会自动重启
baseclassloder 扫描第三方jar文件
restartclassloder扫描工程中文件,当代码修改时重新启动
排除restartclassloder扫描的包
在配置文件中配置
配置文件
配置对应的类
在类中EmbeddedWebServerFactoryCustomizerAutoConfiguration
YML配置文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
导入以上依赖可以再yml文件获得提示
根据实体类把yml配置导入到类属性中
必须有两个注解
@ConfigurationProperties(“user”)
@Component
然后在application.yml中进行配置
以上会进行提示
@EnableConfigurationProperties 通过构造器注入
@Data
@ConstructorBinding
@ConfigurationProperties("user")
public class User {
private String userName;
private Integer age;
private Book book;
public User(String userName, Integer age,Book book) {
this.userName = userName;
this.age = age;
this.book=book;
}
@Data
public static class Book
{
private String bookName;
public Book(String bookName) {
this.bookName = bookName;
}
}
}
不再需要@@Component注解
在使用类中加入@EnableConfigurationProperties(User.class) 导入User.class
@RestController
@EnableConfigurationProperties(User.class)
public class MyContoller {
@Autowired
private User user;
@RequestMapping("user")
public User getUser()
{
return user;
}
}
springboot 2.3.1配置类不需要注解@Configuration
配置类
使用注解@bean与@ConfigurationProperties(“user”)
@ConfigurationProperties(“user”)
也可以作用在方法上对对象属性注入
@Validated
先导入依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>1.0.19.9-jre14</version>
</dependency>
使用yml对类属性注入时进行属性值得校验。
@Value
针对yml文件对类属性绑定
@Data
@Component
@Validated
public class Student {
@Value("${stu.name}")
private String name;
@NotNull
@Value("${stu.sex}")
private String sex;
@Value("#{1*8}")
private String age;
}
支持SEL表达式,支持validated校验,不支持数组,集合类型
Profile
配置多个profiel 用—隔开
spring.profiles.active=pro 来决定激活哪一个
也可以在命令行进行激活
使用-D指定
也可以使用多文件的形式
直接使用文件后缀指定
SPI可插拔
使用ServiceLoader类,可以调用实现PayService接口类大pay()方法。而不用直接调用实现类。
需要在对象实现工程中配置实现类的路径
实现可插拔
数据源配置
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在yml进行配置数据源。type指定那种数据源
原理
在自动配置类中DataSourceAutoConfiguration
配置几种数据源
点开类DataSourceConfiguration
有自动导入数据源的配置
运行程序
导入成功
导入druid数据源
导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
yml配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
点开类DruidDataSource 查看可配置连接池属性
进行配置新建配置类
配置类返回 新的druid对象 使用注解 @ConfigurationProperties(prefix = “spring.datasource”)
可以把yml中InitialSize的配置注入到新的数据源对象中 放到IOC容器中。
整合mybatis(注解)
导入依赖
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
yml配置
和以前一样
编写mapper
调用mapper
自定义mybatis里配置 与单独mybatis里xml配置一致
先找到mybatis的自动配置类
打开自动配置类MybatisAutoConfiguration
打开类ConfigurationCustomizer
打开Configuration
可以看mybatis的配置
例如红框中的mapUnderscoreToCamelCase 可以把例如数据库中自动create_date 对应实体类自动createDate对应起来
可以自己新建配置类对mybatis自动配置