【问题标题】:micronaut-spring and spring-boot-actuator, can't access /actuator endpointsmicronaut-spring 和 spring-boot-actuator,无法访问 /actuator 端点
【发布时间】:2020-09-15 22:41:38
【问题描述】:

刚刚尝试使用 Spring 功能的 micronaut,但无法访问我的 /actuator 端点 Spring Boot v2.3.0 版本和 micronaut 2.0.0.M3

我使用 mn create-app xxx --lang groovy 创建了一个基本的 micronaut 项目。

然后我添加了 spring 依赖项和 micronaut-spring 以及相关的注释处理器。

我的 build.gradle 现在看起来如下

plugins {
    id "groovy"
    id "com.github.johnrengelman.shadow" version "5.2.0"
    id "application"
    id "net.ltgt.apt" version "0.21"  //enables annotation preproccessing support
    id "net.ltgt.apt-idea" version "0.21"
    id "org.springframework.boot" version "2.3.0.RELEASE"
    id "io.spring.dependency-management" version "1.0.9.RELEASE"
}

ext['groovy.version'] = '3.0.4'

version "0.1"
group "com.softwood"

repositories {
    mavenCentral()
    maven { url "https://jcenter.bintray.com" }
}

configurations {
    // for dependencies that are needed for development only
    developmentOnly 
}

dependencies {

    //annotation processors
    annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion")
    annotationProcessor "io.micronaut.spring:micronaut-spring-boot-annotation"
    annotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation"
    testAnnotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation:2.0.1"

    //latest groovy v3
    implementation group: 'org.codehaus.groovy', name: 'groovy-all', version: '3.0.4' //, ext: 'pom'

    //spring
    compileOnly "io.micronaut.spring:micronaut-spring-annotation:2.0.1"
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation group: 'io.micronaut.spring', name: 'micronaut-spring-web', version: '2.0.1'
    runtime ("io.micronaut.spring:micronaut-spring-boot:2.0.1")


    compileOnly platform("io.micronaut:micronaut-bom:$micronautVersion")
    compileOnly "io.micronaut:micronaut-inject-groovy"
    implementation platform("io.micronaut:micronaut-bom:$micronautVersion")
    implementation "io.micronaut:micronaut-runtime-groovy"
    implementation "io.micronaut:micronaut-validation"
    implementation "javax.annotation:javax.annotation-api"
    implementation "io.micronaut:micronaut-http-server-netty"
    implementation "io.micronaut:micronaut-http-client"
    runtimeOnly "ch.qos.logback:logback-classic:1.2.3"
    testCompileOnly platform("io.micronaut:micronaut-bom:$micronautVersion")
    testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion")
    testImplementation("org.spockframework:spock-core:2.0-M2-groovy-3.0") {
        exclude group: "org.codehaus.groovy", module: "groovy-all"
    }
    testImplementation "io.micronaut:micronaut-inject-groovy"
    testImplementation "io.micronaut.test:micronaut-test-spock"
    testImplementation "io.micronaut.test:micronaut-test-junit5"
}

test.classpath += configurations.developmentOnly

mainClassName = "com.softwood.Application"

//added - enable incremetal compile feature - can't enable with annotation processors !
/*tasks.withType(GroovyCompile).configureEach {
    options.incremental = true
}*/

tasks.withType(GroovyCompile) {
    groovyOptions.forkOptions.jvmArgs.add('-Dgroovy.parameters=true')
}


shadowJar {
    mergeServiceFiles()
}

tasks.withType(JavaExec) {
    classpath += configurations.developmentOnly
    jvmArgs('-noverify', '-XX:TieredStopAtLevel=1', '-Dcom.sun.management.jmxremote')
}

我已经调整了一个HelloController如下

import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.HttpStatus
import org.springframework.boot.actuate.endpoint.annotation.Endpoint


@Controller("/hello")
@Endpoint
class HelloController {

    @Get("/")
    String index() {
        return 'hello william'
    }
}

并将 Application 类标记为 SpringbootApplication - 但调用 Micronaut.run() 来构建 MN 上下文等

import io.micronaut.runtime.Micronaut
import groovy.transform.CompileStatic
import org.springframework.boot.autoconfigure.SpringBootApplication

@CompileStatic
@SpringBootApplication
class Application {
    static void main(String[] args) {
        Micronaut.run(Application)
    }
}

我尝试调整 application.yml 以暴露所有端点,如下所示

micronaut:
  application:
    name: micronaut-std-app

management:
  endpoints:
    web:
      exposure:
        include=*:

这一切编译正常,运行正常。如果你调用 localhost:8080/hello 你会得到预期的字符串

如果您尝试访问执行器端点 - 不会生成任何内容,并且浏览器会显示

{"message":"Page Not Found","_links":{"self":{"href":"/actuator/health","templated":false}}}

如果您尝试做一个混合的 micronaut 和 spring 项目,那么您如何为您的 MN 预处理控制器等启用任何执行器端点?

【问题讨论】:

    标签: groovy spring-boot-actuator micronaut


    【解决方案1】:

    如果您只想要一个健康检查端点,Micronaut 已经内置了可用的健康检查端点。

    在 build.gradle 中添加休闲依赖以添加健康等端点:

    implementation("io.micronaut:micronaut-management")
    

    你可以在application.yml中添加

    endpoints:
        health:
            enabled: true
    

    然后将健康检查的url改为“/health”

    【讨论】:

    • 我会尝试,但是由于 Spring 执行器在类路径中 - MN 不只是让标准的 spring 执行器端点工作吗?它看起来像是一个疏忽,或者没有通过 Micronaut.run () 方法调用的东西。标准的弹簧功能在这里不能重用吗?
    • 部分spring可用于Micronaut,如Spring数据、Spring注解等。但我不确定一切都可以使用。有了 Micronaut 最新版本,几乎所有你可以用 Spring 做的事情都可以由 Micronaut 本地完成
    猜你喜欢
    • 2016-06-01
    • 2019-01-08
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2021-04-24
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多