1.SpringBoot启动依赖
spring在parent中定义了各种技术的版本信息,在需要使用某种技术的jar包时,使用的是继承于parent中的版本,也是对应版本最优的版本。
2.SpringBoot的配置
SpringBoot的配置是基于约定的,所以很多配置都有默认值,如果想要自定义配置的话,需要使用application.properties或者application.yml进行配置。
默认配置文件名称:application
在同一目录下的优先级为:properties>yml>yaml
3.读取配置内容:
@Value
//name: lili
@Value("${name}")
private String name;
//person:
// name: lili
@Value("${person.name}")
private String name;
Environment
//在初始化时,会初始化一个Environment对象,可以通过getProperty("参数名")直接获取
//注入
@Autowired
private Enviroment env;
//获取
env.getProperty("name");
@ConfigurationProperti
//配置
person:
name: lili
//代码
@ConfigurationProperties(prefix = "person")
public class Person{
private String name;
//getName();
//setName();
}
4.profile配置
在开发应用时,通常一套程序会被安装到不同的环境,比如,开发,测试,生产等。其中数据库地址,服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,会非常麻烦。profile就是用来进行动态配置的
profile配置方式
多profile文件
用于多个properties配置文件,每个properties文件后缀不同,配置参数不同
在配置文件中配置:spring.profiles.active=pro表示使用application-pro.properties配置文件。
yml多文档方式
---
server:
port: 8080
spring:
profiles: pro
---
server:
port: 8081
spring:
profiles: dev
---
spring:
profiles:
active: pro
---
profile激活方式
配置文件
在配置文件中配置spring.profiles.active=dev
虚拟机参数
在VM options指定:-Dspring.profiles.active=dev
命令行参数
java-jar xxx.jar --spring.profiles.active=dev
5.内部配置加载顺序
SpringBoot在启动时会从以下位置加载配置文件application.properties,优先顺序从上至下。
file:./config/
当前项目下的config目录
file:./
当前项目的根目录
classpath:/config/
classpath的config目录
classpath:/
classpath的根目录
6.外部配置
可查看spring文档中的Externalized Configuration。一共17中方式。
7.SpringBoot整合Redis
搭建工程
在pom文件中引入redis的依赖
配置redis相关属性
在实际生产环境中,使用的不是本机的redis,就需要在application配置文件中配置redis的位置
spring.redis.host = 127.0.0.1
spring.redis.port = 6379
注入RedisTemplate模板,进行使用
编写测试方法测试
redis可以存储的数据类型
字符串,hash,list,set,zset(有序集合)
8.SpringBoot整合MyBatis
搭建工程
在pom文件中引入mybatis相关的依赖,增加mysql驱动
编写DataSource和MyBatis相关配置
定义表和实体类
编写dao和mapper文件/纯注解开发
测试
Mybaties:就是一个封装了jdbc的框架,通过sql映射操作数据库。
Hibernate:和Mybaties一样,都是主流的对象关系映射框架ORM(Object-Relative-Mapping),
与MyBaties不同的是,Hibernate是一个全表隐射框架,只需要提供pojo和映射即可
9.SpringBoot原理分析-自动配置
1.Condition条件判断
Condition是在spring4.0中增加的条件判断功能,通过这个功能可以实现选择性创建bean。
ConfigurableApplicationContext->IOC容器
需求:IOC容器中有个bean,在导入Jedis坐标之后,加载该bean,没导入,不加载。
增加该bean的配置类
@Configuration
public class UserConfig{
@Bean
@Conditional(MyUserCondition.class)
public User user(){
return User();
}
}
增加条件类,此类继承Condition
public class ClassCondition implement Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){
//判断redis.clients.jedis.Jedis.class文件是否存在
boolean flag = true;
try{
Class<?> cls = Class.forName(redis.clients.jedis.Jedis);
}catch(ClassNotFoundException e){
flag = false;
}
return flag;
}
}
测试
需求2:IOC容器中有个bean,在容器中含有某个类才能使用
@ConditionOnClass("com.alibaba.fastjson.JSON")
需求3:IOC容器中有个bean,在配置参数为指定值的时候能够使用
@ConditionalOnProperty(name="",havingValue="")
2.切换内置web服务器
SpringBoot的web环境中默认使用tomcat作为内置服务器。
调出视图界面,对tomcat的包右键Exclude排除,在pom文件中tomcat的依赖就会加上<exclusions>标签
同时增加jetty的依赖。什么都不用改变,重启就会切换为jetty为服务器。
3.Enable*注解
SpringBoot中提供了很多Enable开头的注解,这些注解都是用于动态启动某些功能的。而其底层原理是使用@Import注解导入一些配置类,实现Bean的动态加载
思考:SpringBoot工程能否拿到jar中定义的bean?
使用@ComponentScan("com.path.path")注解扫描包,这种方式会扫描所有的类,不建议
使用@Import(UserConfig.class)注解导入指定类,这些通过import导入的类都会被Spring创建并放入IOC容器中。
对import注解进行封装,自定义一个EnableUser注解类,使用的时候直接加注解@EnableUser
//其他注解
@Import(UserConfig.class)
public @interface EnableUser{
}
4. Import注解
@import提供了四种用法:
导入bean
@Import(User.class)
导入配置类
@Import(UserConfig.class)
导入配置类,会导入配置所有的bean到ioc容器中
导入ImportSelector实现类。一般用于加载配置文件中的类
//自定义ImportSelector的实现类MyImportSelector
public class MyImportSelector Implements ImportSelector{
@Override
public String[] selectImports(AnnotationMetadata importingClassMetatdata){
return new String[]{"com.main.user","com.main.item"};
}
}
//使用:
@Import(MyImportSelector.class)
导入ImportBeanDefinitionRegistrar实现类。
public class MyImportBeanDefinitionRegistrar Implements ImportBeanDefinitionRegistrar{
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetatdata,BeanDefinitionRegistry registry){
AbstractBeanDifintion beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDifinition();
beanDefinition.registerBeanDefinition("user",beanDefinition);
}
}
//使用:
@Import(MyImportBeanDefinitionRegistrar.class)
5.EnableAutoConfiguration
@EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类
配置类的位置:META-INF/spring.factories,该配置文件中定义了大量的配置类,当SpringBoot应用启动时,会自动加载这些配置类,初始化Bean。
并不是所有的Bean都会被初始化,在配置类中使用Condition类加载满足条件的Bean。
6.自定义redis-starter
当要求导入redis坐标时,SpringBoot自动创建Jedis的Bean。
步骤:
创建redis-spring-boot-autoconfigure模块
创建redis-spring-boot-start模块,依赖redis-spring-boot-autoconfigure的模块
在redis-spring-boot-autoconfigure中初始化Jedis的Bean,并定义META-INF/spring.factories文件
在测试模块中引入自定义的redis-start依赖,测试获取Jedis的bean,操作Redis。
10.SpringBoot原理分析-监听机制
Java的监听机制
SpringBoot的监听机制时对java提供的事件监听的封装
Java中的事件监听机制定义了一下几个角色:
事件:Event,继承自EventObject对象
事件源:Source,任意Object
监听器:Listener,实现EventListener接口
SpringBoot的监听机制
SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作
Application ContextInitializer 应用上下文相关事件接口
SpringApplicationRunListener spring启动事件接口
CommandLineRunner 命令行启动事件接口
ApplicationRunner 应用启动事件接口
11.SpringBoot原理分析-启动流程分析
12.SpringBoot监控
SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行状况的监控,比如监控状况,Bean加载情况,配置属性,日志信息等。
使用步骤:
导入依赖坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-start-actustor</artifactId>
</dependency>
12.SpringBoot项目部署
SpringBoot支持两种方式部署到服务器
jar包(官方推荐)
war包
部署:
windows系统打开powershell窗口,到对应目录下,执行
java -jar .\***.jar