Spring Boot项目整合Actuator

1.前言

Spring Boot Actuator是监控系统健康情况的工具,可以帮助我们监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等,所有的这些特性可以通过JMX或者HTTP endpoints来获得。

 

常用端点如下:

 

端点描述HTTP方法
autoconfig显示自动配置的信息GET
beans显示应用程序上下文的所有Spring BeanGET
configprops显示所有@ConfigurationProperties的属性配置列表GET
dump显示线程活动的快照GET
env显示应用的环境变量GET
health显示应用程序的健康指标GET
info显示应用的信息GET
mappings显示所有的URL路径GET
metrics显示应用的度量标准信息GET
shutdown关闭应用(默认不启用,如需要启用,需要配置endpoints.shutdown.enabled=true)POST
trace显示跟踪信息GET

 

2.工程结构及依赖

  • 工程整体目录结构

  • 环境及版本说明

JDK: 1.8

Spring Boot:  2.1.4.RELEASE

持久层框架:Spring Data JPA

数据库: H2

 

  • POM文件:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lll.learn</groupId>
    <artifactId>providor-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>providor-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!--H2数据库-->
        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>

    <!-- 引入spring cloud的依赖-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>

    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 其中针对Actuator关键引用如下:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

使用的版本为2.1.4.RELEASE。

3. 配置文件

  • application.properties
server.port=8000

#######log日志配置
logging.file=classpath:log4j2.properties


#######h2配置
spring.jpa.generate-ddl=false
#启用SQL语句的日志记录
spring.jpa.show-sql = true 
#设置ddl模式
spring.jpa.hibernate.ddl-auto = update
##数据库连接设置
#配置h2数据库的连接地址
spring.datasource.url = jdbc:h2:mem:dbtest
#配置数据库用户名
spring.datasource.username = sa
#配置数据库密码
spring.datasource.password = sa
#配置JDBC Driver
spring.datasource.driverClassName =org.h2.Driver
##数据初始化设置
#进行该配置后,每次启动程序,程序都会运行resources/db/schema.sql文件,对数据库的结构进行操作。
spring.datasource.schema=classpath*:schema.sql
#进行该配置后,每次启动程序,程序都会运行resources/db/data.sql文件,对数据库的数据操作。
spring.datasource.data=classpath*:data.sql
##h2 web console设置
#表明使用的数据库平台是h2
spring.datasource.platform=h2
# 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
spring.h2.console.settings.web-allow-others=true
#进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。
spring.h2.console.path=/h2
#进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
spring.h2.console.enabled=true
  • data.sql (准备1条测试数据)
insert into user(id, username, name, age, balance) values (1, 'account1', 'zhangsan', 20, 100.00);
  • log4j2.properties
# LOG配置
status = INFO
monitorInterval=30

property.LOG_HOME=logs
property.SERVER_NAME=appWiki
property.FILE_SIZE=10M
property.FILE_MAX=10
property.LOG_LEVEL=INFO
property.LOG_PATTERN=[${SERVER_NAME}] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %-5p => %c.%M(%F:%L) - %m%n

appender.console.type=Console
appender.console.name=ConsoleAppender
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=${LOG_PATTERN}

appender.rolling.type=RollingFile
appender.rolling.name=FileAppender
appender.rolling.filter.threshold.level=info
appender.rolling.filter.threshold.type=ThresholdFilter
appender.rolling.fileName=${LOG_HOME}/${SERVER_NAME}.log
appender.rolling.filePattern=${LOG_HOME}/${SERVER_NAME}-%d{yyyy-MM-dd}-%i.log
appender.rolling.layout.type=PatternLayout
appender.rolling.layout.pattern=${LOG_PATTERN}
appender.rolling.policies.type=Policies
appender.rolling.policies.time.type=TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval=2
appender.rolling.policies.time.modulate=true
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=${FILE_SIZE}
appender.rolling.strategy.type=DefaultRolloverStrategy
appender.rolling.strategy.max=${FILE_MAX}

rootLogger.level=${LOG_LEVEL}
rootLogger.appenderRef.console.ref=ConsoleAppender
rootLogger.appenderRef.file.ref=FileAppender

logger.archetype.name=com.hstc.app
logger.archetype.level=${LOG_LEVEL}
logger.archetype.additivity=false
logger.archetype.appenderRef.console.ref=ConsoleAppender
logger.archetype.appenderRef.file.ref=FileAppender

logger.sql.name=log4j.logger.java.sql
logger.sql.level=INFO
logger.sql.additivity=false
logger.sql.appenderRef.console.ref=ConsoleAppender
logger.sql.appenderRef.file.ref=FileAppender
log4j.logger.org.mybatis=DEBUG
  • schema.sql (建表语句)
drop table user if exists;
create table user(id bigint generated by default as identity, username varchar(40), name varchar(20), age int(3), balance decimal(10,2), primary key(id));
  • ProvidorDemoApplication入口类 
package com.lll.learn.providerdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProvidorDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProvidorDemoApplication.class, args);
    }

}
  • User实体类
package com.lll.learn.providerdemo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import javax.persistence.*;
import java.math.BigDecimal;

/**
 * @ClassName : User
 * @Description:
 * @Author: liulianglin
 * @Date: 2020/3/28 21:35
 * @Version : 1.0
 */
@Entity
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String username;

    @Column
    private String name;

    @Column
    private Integer age;

    @Column
    private BigDecimal balance;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public BigDecimal getBalance() {
        return balance;
    }

    public void setBalance(BigDecimal balance) {
        this.balance = balance;
    }
}
  •  UserController
package com.lll.learn.providerdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName : UserController
 * @Description:
 * @Author: liulianglin
 * @Date: 2020/3/28 21:39
 * @Version : 1.0
 */
@RestController
public class UserController {
    @Autowired
    UserDao userDao;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id){
        return this.userDao.getOne(id);
    }
}
  • UserDao
  •  
    package com.lll.learn.providerdemo;
    
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.stereotype.Repository;
    
    /**
     * @ClassName : UserDao
     * @Description:
     * @Author: liulianglin
     * @Date: 2020/3/28 21:38
     * @Version : 1.0
     */
    @Repository
    public interface UserDao extends JpaRepository<User, Long> {
    }
    

     

4. 启动项目及信息查看

  • 运行端口:8000
  • 项目启动成功输出
2021-03-15 10:30:29.426  INFO 33728 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2021-03-15 10:30:29.528  INFO 33728 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8000 (http) with context path ''
2021-03-15 10:30:29.529  INFO 33728 --- [           main] c.l.l.p.ProvidorDemoApplication          : Started ProvidorDemoApplication in 4.132 seconds (JVM running for 7.316)
2021-03-15 10:30:32.018  INFO 33728 --- [)-169.254.92.12] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-03-15 10:30:32.018  INFO 33728 --- [)-169.254.92.12] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-03-15 10:30:32.024  INFO 33728 --- [)-169.254.92.12] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms

 

输出信息如下:

{"status":"UP"}

UP表示运行正常,除UP外,还有DOWN、OUT_OF_SERVICE、UNKNOW等状态

至此项目已成功集成了Actuator,关于Actuator其他端点的使用可自行尝试学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值