SpringBoot

1.SpringBoot启动依赖

spring在parent中定义了各种技术的版本信息,在需要使用某种技术的jar包时,使用的是继承于parent中的版本,也是对应版本最优的版本。

2.SpringBoot的配置

SpringBoot的配置是基于约定的,所以很多配置都有默认值,如果想要自定义配置的话,需要使用application.properties或者application.yml进行配置。

默认配置文件名称:application

在同一目录下的优先级为:properties>yml>yaml

3.读取配置内容:

  1. @Value

//name: lili
@Value("${name}")
private String name;
//person:
//    name: lili
@Value("${person.name}")
private String name;
  1. Environment

//在初始化时,会初始化一个Environment对象,可以通过getProperty("参数名")直接获取

//注入
@Autowired
private Enviroment env;
//获取
env.getProperty("name");
  1. @ConfigurationProperti

//配置
person:
    name: lili

//代码
@ConfigurationProperties(prefix = "person")
public class Person{
    private String name;
    
    //getName();
    //setName();
}

4.profile配置

在开发应用时,通常一套程序会被安装到不同的环境,比如,开发,测试,生产等。其中数据库地址,服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,会非常麻烦。profile就是用来进行动态配置的

  1. profile配置方式

  1. 多profile文件

用于多个properties配置文件,每个properties文件后缀不同,配置参数不同

在配置文件中配置:spring.profiles.active=pro表示使用application-pro.properties配置文件。

  1. yml多文档方式

---
server:
    port: 8080
spring:
    profiles: pro
---
server:
    port: 8081
spring:
    profiles: dev
---
spring:
    profiles:
        active: pro
---
  1. profile激活方式

  1. 配置文件

在配置文件中配置spring.profiles.active=dev

  1. 虚拟机参数

在VM options指定:-Dspring.profiles.active=dev

  1. 命令行参数

java-jar xxx.jar --spring.profiles.active=dev

5.内部配置加载顺序

SpringBoot在启动时会从以下位置加载配置文件application.properties,优先顺序从上至下。

  1. file:./config/

当前项目下的config目录

  1. file:./

当前项目的根目录

  1. classpath:/config/

classpath的config目录

  1. classpath:/

classpath的根目录

6.外部配置

可查看spring文档中的Externalized Configuration。一共17中方式。

7.SpringBoot整合Redis

  1. 搭建工程

  1. 在pom文件中引入redis的依赖

  1. 配置redis相关属性

在实际生产环境中,使用的不是本机的redis,就需要在application配置文件中配置redis的位置

spring.redis.host = 127.0.0.1

spring.redis.port = 6379

  1. 注入RedisTemplate模板,进行使用

  1. 编写测试方法测试

redis可以存储的数据类型

字符串,hash,list,set,zset(有序集合)

8.SpringBoot整合MyBatis

  1. 搭建工程

  1. 在pom文件中引入mybatis相关的依赖,增加mysql驱动

  1. 编写DataSource和MyBatis相关配置

  1. 定义表和实体类

  1. 编写dao和mapper文件/纯注解开发

  1. 测试

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,没导入,不加载。

  1. 增加该bean的配置类

@Configuration
public class UserConfig{
    
    @Bean
    @Conditional(MyUserCondition.class)
    public User user(){
        return User();
    }
}
  1. 增加条件类,此类继承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;    
    }
}
  1. 测试

需求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?

  1. 使用@ComponentScan("com.path.path")注解扫描包,这种方式会扫描所有的类,不建议

  1. 使用@Import(UserConfig.class)注解导入指定类,这些通过import导入的类都会被Spring创建并放入IOC容器中。

  1. 对import注解进行封装,自定义一个EnableUser注解类,使用的时候直接加注解@EnableUser

//其他注解
@Import(UserConfig.class)
public @interface EnableUser{
}
4. Import注解

@import提供了四种用法:

  1. 导入bean

@Import(User.class)
  1. 导入配置类

@Import(UserConfig.class)

导入配置类,会导入配置所有的bean到ioc容器中

  1. 导入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)
  1. 导入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。

步骤:

  1. 创建redis-spring-boot-autoconfigure模块

  1. 创建redis-spring-boot-start模块,依赖redis-spring-boot-autoconfigure的模块

  1. 在redis-spring-boot-autoconfigure中初始化Jedis的Bean,并定义META-INF/spring.factories文件

  1. 在测试模块中引入自定义的redis-start依赖,测试获取Jedis的bean,操作Redis。

10.SpringBoot原理分析-监听机制

  1. Java的监听机制

SpringBoot的监听机制时对java提供的事件监听的封装

Java中的事件监听机制定义了一下几个角色:

  1. 事件:Event,继承自EventObject对象

  1. 事件源:Source,任意Object

  1. 监听器:Listener,实现EventListener接口

  1. SpringBoot的监听机制

SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作

  1. Application ContextInitializer 应用上下文相关事件接口

  1. SpringApplicationRunListener spring启动事件接口

  1. CommandLineRunner 命令行启动事件接口

  1. ApplicationRunner 应用启动事件接口

11.SpringBoot原理分析-启动流程分析

12.SpringBoot监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行状况的监控,比如监控状况,Bean加载情况,配置属性,日志信息等。

使用步骤:

  1. 导入依赖坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-start-actustor</artifactId>
</dependency>
  1. 访问http://localhost:8080/actuator

12.SpringBoot项目部署

SpringBoot支持两种方式部署到服务器

  1. jar包(官方推荐)

  1. war包

部署:

windows系统打开powershell窗口,到对应目录下,执行

java -jar .\***.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值