Spring Boot с автопроводкой MBean?
Spring Boot не будет автоматически связывать 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;
}
}
Я могу видеть и использовать компонент в Oracle Java Mission Control, но другое приложение Spring Boot не может автоматически подключить компонент. Я это я пропустил аннотацию. Для автоматического подключения бина я использую:
@Controller
@Configuration
@EnableMBeanExport
public class GathererControls {
@Autowired
IHiveService hiveService; // <-- this should be auto wired
Есть идеи?
1 ответ
Решение
Вам не нужно @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
// ...
// ...
}