当前位置: 首页 > 知识库问答 >
问题:

Spring Boot执行器中的自定义endpoint

东方乐
2023-03-14

我正在尝试为Spring启动应用程序编写自定义终结点。我编写了自定义终结点实现,如下所示。我没有包括额外的内容,如导入以减少代码的大小。

@Component
public class TestendPoint implements Endpoint<List<String>>{

    public String getId() {
        return "test";      
    }

    public List<String> invoke() {
        List<String> test= new ArrayList<String>();
        test.add("Details 1");
        test.add("Details 2");
        return serverDetails;
    }

    public boolean isEnabled() {        
        return true;
    }

    public boolean isSensitive() {      
        return false;
    }

}

编写完以上代码后,我重新启动了应用程序并尝试从/test访问endpoint。但是,endpoint不可用。以下是Spring Boot start应用程序。

@Configuration
@EnableAutoConfiguration
public class Application{

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

除此之外,我有一切运行Spring Boot致动器。我可以访问默认endpoint,如/info、/metrics等。

如果我在这里错过了什么,你能分享你的知识吗?我假设将加载自定义终结点类,而无需开发人员进行进一步的配置

共有1个答案

饶滨海
2023-03-14

我已解决此问题。首先,我没有在应用程序类中包含@ComponentScan注释。或者我应该有@SpringBoot应用程序。当我添加注释时,我开始收到以下异常:

Caused by: java.lang.IllegalStateException: Could not evaluate condition owing to internal class not found. This can happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:50)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:92)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:79)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:62)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isConditionMatch(ClassPathScanningCandidateComponentProvider.java:361)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:345)
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:278)
    ... 18 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/dao/DataAccessException
    at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$EmbeddedDatabaseCondition.getMatchOutcome(DataSourceAutoConfiguration.java:308)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:129)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.anyMatches(SpringBootCondition.java:112)
    at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$DatabaseCondition.getMatchOutcome(DataSourceAutoConfiguration.java:333)
    at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:44)
    ... 24 more

这是因为包装。我尝试过从根包中执行main类。我不确定这是不是spring boot应用程序中的一个错误,我会在他们的网站上记录一个JIRA。一旦我增加了一层包结构,它就开始正常工作了。

 类似资料:
  • 从spring-boot v1.3迁移到最新的spring-boot v2.2.4后,我们失去了在管理端口下拥有自定义endpoint的能力。 在我们将自定义endpoint声明为: 由于已从Spring引导执行器中删除了MvcEndpoint,现在我们需要执行以下操作: 不幸的是,我们失去了一个为自定义管理endpoint提供自定义根路径的选项(在它出现之前) 对于背部兼容性,我们仍然希望有默认

  • 我已经激活了Spring执行器普罗米修斯endpont<代码>/执行器/普罗米修斯。通过增加对千分尺和执行器的依赖,并启用prometheus Endpont。我如何获得自定义度量?

  • 我目前正在尝试将我们的prometheus lib迁移到spring Boot2.0.3版本。我们使用普罗米修斯的自定义路径,到目前为止,我们使用一个工作来确保这一点。由于信息endpoint和健康endpoint可能有自定义路径,因此使用。我尝试指定,但它仍然只能在下访问。 如何使用自定义路径或普罗米修斯? 我们使用以下库启用prometheus(我们的build.gradle的片段) 我们还使

  • 我正在我的项目中使用模块,该模块公开了要监视的RESTendpointURL 默认情况下,仅公开 和 终结点。 根据我的使用案例,我正在通过< code > application . properties 文件自定义endpoint。 我想了解,Spring启动究竟在哪里为和创建实际的endpoint,以及它如何通过HTTP公开它们?

  • 春奴B:好的。我从一个STS Spring Starter项目/Maven/Java8/Spring Boot2.0开始,并选择Web和致动器依赖项。它构建和运行良好,并转发到http://localhost:8080/acturet/health。我在主应用程序类中添加了一个“endpoint”,使其看起来像这样。

  • 我正在编写一个定制的ThreadPoolExecutor,具有以下额外功能:- > 如果有理想的线程,并且随着任务的到来,将该任务分配到队列中,而不是将其添加到队列中。 如果所有线程(最大池大小)都忙,则在新任务到来时,使用RejectionHandler的reject方法将它们添加到队列中 我已经重写了线程池执行程序的java 1.5版本的执行方法。 新守则如下:- 遗留代码如下所示:- 现在正