Spring Boot:与监控管理

 

通过引入spring-boot-starter-actuator模块,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP,JMX,SSH协议来进行操作,自动得到审计、健康及指标信息等

步骤:

引入spring-boot-starter-actuator

通过http方式访问监控端点

可进行shutdown(POST 提交,此端点默认关闭)

端点名

描述

autoconfig

所有自动配置信息

auditevents

审计事件

beans

所有Bean的信息

configprops

所有配置属性

dump

线程状态信息

env

当前环境信息

health

应用健康状况

info

当前应用信息

metrics

应用的各项指标

mappings

应用@RequestMapping映射路径

shutdown

关闭当前应用(默认关闭)

trace

追踪信息(最新的http请求)

 

定制端点一般通过endpoints+端点名+属性名来设置。

修改端点id(endpoints.beans.id=mybeans)

开启远程应用关闭功能(endpoints.shutdown.enabled=true)

关闭端点(endpoints.beans.enabled=false)

开启所需端点 endpoints.enabled=false endpoints.beans.enabled=true

定制端点访问根路径 management.context-path=/manage

关闭http端点 management.port=-1

 

其中配置文件报错

a global security auto-configuration is now provided

问题原因是springBoot1.XXX升级为2以后的版本问题:

从Spring Boot 1.5升级到2.0

Spring Data

Spring Data的一些方法进行了重命名:

  • findOne(id) -> findById(id) (返回的是Optional)
  • delete(id) -> deleteById(id)
  • exists(id) -> existsById(id)
  • findAll(ids) -> findAllById(ids)

配置

在升级时,可以在pom中增加spring-boot-properties-migrator,这样在启动时会提示需要更改的配置:

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>

其中改动较大的是security(The security auto-configuration is no longer customizable,A global security auto-configuration is now provided)、management、banner、server等。

  • security

security开头的配置及management.security均已过期,如以下的配置不再支持,需要调整到代码中:

security:
  ignored: /api-docs,/swagger-resources/**,/swagger-ui.html**,/webjars/**
  • management
management:
  security:
    enabled: false
  port: 8090

修改为:

management:
  server:
    port: 8090
  • datasource
datasource:
    initialize: false

修改为:

datasource:
    initialization-mode: never

如使用PostgreSQL,可能会报错:Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented hibernate,需修改配置:

jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    properties:
       hibernate:
         default_schema: test
         jdbc:
           lob:
             non_contextual_creation: true
  • banner调整为spring.banner
  • server调整为server.servlet

更多需要调整的参数请看文末参考文档。

Security

WebSecurityConfigurerAdapter

  • security.ignored
@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api-docs", "/swagger-resources/**", "/swagger-ui.html**", "/webjars/**");
}
  • AuthenticationManager

如在代码中注入了AuthenticationManager,

@Autowired
private AuthenticationManager authenticationManager;

在启动时会报错:Field authenticationManager required a bean of type 'org.springframework.security.authentication.AuthenticationManager' that could not be found.请在WebSecurityConfigurerAdapter中增加以下代码:

@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}

Actuator

  • 配置属性变化
Old propertyNew property
endpoints.id.*management.endpoint.id.*
endpoints.cors.*management.endpoints.web.cors.*
endpoints.jmx.*management.endpoints.jmx.*
management.addressmanagement.server.address
management.context-pathmanagement.server.servlet.context-path
management.ssl.*management.server.ssl.*
management.portmanagement.server.port

management.endpoints.web.base-path的默认值为/actuator,即Actuator访问路径前部增加了actuator([/actuator/health],[/actuator/info]),这可以在启动日志中看到。
因management.security不再支持,权限配置需添加到WebSecurityConfigurerAdapter中:

.authorizeRequests()
.requestMatchers(EndpointRequest.to("health", "info")).permitAll()
  • Endpoint变化
EndpointChanges
/actuatorNo longer available. There is, however, a mapping available at the root of management.endpoints.web.base-path that provides links to all the exposed endpoints.
/auditeventsThe after parameter is no longer required
/autoconfigRenamed to /conditions
/docsNo longer available (the API documentation is part of the published documentation now)
/healthRather than relying on the sensitive flag to figure out if the health endpoint had to show full details or not, there is now a management.endpoint.health.show-details option: never, always, when-authorized. By default, /actuator/health is exposed and details are not shown.
/traceRenamed to /httptrace

新特性

  • Configuration Property Binding

可以在代码中直接使用Binder API从配置文件中读取内容:

public class Person implements EnvironmentAware {
        private Environment environment;

        @Override
        public void setEnvironment(Environment environment) {
            this.environment = environment;
        }

        public void bind() {
            List<PersonName> people = Binder.get(environment)
            .bind("my.property", Bindable.listOf(PersonName.class))
            .orElseThrow(IllegalStateException::new);
        }
}

YAML配置

my:
  property:
  - first-name: Jane
    last-name: Doe
  - first-name: John
    last-name: Doe
  • Spring Data Web Configuration

新增spring.data.web配置来设置分页和排序:

# DATA WEB (SpringDataWebProperties)
spring.data.web.pageable.default-page-size=20 # Default page size.
spring.data.web.pageable.max-page-size=2000 # Maximum page size to be accepted.
spring.data.web.pageable.one-indexed-parameters=false # Whether to expose and assume 1-based page number indexes.
spring.data.web.pageable.page-parameter=page # Page index parameter name.
spring.data.web.pageable.prefix= # General prefix to be prepended to the page number and page size parameters.
spring.data.web.pageable.qualifier-delimiter=_ # Delimiter to be used between the qualifier and the actual page number and size properties.
spring.data.web.pageable.size-parameter=size # Page size parameter name.
spring.data.web.sort.sort-parameter=sort # Sort parameter name.
  • 支持自定义JdbcTemplate
# JDBC (JdbcProperties)
spring.jdbc.template.fetch-size=-1 # Number of rows that should be fetched from the database when more rows are needed.
spring.jdbc.template.max-rows=-1 # Maximum number of rows.
spring.jdbc.template.query-timeout= # Query timeout. Default is to use the JDBC driver's default configuration. If a duration suffix is not specified, seconds will be used.
  • 支持hibernate自定义命名策略
  • Reactive

更多新特性请查看Release Notes。

Swagger

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

Swagger 2.9版本,增加了对@ApiParam属性example的处理,在Swagger UI和文档中会显示,因此要注意设置合适的example值:

@ApiOperation(value = "Delete airline by id")
@GetMapping("/airlines/delete/{airlineId}")
public void deleteAirline(@ApiParam(required = true, example = "123") @PathVariable Long airlineId)

否则你会看到Warn日志:
AbstractSerializableParameter

@JsonProperty("x-example")
public Object getExample() {
    if (example == null) {
        return null;
    }
    try {
        if (BaseIntegerProperty.TYPE.equals(type)) {
            return Long.valueOf(example);
        } else if (DecimalProperty.TYPE.equals(type)) {
            return Double.valueOf(example);
        } else if (BooleanProperty.TYPE.equals(type)) {
            if ("true".equalsIgnoreCase(example) || "false".equalsIgnoreCase(defaultValue)) {
                return Boolean.valueOf(example);
            }
        }
    } catch (NumberFormatException e) {
        LOGGER.warn(String.format("Illegal DefaultValue %s for parameter type %s", defaultValue, type), e);
    }
    return example;
}

另外Swagger 2.9.2会为org.springframework.data.domain.Pageable自动增加@ApiImplicitParams。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值