Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…
Резюме
Я использую SpringBoot каждый день, но некоторые практические моменты знания SpringBoot не очень понятны! Недавно я сделал краткий обзор практических знаний по SpringBoot, думаю, он будет очень полезен для друзей, которые переходят со Spring на SpringBoot!
предисловие
Прежде всего, давайте разберемся, зачем существует SpringBoot?
Являясь облегченной альтернативой J2EE, Spring позволяет нам реализовывать функции EJB, используя простые объекты Java (POJO) посредством внедрения зависимостей и аспектно-ориентированного программирования без разработки тяжеловесных Enterprise JavaBeans (EJB).
В то время как код компонента Spring является легковесным, его конфигурация тяжеловесна. Несмотря на то, что Spring позже представил сканирование компонентов на основе аннотаций и настройку на основе Java, чтобы сделать его намного проще, Spring по-прежнему требует большой настройки. Кроме того, управление зависимостями проекта также является громоздким, и мы не можем гарантировать совместимость зависимостей каждой версии.
Чтобы упростить настройку в Spring и унифицировать версии различных зависимостей, родился SpringBoot!
Введение
SpringBoot — это, по сути, Spring, и он помогает нам упростить разработку приложений Spring благодаря некоторым собственным функциям. Есть три основных особенности:
- Автоматическая конфигурация: для многих общих прикладных функций приложений Spring SpringBoot может автоматически предоставлять соответствующие конфигурации, а разработчикам интегрированных функций требуется лишь очень небольшая настройка.
- Зависимости при запуске: сообщите SpringBoot, какая функция ему нужна, и он может ввести соответствующую библиотеку, не учитывая версию библиотеки, от которой зависит функция.
- Актуатор: вы можете получить более глубокое представление о внутренней ситуации приложения SpringBoot, например, о том, какие bean-компоненты создаются, об автоматических решениях по настройке, информации о состоянии приложения и т. д.
начать использовать
Создать приложение
Существует множество способов создания приложений SpringBoot, здесь для создания приложений используется самый популярный инструмент разработки IDEA.
- сначала через
File->New Project
создать проект;
- затем выберите через
Spring Initializr
создать приложение SpringBoot;
- Заполнить проект Maven
groupId
иartifactId
и выберите версию Java;
- Выберите начальную зависимость, вот начальная зависимость для включения веб-функции;
- После выбора места хранения проекта вы можете успешно создать приложение SpringBoot.
Просмотр приложений
Структура проекта
Базовая структура только что созданного приложения SpringBoot выглядит следующим образом.
mall-tiny-boot
├─pom.xml # Maven构建文件
└─src
├─main
│ ├─java
│ │ └─MallTinyApplication.java # 应用程序启动类
│ └─resources
│ └─application.yml # SpringBoot配置文件
└─test
└─java
└─MallTinyApplicationTests.java # 基本的集成测试类
Класс запуска приложения
MallTinyApplication
Он играет роль конфигурации и руководства в приложении SpringBoot через@SpringBootApplication
Аннотация позволяет сканировать компоненты и выполнять автоматическую настройку черезSpringApplication.run()
запуск бутстрап-приложения;
//开启组件扫描和应用装配
@SpringBootApplication
public class MallTinyApplication {
public static void main(String[] args) {
//负责引导应用程序启动
SpringApplication.run(MallTinyApplication.class, args);
}
}
@SpringBootApplication
Аннотация представляет собой комбинацию трех аннотаций и имеет следующие три функции аннотаций:
-
@Configuration
: используется для объявления конфигурации Java в Spring; -
@ComponentScan
: включить сканирование компонентов.Когда мы объявляем компонент, он будет автоматически обнаружен и зарегистрирован как компонент в контексте приложения Spring; -
@EnableAutoConfiguration
: Включите автоконфигурацию SpringBoot, чтобы упростить запись конфигурации.
тестовое приложение
можно использовать@RunWith
и@SpringBootTest
для создания контекста приложения Spring через@Test
аннотация для объявления тестового метода.
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class MallTinyApplicationTests {
@Autowired
private PmsBrandService pmsBrandService;
@Test
public void contextLoads() {
}
@Test
public void testMethod() {
List<PmsBrand> brandList = pmsBrandService.listAllBrand();
log.info("testMethod:{}", brandList);
}
}
Написать конфигурацию приложения
Когда нам нужно точно настроить автоматически настроенные параметры, мы можемapplication.yml
Настройка в файле, например, точная настройка номера порта.
server:
port: 8088
Процесс сборки проекта
Проекты SpringBoot можно собирать с помощью Maven, сначала нам нужно наследоватьspring-boot-starter-parent
Эта родительская зависимость может управлять версией всех официальных начальных зависимостей SpringBoot.Далее, когда мы используем официальные начальные зависимости, нам не нужно указывать номер версии. Нам также нужно использовать плагин SpringBoot, который в основном используется для упаковки приложения в виде исполняемого файла Jar.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.macro.mall</groupId>
<artifactId>mall-tiny-boot</artifactId>
<version>1.0-SNAPSHOT</version>
<name>mall-tiny-boot</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
<!--继承SpringBoot父项目,控制所有依赖版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--SpringBoot起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--SpringBoot插件,可以把应用打包为可执行Jar-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Используйте стартовые зависимости
Преимущества использования стартовых зависимостей
Прежде чем использовать начальные зависимости, давайте сначала разберемся в преимуществах использования начальных зависимостей.Когда мы используем SpringBoot и нам нужно интегрировать веб-функции, нам нужно толькоpom.xml
Просто добавьте стартовую зависимость в .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Если это проект Spring, нам нужно добавить много зависимостей, и нам также нужно учитывать совместимость каждой версии зависимостей, что довольно хлопотно.
Укажите зависимости на основе функций
Когда нам нужно разработать веб-приложение, нам нужно использовать базу данных MySQL для хранения, использовать Swagger для создания документов API и добавить следующие начальные зависимости. Следует отметить, что только официальные стартовые зависимости не нуждаются в указании номера версии, а другие все равно нужно указывать сами по себе.
<dependencies>
<!--SpringBoot Web功能起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--MyBatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--Mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--springfox swagger官方Starter-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
Переопределить библиотеки в стартовых зависимостях
По сути, стартовые зависимости ничем не отличаются от тех, которые вы обычно используете, вы можете использовать Maven для исключения нежелательных зависимостей. Например, если вы не хотите использовать контейнер tomcat, но хотите использовать контейнер undertow, вы можете исключить tomcat из зависимостей веб-функций.
<dependencies>
<!--SpringBoot Web功能起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!--排除tomcat依赖-->
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--undertow容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependencies>
Использовать автоматическую настройку
Автоматическая настройка SpringBoot — это процесс выполнения (точнее, при запуске приложения), учитывающий множество факторов, прежде чем решить, какую конфигурацию Spring следует использовать, а какую нет.
Например, когда мы используем Spring для интеграции MyBatis, нам необходимо выполнить следующие шаги:
- В соответствии с конфигурацией подключения к базе данных настройте объект dataSource;
- Настройте объект sqlSessionFactory в соответствии с объектом dataSource и файлом SqlMapConfig.xml (который содержит путь к файлу mapper.xml и конфигурацию пути интерфейса сопоставления).
Когда мы используем SpringBoot для интеграции MyBatis, объекты dataSource и sqlSessionFactory создаются автоматически, если мыapplication.yml
И добавьте некоторую пользовательскую конфигурацию в конфигурацию Java.
существуетapplication.yml
Настройте информацию о подключении к базе данных и путь к файлу mapper.xml в формате .
spring:
datasource:
url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
mybatis:
mapper-locations:
- classpath:mapper/*.xml
- classpath*:com/**/mapper/*.xml
Используя конфигурацию Java, настройте путь к интерфейсу преобразователя.
/**
* MyBatis配置类
* Created by macro on 2019/4/8.
*/
@Configuration
@MapperScan("com.macro.mall.tiny.mbg.mapper")
public class MyBatisConfig {
}
После использования автоматической настройки конфигурация интеграции других функций значительно сокращается, и мы можем больше сосредоточиться на разработке программных функций.
пользовательская конфигурация
Автоматическая настройка пользовательского переопределения бина
Хотя автоконфигурация работает хорошо, иногда автоматически сконфигурированные компоненты не соответствуют вашим потребностям Мы можем определить те же самые компоненты, чтобы переопределить автоматически сконфигурированные компоненты.
Например, когда мы используем Spring Security для защиты безопасности приложений, поскольку автоматическая настройка не может удовлетворить наши потребности, нам необходимо настроить конфигурацию на основе WebSecurityConfigurerAdapter. Здесь мы настроили множество конфигураций, таких как изменение аутентификации на основе сеанса для использования токенов JWT, настройка некоторых путей для несанкционированного доступа, настройка пути интерфейса входа в систему, отключение функции csrf и т. д.
/**
* SpringSecurity的配置
* Created by macro on 2018/4/26.
*/
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UmsAdminService adminService;
@Autowired
private RestfulAccessDeniedHandler restfulAccessDeniedHandler;
@Autowired
private RestAuthenticationEntryPoint restAuthenticationEntryPoint;
@Autowired
private IgnoreUrlsConfig ignoreUrlsConfig;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
List<String> urls = ignoreUrlsConfig.getUrls();
String[] urlArray = ArrayUtil.toArray(urls, String.class);
httpSecurity.csrf()// 由于使用的是JWT,我们这里不需要csrf
.disable()
.sessionManagement()// 基于token,所以不需要session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.GET,urlArray) // 允许对于网站静态资源的无授权访问
.permitAll()
.antMatchers("/admin/login")// 对登录注册要允许匿名访问
.permitAll()
.antMatchers(HttpMethod.OPTIONS)//跨域请求会先进行一次options请求
.permitAll()
.anyRequest()// 除上面外的所有请求全部需要鉴权认证
.authenticated();
// 禁用缓存
httpSecurity.headers().cacheControl();
// 添加JWT filter
httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
//添加自定义未授权和未登录结果返回
httpSecurity.exceptionHandling()
.accessDeniedHandler(restfulAccessDeniedHandler)
.authenticationEntryPoint(restAuthenticationEntryPoint);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService())
.passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public UserDetailsService userDetailsService() {
//获取登录用户信息
return username -> {
AdminUserDetails admin = adminService.getAdminByUsername(username);
if (admin != null) {
return admin;
}
throw new UsernameNotFoundException("用户名或密码错误");
};
}
@Bean
public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter() {
return new JwtAuthenticationTokenFilter();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
Автоматическая тонкая настройка конфигурации
Иногда нам нужно только настроить автоматическую конфигурацию в соответствии с требованиями, и нам не нужно переопределять автоматически настроенные bean-компоненты.application.yml
настраивается в файле свойств.
Например, тонкая настройка порта, на котором работает приложение.
server:
port: 8088
Например, измените информацию о соединении с базой данных.
spring:
datasource:
url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
Чтение пользовательских свойств файлов конфигурации
Иногда мы настраиваем некоторые свойства в файле свойств, а затем используем их в программе. На этом этапе эти пользовательские свойства можно сопоставить с классом свойств для использования.
Например, если мы хотим настроить белый список для Spring Security, нет необходимости разрешать доступ к этим путям.application.yml
Добавьте следующую конфигурацию.
secure:
ignored:
urls:
- /
- /swagger-ui/
- /*.html
- /favicon.ico
- /**/*.html
- /**/*.css
- /**/*.js
- /swagger-resources/**
- /v2/api-docs/**
После этого создайте класс свойств, используйте@ConfigurationProperties
Аннотация настраивает префикс этих свойств, а затем определяетurls
Свойства соответствуют файлу свойств.
/**
* 用于配置白名单资源路径
* Created by macro on 2018/11/5.
*/
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "secure.ignored")
public class IgnoreUrlsConfig {
private List<String> urls = new ArrayList<>();
}
Actuator
Ключевой особенностью SpringBoot Actuator является предоставление многочисленных веб-конечных точек в приложении, через которые они понимают внутреннее состояние среды выполнения приложения.
Обзор конечной точки
Actuator предоставляет около 20 конечных точек.Обычные пути и описания конечных точек следующие:
дорожка | метод запроса | описывать |
---|---|---|
/beans | GET | Описать все bean-компоненты в контексте приложения и отношения между ними. |
/conditions | GET | Описывает отчет автоконфигурации, записывая, какие автоконфигурации сработали, а какие нет. |
/env | GET | Получить все свойства среды |
/env/{name} | GET | Получить конкретное свойство среды по имени |
/mappings | GET | Описать отношение сопоставления между всеми путями URI и контроллерами или фильтрами. |
/configprops | GET | Описывает, как свойства конфигурации (включая значения по умолчанию) внедряются в bean-компоненты. |
/metrics | GET | Получите метрики приложений, такие как JVM и информацию о процессах |
/metrics/{name} | GET | Получить метрику приложения с указанным именем |
loggers | GET | Просмотр уровня журнала в приложении |
/threaddump | GET | Получите снимок активности потока |
/health | GET | Сообщает индикаторы работоспособности приложения, эти значения предоставляются классом реализации HealthIndicator |
/shutdown | POST | закрыть приложение |
/info | GET | Получите пользовательскую информацию для приложения, которая предоставляется атрибутами, начинающимися с информации |
Просмотр сведений о конфигурации
- Прямой доступ к корневой конечной точке, вы можете получить все пути доступа к конечной точке, адрес доступа к корневой конечной точке:http://localhost:8088/actuator
{
"_links": {
"self": {
"href": "http://localhost:8088/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:8088/actuator/beans",
"templated": false
},
"caches-cache": {
"href": "http://localhost:8088/actuator/caches/{cache}",
"templated": true
},
"caches": {
"href": "http://localhost:8088/actuator/caches",
"templated": false
},
"health": {
"href": "http://localhost:8088/actuator/health",
"templated": false
},
"health-path": {
"href": "http://localhost:8088/actuator/health/{*path}",
"templated": true
},
"info": {
"href": "http://localhost:8088/actuator/info",
"templated": false
},
"conditions": {
"href": "http://localhost:8088/actuator/conditions",
"templated": false
},
"configprops": {
"href": "http://localhost:8088/actuator/configprops",
"templated": false
},
"env": {
"href": "http://localhost:8088/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://localhost:8088/actuator/env/{toMatch}",
"templated": true
},
"loggers": {
"href": "http://localhost:8088/actuator/loggers",
"templated": false
},
"loggers-name": {
"href": "http://localhost:8088/actuator/loggers/{name}",
"templated": true
},
"heapdump": {
"href": "http://localhost:8088/actuator/heapdump",
"templated": false
},
"threaddump": {
"href": "http://localhost:8088/actuator/threaddump",
"templated": false
},
"metrics-requiredMetricName": {
"href": "http://localhost:8088/actuator/metrics/{requiredMetricName}",
"templated": true
},
"metrics": {
"href": "http://localhost:8088/actuator/metrics",
"templated": false
},
"scheduledtasks": {
"href": "http://localhost:8088/actuator/scheduledtasks",
"templated": false
},
"mappings": {
"href": "http://localhost:8088/actuator/mappings",
"templated": false
}
}
}
- пройти через
/beans
Endpoint, вы можете получить информацию о bean-компоненте в контексте приложения Spring, такую как тип и свойства зависимостей bean-компонента и т. д., адрес доступа:http://localhost:8088/actuator/beans
{
"contexts": {
"application": {
"beans": {
"sqlSessionFactory": {
"aliases": [],
"scope": "singleton",
"type": "org.apache.ibatis.session.defaults.DefaultSqlSessionFactory",
"resource": "class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]",
"dependencies": [
"dataSource"
]
},
"jdbcTemplate": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.jdbc.core.JdbcTemplate",
"resource": "class path resource [org/springframework/boot/autoconfigure/jdbc/JdbcTemplateConfiguration.class]",
"dependencies": [
"dataSource",
"spring.jdbc-org.springframework.boot.autoconfigure.jdbc.JdbcProperties"
]
}
}
}
}
}
- пройти через
/conditions
Endpoint, вы можете получить отчет об автоматической настройке текущего приложения,positiveMatches
Указывает на действующую автоматическую настройку,negativeMatches
Указывает, что автоматическая конфигурация не действует.
{
"contexts": {
"application": {
"positiveMatches": {
"DruidDataSourceAutoConfigure": [{
"condition": "OnClassCondition",
"message": "@ConditionalOnClass found required class 'com.alibaba.druid.pool.DruidDataSource'"
}]
},
"negativeMatches": {
"RabbitAutoConfiguration": {
"notMatched": [{
"condition": "OnClassCondition",
"message": "@ConditionalOnClass did not find required class 'com.rabbitmq.client.Channel'"
}],
"matched": []
}
}
}
}
}
- пройти через
/env
Конечная точка для получения всех свойств конфигурации, включая переменные среды, свойства JVM, аргументы командной строки иapplication.yml
свойства в .
{
"activeProfiles": [],
"propertySources": [{
"name": "systemProperties",
"properties": {
"java.runtime.name": {
"value": "Java(TM) SE Runtime Environment"
},
"java.vm.name": {
"value": "Java HotSpot(TM) 64-Bit Server VM"
},
"java.runtime.version": {
"value": "1.8.0_91-b14"
}
}
},
{
"name": "applicationConfig: [classpath:/application.yml]",
"properties": {
"server.port": {
"value": 8088,
"origin": "class path resource [application.yml]:2:9"
},
"spring.datasource.url": {
"value": "jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai",
"origin": "class path resource [application.yml]:6:10"
},
"spring.datasource.username": {
"value": "root",
"origin": "class path resource [application.yml]:7:15"
},
"spring.datasource.password": {
"value": "******",
"origin": "class path resource [application.yml]:8:15"
}
}
}
]
}
- пройти через
/mappings
Конечная точка, вы можете просмотреть отношения сопоставления между всеми путями URI и контроллерами или фильтрами, здесь вы можете увидеть наше собственное определениеPmsBrandController
иJwtAuthenticationTokenFilter
картографические отношения.
{
"contexts": {
"application": {
"mappings": {
"dispatcherServlets": {
"dispatcherServlet": [{
"handler": "com.macro.mall.tiny.controller.PmsBrandController#createBrand(PmsBrand)",
"predicate": "{POST /brand/create}",
"details": {
"handlerMethod": {
"className": "com.macro.mall.tiny.controller.PmsBrandController",
"name": "createBrand",
"descriptor": "(Lcom/macro/mall/tiny/mbg/model/PmsBrand;)Lcom/macro/mall/tiny/common/api/CommonResult;"
},
"requestMappingConditions": {
"consumes": [],
"headers": [],
"methods": [
"POST"
],
"params": [],
"patterns": [
"/brand/create"
],
"produces": []
}
}
}]
}
},
"servletFilters": [{
"servletNameMappings": [],
"urlPatternMappings": [
"/*",
"/*",
"/*",
"/*",
"/*"
],
"name": "jwtAuthenticationTokenFilter",
"className": "com.macro.mall.tiny.component.JwtAuthenticationTokenFilter"
}]
}
}
}
Просмотр показателей времени выполнения
- пройти через
/metrics
Endpoint, вы можете получить метрики приложения, но получить только название метрики;
{
"names": [
"http.server.requests",
"jvm.buffer.count",
"jvm.buffer.memory.used",
"jvm.buffer.total.capacity",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"jvm.gc.live.data.size",
"jvm.gc.max.data.size",
"jvm.gc.memory.allocated",
"jvm.gc.memory.promoted",
"jvm.gc.pause",
"jvm.memory.committed",
"jvm.memory.max",
"jvm.memory.used",
"jvm.threads.daemon",
"jvm.threads.live",
"jvm.threads.peak",
"jvm.threads.states",
"logback.events",
"process.cpu.usage",
"process.start.time",
"process.uptime",
"system.cpu.count",
"system.cpu.usage"
]
}
- Вам нужно добавить имя индикатора, чтобы получить соответствующее значение, такое как получение информации о памяти, используемой текущей JVM, и адрес доступа:http://localhost:8088/actuator/metrics/jvm.memory.used
{
"name": "jvm.memory.used",
"description": "The amount of used memory",
"baseUnit": "bytes",
"measurements": [
{
"statistic": "VALUE",
"value": 3.45983088E8
}
],
"availableTags": [
{
"tag": "area",
"values": [
"heap",
"nonheap"
]
},
{
"tag": "id",
"values": [
"Compressed Class Space",
"PS Survivor Space",
"PS Old Gen",
"Metaspace",
"PS Eden Space",
"Code Cache"
]
}
]
}
- пройти через
loggers
Endpoint, вы можете просмотреть информацию об уровне журнала в приложении, вы можете видеть, что мы поставилиROOT
Журнал области установлен на INFO, в то время какcom.macro.mall.tiny
Параметр для всего пакета — DEBUG.
{
"levels": [
"OFF",
"ERROR",
"WARN",
"INFO",
"DEBUG",
"TRACE"
],
"loggers": {
"ROOT": {
"configuredLevel": "INFO",
"effectiveLevel": "INFO"
},
"com.macro.mall.tiny": {
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}
}
}
- пройти через
/health
Конечная точка для просмотра показателей работоспособности приложения.
{
"status": "UP"
}
закрыть приложение
через POST-запрос/shutdown
Конечная точка может напрямую закрыть приложение, но это должно бытьendpoints.shutdown.enabled
свойство имеет значение true для использования.
{
"message": "Shutting down, bye..."
}
Пользовательский привод
Иногда нам нужно настроить конечные точки Actuator в соответствии с нашими потребностями.
- Например, некоторые конечные точки Actuator закрыты по умолчанию, если мы хотим открыть все конечные точки, мы можем установить это так;
management:
endpoints:
web:
exposure:
include: '*'
- Например, мы хотим настроить базовый путь конечной точки Actuator, например изменить на
/monitor
, поэтому наш адрес доступа становится таким:http://localhost:8088/monitor
management:
endpoints:
web:
base-path: /monitor
Общие стартовые зависимости
Начальные зависимости не только упрощают настройку зависимостей для создания приложений, но и организуют их вместе в соответствии с функциями, предоставляемыми приложению.Вот некоторые часто используемые начальные зависимости.
официальная зависимость
<dependencies>
<!--SpringBoot整合Web功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot整合Actuator功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--SpringBoot整合AOP功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--SpringBoot整合测试功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--SpringBoot整合注解处理功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--SpringBoot整合Spring Security安全功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--SpringBoot整合Redis数据存储功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--SpringBoot整合Elasticsearch数据存储功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--SpringBoot整合MongoDB数据存储功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!--SpringBoot整合AMQP消息队列功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--SpringBoot整合Quartz定时任务功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<!--SpringBoot整合JPA数据存储功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--SpringBoot整合邮件发送功能依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
сторонние зависимости
<dependencies>
<!--SpringBoot整合MyBatis数据存储功能依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-version.version}</version>
</dependency>
<!--SpringBoot整合PageHelper分页功能依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-starter.version}</version>
</dependency>
<!--SpringBoot整合Druid数据库连接池功能依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--SpringBoot整合Springfox的Swagger API文档功能依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${springfox-version}</version>
</dependency>
<!--SpringBoot整合MyBatis-Plus数据存储功能依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus-version}</version>
</dependency>
<!--SpringBoot整合Knife4j API文档功能依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j-version}</version>
</dependency>
</dependencies>
Адрес исходного кода проекта
Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!