2016-09-29 115 views
0

春天开机不会自动装配一个MBean的,我从另一个Web应用程序导出的:Spring Boot autowire MBean?

@Component 
@Service 
@ManagedResource(objectName = IHiveService.MBEAN_NAME) 
public class HiveService implements IHiveService { 
    @Autowired(required = true) 
    CategoryRepository categoryRepository; 

    @Override 
    @ManagedOperation 
    public String echo(String input) { 
     return "you said " + input; 
    } 
} 

我可以看到在甲骨文的Java任务控制,但其他的Spring应用程序启动使用Bean是不能够自动装配豆。我这是我错过了一个注释。自动装配我使用的豆:

@Controller 
@Configuration 
@EnableMBeanExport 
public class GathererControls { 
    @Autowired 
    IHiveService hiveService; // <-- this should be auto wired 

任何想法?

+0

'@ Controller'和'@ Configuration'在同一个班?那可能吗? – Pau

+0

@PauChorro我得到绝望,并尝试了一切...... –

回答

3

在您想要从原始应用程序访问管理Bean的应用程序中,您不需要注释@EnableMBeanExport

您需要做的是连接JMX注册表以访问导出的(由第一个应用程序)管理对象。

@Configuration 
public class MyConfiguration { 

    @Bean 
    public MBeanProxyFactoryBean hiveServiceFactory() { 
    MBeanProxyFactoryBean proxyFactory = new MBeanProxyFactoryBean(); 
    proxyFactory.setObjectName(IHiveService.MBEAN_NAME); 
    proxyFactory.setProxyInterface(IHiveService.class); 
    proxyFactory.afterPropertiesSet(); 
    return proxyFactory; 
    } 

    @Bean 
    public IHiveService hiveService(MBeanProxyFactoryBean hiveServiceFactory) { 
    return (IHiveService) hiveServiceFactory.getObject(); 
    } 
} 

现在在你的控制器:

@Controller 
public class GathererControls { 
    @Autowired 
    IHiveService hiveService; // <-- will be autowired 
    // ... 
    // ... 
} 
+0

你是我的个人英雄:)它的工作!非常感谢你。 –