小编jla*_*lai的帖子

关闭Spring Boot应用程序时无法注销DataSource JMX MBean

我有一个简单的Spring Boot应用程序,使用org.apache.commons.dbcp2.BasicDataSource作为dataSource bean.

Spring引导自动将数据源公开为MBean.

bean声明:

@Bean
public DataSource dataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setUrl(dbUrl);
    dataSource.setDriverClassName(jdbcDriver);
    dataSource.setUsername(dbUserName);
    dataSource.setPassword(dbPassword);
    return dataSource;
}
Run Code Online (Sandbox Code Playgroud)

一切正常.但是,我在关闭应用程序时看到错误.只有在运行可执行jar时才会出现此错误.使用Gradle Spring插件(gradle bootRun)时,不会显示.

javax.management.InstanceNotFoundException: org.apache.commons.dbcp2:name=dataSource,type=BasicDataSource
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546)
    at org.apache.commons.dbcp2.BasicDataSource.close(BasicDataSource.java:1822)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:350)
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:273)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:540)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:516)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:827)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:485)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:921)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:895)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.doClose(EmbeddedWebApplicationContext.java:152)
    at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:809)
Run Code Online (Sandbox Code Playgroud)

我想知道,1.这个bean如何作为JMX MBean公开?2.如何正确注销这个MBean?

java spring jmx spring-jmx spring-boot

19
推荐指数
1
解决办法
1万
查看次数

如何动态创建一个在PHP中扩展抽象类的匿名类?

简单地说,让我通过一个例子来解释.

<?php
class My extends Thread {
    public function run() {
        /** ... **/
    }
}
$my = new My();
var_dump($my->start());
?>
Run Code Online (Sandbox Code Playgroud)

这是来自PHP手册.

我想知道是否有办法以更像Java的方式做到这一点.例如:

<?php
$my = new Thread(){
        public function run() {
            /** ... **/
        }
      };
var_dump($my->start());
?>
Run Code Online (Sandbox Code Playgroud)

php anonymous-class dynamically-generated

5
推荐指数
2
解决办法
2966
查看次数

AWS Api Gateway + Lambda +自定义域(Route53)缺少身份验证令牌问题

我知道许多类似的问题已在这里发布并回答,但它们与我所遇到的完全不同.

我有一个Lambda函数来处理传入的请求(GET和POST).我还设置了一个api网关作为面向公众的端点.此外,我在为API主机名设置自定义域名后设置了自定义域

测试调用适用于lambda和api网关控制台.一切也可以使用调用URL,但不能使用我设置的自定义域.

以下是一些更多细节:

调用URL(Works):

https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint
Run Code Online (Sandbox Code Playgroud)

自定义域endpint(不起作用):

https://api.{my domain}.com/endpoint
Run Code Online (Sandbox Code Playgroud)

基本路径映射:

/endpoint   endpoint:prod
Run Code Online (Sandbox Code Playgroud)

所有方法验证:

Authorization None
API Key Not required
Run Code Online (Sandbox Code Playgroud)

Route53:

A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 
Run Code Online (Sandbox Code Playgroud)

如果有人知道这里会发生什么,我真的很感激.

lambda amazon-web-services amazon-route53 aws-api-gateway

5
推荐指数
2
解决办法
1648
查看次数