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
   // ...
   // ...
}
Другие вопросы по тегам