Привод пружинного башмака подключите jmx программно - PullRequest
0 голосов
/ 17 мая 2018

Я бы хотел использовать конечную точку shutdown моего приложения Spring Boot 2.0.1 из командной строки.Для этого я только добавил spring-boot-starter-actuator в свой файл Gradle и включил конечную точку shutdown в конфигурации.

Я также создал очень простой инструмент, который пытается подключиться через JMX к работающему приложению.

Фрагмент:

String url = "service:jmx:rmi:///jndi/rmi://127.0.01:<which port?>/jmxrmi";
JMXServiceURL serviceUrl = new JMXServiceURL(url);
JMXConnectorFactory.connect(serviceUrl, null); <-- KAPOW!

JMX работает, потому что я могу использовать jconsole для локального подключения.Я просто понятия не имею, как это сделать программно.

Любые другие попытки явно установить порт, как указано здесь , не работали.Есть намеки?

1 Ответ

0 голосов
/ 17 мая 2018

Возможно, проще включить jolokia , чем использовать RMI;тогда вы можете просто

curl http://localhost:8080/actuator/jolokia/exec/org.springframework.boot:type=Admin,name=SpringApplication/shutdown

РЕДАКТИРОВАТЬ

Если вы предпочитаете использовать RMI, обратитесь к Spring Framework JMX Documentation .

Серверное приложение:

@SpringBootApplication
public class So50392589Application {

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

    @Bean
    public RmiRegistryFactoryBean rmi() {
        RmiRegistryFactoryBean rmi = new RmiRegistryFactoryBean();
        rmi.setPort(1099);
        return rmi;
    }

    @Bean
    public ConnectorServerFactoryBean server() throws Exception {
        ConnectorServerFactoryBean fb = new ConnectorServerFactoryBean();
        fb.setObjectName("connector:name=rmi");
        fb.setServiceUrl("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector");
        return fb;
    }

}

Клиентское приложение:

@SpringBootApplication
public class JmxClient {

    public static void main(String[] args) {
        new SpringApplicationBuilder(JmxClient.class)
            .web(WebApplicationType.NONE)
            .run(args);
    }

    @Bean
    public ApplicationRunner runner(MBeanServerConnection jmxConnector) {
        return args -> {
            jmxConnector.invoke(new ObjectName("org.springframework.boot:type=Admin,name=SpringApplication"),
                    "shutdown", new Object[0], new String[0]);
        };
    }

    @Bean
    public MBeanServerConnectionFactoryBean jmxConnector() throws Exception {
        MBeanServerConnectionFactoryBean jmx = new MBeanServerConnectionFactoryBean();
        jmx.setServiceUrl("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector");
        return jmx;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...