SpringBoot基础(二)

简介: SpringBoot的监听机制其实是对Java提供的事件监听机制的封装Java的事件监听机制中定义了以下几个角色:事件(Event):继承Java.util.EventObject类的对象事件源(Source):任意对象Object监听器(Listener):实现java.util.EventListener接口的对象

SpringBoot基础+https://developer.aliyun.com/article/1390576?spm=a2c6h.13148508.setting.16.291b4f0es9dhYu

三、SpringBoot监听机制

1、事件监听

Java监听机制


SpringBoot的监听机制其实是对Java提供的事件监听机制的封装


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


事件(Event):继承Java.util.EventObject类的对象

事件源(Source):任意对象Object

监听器(Listener):实现java.util.EventListener接口的对象

SpringBoot监听机制


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


ApplicationContextInitializer、SpringApplicationRunListener、CommandLineRunner、ApplicationRunner



@

@Component
public class MyApplicationContextInitializer implements ApplicationContextInitializer {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("ApplicationContextInitializer...initialize");
    }
}


public class MySpringApplicationRunListener implements SpringApplicationRunListener {
    public MySpringApplicationRunListener(SpringApplication springApplication, String[] args) {
    }
    @Override
    public void starting(ConfigurableBootstrapContext bootstrapContext) {
        System.out.println("项目启动中");
    }
    @Override
    public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
        System.out.println("环境对象开始准备");
    }
    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("上下文对象开始准备");
    }
    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("上下文对象开始加载");
    }
    @Override
    public void started(ConfigurableApplicationContext context, Duration timeTaken) {
        System.out.println("上下文对象加载完成");
    }
    @Override
    public void ready(ConfigurableApplicationContext context, Duration timeTaken) {
        System.out.println("项目启动完成,开始运行");
    }
    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.out.println("项目启动失败");
    }
}


/**
 * 当项目启动后执行run方法 等同于ApplicationRunner
 */
@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner");
    }
}


/**
 * 当项目启动后执行run方法 等同于CommandLineRunner
 * 一般可以用于redis缓存预热等(将数据库中某些数据提前存入redis)
 */
@Component
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner");
    }
}


# resources下的META-INF目录下的spring.factories
org.springframework.boot.SpringApplicationRunListener=cn.ken.listener.MySpringApplicationRunListener
org.springframework.context.ApplicationContextInitializer=cn.ken.listener.MyApplicationContextInitializer

2、监控使用

使用步骤:

  1. 导入依赖坐标
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


  1. 访问http://localhost:8080/actuator
  2. 配置



# info下的信息
info.name=zhangsan
info.age=13
# 开启健康检查的完整信息
# 默认关闭,因为上线时展示所有信息有风险
management.endpoint.health.show-details=always
# 将所有监控的endpoint暴露出来
management.endpoints.web.exposure.include=*


3、Spring Boot Admin

  • Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序
  • Spring Boot Admin有两个角色,客户端(Client)和服务端(Server)
  • 应用程序作为Spring Boot Admin Client向Spring Boot Admin Server注册
  • Spring Boot Admin Server的UI界面将Spring Boot Admin Client的Actuator Endpoint上的一些监控信息进行展示

使用步骤:

  1. admin-server:
  1. 创建admin-server模块
  1. 导入依赖坐标admin-starter-server
  2. 在引导类上启用监控功能@EnableAdminServer
  1. admin-client:
  1. 创建admin-client模块
  1. 导入依赖坐标admin-starter-client
  2. 配置相关信息:server地址等
  3. 启动server和client程序,访问server
server.port=8081
# 开启健康检查的完整信息
# 默认关闭,因为上线时展示所有信息有风险
management.endpoint.health.show-details=always
# 将所有监控的endpoint暴露出来
management.endpoints.web.exposure.include=*
# 注册到server上(url即为server的地址)
spring.boot.admin.client.url=http://localhost:8080



// server的设置
@EnableAdminServer
@SpringBootApplication
public class SpringbootAdminServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootAdminServerApplication.class, args);
  }
}


四、SpringBoot Web开发

1、静态资源导入

在SpringBoot,我们可以使用以下方式处理静态资源


  • webjars:localhost:8080/webjars/
  • public、static、resources:localhost:8080/


localhost:8080/webjars/jquery/3.4.1/jquery.js




localhost:8080/1.js

优先级:resources>static>public


2、Thymeleaf模板引擎

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>


随后将html页面放在templates文件夹下,将静态资源放在static文件夹下

templates下的资源不能直接访问,只能通过控制器

默认情况下:


public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";


五、SpringBoot项目部署

SpringBoot项目开发完毕后,支持两种方式部署到服务器:

  1. jar包(官方推荐)
  2. war包

优先级:resources>static>public

2、Thymeleaf模板引擎

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>


随后将html页面放在templates文件夹下,将静态资源放在static文件夹下


templates下的资源不能直接访问,只能通过控制器


默认情况下:


public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";


五、SpringBoot项目部署

SpringBoot项目开发完毕后,支持两种方式部署到服务器:

  1. jar包(官方推荐)
  2. war包


相关文章
|
2月前
|
XML JSON Java
SpringBoot基础
SpringBoot基础
28 4
|
5月前
|
XML JSON Java
SpringBoot(四)之基础配置
application.yml为主配置文件,如果要分环境,则需要创建 application-{profile}.yml的环境配置。
38 0
|
6月前
|
NoSQL Java 数据库连接
SpringBoot基础 (一)
1、配置文件 SpringBoot使用一个全局的配置文件,配置文件的名称是固定的 application.properties 语法结构:key=value application.yml 语法结构:key:(空格)value 配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
|
运维 监控 前端开发
springboot基础
springboot基础
53 0
|
Java
学习Springboot框架一 之最简单的Springboot项目
学习Springboot框架一 之最简单的Springboot项目
69 0
|
XML Java 关系型数据库
SpringBoot 开发总结思考(一)
从面向对象的角度理解XML,是以类和对象作为XML的配置SpringBoot 使用的是配置类加上普通/常规配置的形式,参数不是直接固定在配置类中,而可以写在配置文件中,例如application.properties
137 0
SpringBoot 开发总结思考(一)
|
XML NoSQL Java
SpringBoot 开发总结思考(二)
模块装配:假设要注入MongoDB,那么就加上@Configuration注解,有可能一个配置类没办法解决某个方向的问题,往往是很多@Configuration的类组合在一起SpringBoot是使用Enable注解,然后再通过@import导入Selector,通过Selector读取 .factories 文件,最终加载的Configuration
164 0
SpringBoot 开发总结思考(二)
|
SQL 存储 Java
SpringBoot基础学习文章
SpringBoot基础学习文章
191 0
SpringBoot基础学习文章
|
Java 应用服务中间件 Maven
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
231 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
|
druid Java 关系型数据库
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
494 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)