Enabling JMX in Spring Boot












0















Here is my build.gradle...



dependencies {
compile('org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE')

compile('org.springframework.boot:spring-boot-starter-batch')
compile("org.springframework.boot:spring-boot-starter-jdbc")
compile("org.springframework.boot:spring-boot-starter-web")
compile("com.h2database:h2")

testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile('org.springframework.batch:spring-batch-test')
}


Which I thought would enable JMX by default. I go to JConsole, connect to the application and expect to see a org.springframework.boot folder under java.util.logging, I see nothing.



So, now I pick a few of my custom beans and add @ManagedResource, I know see these.



However, what if I want to expose spring batch beans like @JobOperator how do I do this?



Pre Spring Boot, I could so something like:



<bean class="org.springframework.jmx.export.MBeanExporter">
<property name="beans">
<map>
<entry key="spring:service=batch,bean=jobOperator">
<bean class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="jobOperator"/>
<property name="interceptorNames" value="exceptionTranslator" />
</bean>
</entry>
</map>
</property>
<property name="assembler">
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
<property name="interfaceMappings">
<map>
<entry key="spring:service=batch,bean=jobOperator"
value="org.springframework.batch.core.launch.JobOperator"/>
</map>
</property>
</bean>
</property>
</bean>


When I define my JobOperator, in my @Configuration file in Spring Boot I do:



@Bean
public JobOperator jobOperator() throws Exception {
SimpleJobOperator simpleJobOperator = new SimpleJobOperator();
// the operator wraps the launcher
simpleJobOperator.setJobLauncher(this.jobLauncher);
...
}


I can't add @ManagedResource under the @Bean annotation. So how do I expose the JobOperator as a JMX bean?










share|improve this question





























    0















    Here is my build.gradle...



    dependencies {
    compile('org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE')

    compile('org.springframework.boot:spring-boot-starter-batch')
    compile("org.springframework.boot:spring-boot-starter-jdbc")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("com.h2database:h2")

    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.springframework.batch:spring-batch-test')
    }


    Which I thought would enable JMX by default. I go to JConsole, connect to the application and expect to see a org.springframework.boot folder under java.util.logging, I see nothing.



    So, now I pick a few of my custom beans and add @ManagedResource, I know see these.



    However, what if I want to expose spring batch beans like @JobOperator how do I do this?



    Pre Spring Boot, I could so something like:



    <bean class="org.springframework.jmx.export.MBeanExporter">
    <property name="beans">
    <map>
    <entry key="spring:service=batch,bean=jobOperator">
    <bean class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target" ref="jobOperator"/>
    <property name="interceptorNames" value="exceptionTranslator" />
    </bean>
    </entry>
    </map>
    </property>
    <property name="assembler">
    <bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
    <property name="interfaceMappings">
    <map>
    <entry key="spring:service=batch,bean=jobOperator"
    value="org.springframework.batch.core.launch.JobOperator"/>
    </map>
    </property>
    </bean>
    </property>
    </bean>


    When I define my JobOperator, in my @Configuration file in Spring Boot I do:



    @Bean
    public JobOperator jobOperator() throws Exception {
    SimpleJobOperator simpleJobOperator = new SimpleJobOperator();
    // the operator wraps the launcher
    simpleJobOperator.setJobLauncher(this.jobLauncher);
    ...
    }


    I can't add @ManagedResource under the @Bean annotation. So how do I expose the JobOperator as a JMX bean?










    share|improve this question



























      0












      0








      0








      Here is my build.gradle...



      dependencies {
      compile('org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE')

      compile('org.springframework.boot:spring-boot-starter-batch')
      compile("org.springframework.boot:spring-boot-starter-jdbc")
      compile("org.springframework.boot:spring-boot-starter-web")
      compile("com.h2database:h2")

      testCompile('org.springframework.boot:spring-boot-starter-test')
      testCompile('org.springframework.batch:spring-batch-test')
      }


      Which I thought would enable JMX by default. I go to JConsole, connect to the application and expect to see a org.springframework.boot folder under java.util.logging, I see nothing.



      So, now I pick a few of my custom beans and add @ManagedResource, I know see these.



      However, what if I want to expose spring batch beans like @JobOperator how do I do this?



      Pre Spring Boot, I could so something like:



      <bean class="org.springframework.jmx.export.MBeanExporter">
      <property name="beans">
      <map>
      <entry key="spring:service=batch,bean=jobOperator">
      <bean class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="target" ref="jobOperator"/>
      <property name="interceptorNames" value="exceptionTranslator" />
      </bean>
      </entry>
      </map>
      </property>
      <property name="assembler">
      <bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
      <property name="interfaceMappings">
      <map>
      <entry key="spring:service=batch,bean=jobOperator"
      value="org.springframework.batch.core.launch.JobOperator"/>
      </map>
      </property>
      </bean>
      </property>
      </bean>


      When I define my JobOperator, in my @Configuration file in Spring Boot I do:



      @Bean
      public JobOperator jobOperator() throws Exception {
      SimpleJobOperator simpleJobOperator = new SimpleJobOperator();
      // the operator wraps the launcher
      simpleJobOperator.setJobLauncher(this.jobLauncher);
      ...
      }


      I can't add @ManagedResource under the @Bean annotation. So how do I expose the JobOperator as a JMX bean?










      share|improve this question
















      Here is my build.gradle...



      dependencies {
      compile('org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE')

      compile('org.springframework.boot:spring-boot-starter-batch')
      compile("org.springframework.boot:spring-boot-starter-jdbc")
      compile("org.springframework.boot:spring-boot-starter-web")
      compile("com.h2database:h2")

      testCompile('org.springframework.boot:spring-boot-starter-test')
      testCompile('org.springframework.batch:spring-batch-test')
      }


      Which I thought would enable JMX by default. I go to JConsole, connect to the application and expect to see a org.springframework.boot folder under java.util.logging, I see nothing.



      So, now I pick a few of my custom beans and add @ManagedResource, I know see these.



      However, what if I want to expose spring batch beans like @JobOperator how do I do this?



      Pre Spring Boot, I could so something like:



      <bean class="org.springframework.jmx.export.MBeanExporter">
      <property name="beans">
      <map>
      <entry key="spring:service=batch,bean=jobOperator">
      <bean class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="target" ref="jobOperator"/>
      <property name="interceptorNames" value="exceptionTranslator" />
      </bean>
      </entry>
      </map>
      </property>
      <property name="assembler">
      <bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
      <property name="interfaceMappings">
      <map>
      <entry key="spring:service=batch,bean=jobOperator"
      value="org.springframework.batch.core.launch.JobOperator"/>
      </map>
      </property>
      </bean>
      </property>
      </bean>


      When I define my JobOperator, in my @Configuration file in Spring Boot I do:



      @Bean
      public JobOperator jobOperator() throws Exception {
      SimpleJobOperator simpleJobOperator = new SimpleJobOperator();
      // the operator wraps the launcher
      simpleJobOperator.setJobLauncher(this.jobLauncher);
      ...
      }


      I can't add @ManagedResource under the @Bean annotation. So how do I expose the JobOperator as a JMX bean?







      spring-boot spring-batch spring-jmx






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jul 6 '18 at 9:09







      More Than Five

















      asked Jul 6 '18 at 8:56









      More Than FiveMore Than Five

      3,071105186




      3,071105186
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Here is how i did it in my code -



          @Bean
          public MBeanExporter exporter(){
          MBeanExporter m = new MBeanExporter();
          Map<String,Object> map = new HashMap<String, Object>();
          JmxBean testBean = (JmxBean)ctx.getBean("testBean");
          map.put("testBean",testBean);
          m.setBeans(map);
          return m;
          }

          @Bean
          public JmxBean testBean(){
          return new JmxBean("test",100);
          }


          In your case since you want to register jobOperator, just replace testBean in exporter bean with it.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51206572%2fenabling-jmx-in-spring-boot%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Here is how i did it in my code -



            @Bean
            public MBeanExporter exporter(){
            MBeanExporter m = new MBeanExporter();
            Map<String,Object> map = new HashMap<String, Object>();
            JmxBean testBean = (JmxBean)ctx.getBean("testBean");
            map.put("testBean",testBean);
            m.setBeans(map);
            return m;
            }

            @Bean
            public JmxBean testBean(){
            return new JmxBean("test",100);
            }


            In your case since you want to register jobOperator, just replace testBean in exporter bean with it.






            share|improve this answer




























              0














              Here is how i did it in my code -



              @Bean
              public MBeanExporter exporter(){
              MBeanExporter m = new MBeanExporter();
              Map<String,Object> map = new HashMap<String, Object>();
              JmxBean testBean = (JmxBean)ctx.getBean("testBean");
              map.put("testBean",testBean);
              m.setBeans(map);
              return m;
              }

              @Bean
              public JmxBean testBean(){
              return new JmxBean("test",100);
              }


              In your case since you want to register jobOperator, just replace testBean in exporter bean with it.






              share|improve this answer


























                0












                0








                0







                Here is how i did it in my code -



                @Bean
                public MBeanExporter exporter(){
                MBeanExporter m = new MBeanExporter();
                Map<String,Object> map = new HashMap<String, Object>();
                JmxBean testBean = (JmxBean)ctx.getBean("testBean");
                map.put("testBean",testBean);
                m.setBeans(map);
                return m;
                }

                @Bean
                public JmxBean testBean(){
                return new JmxBean("test",100);
                }


                In your case since you want to register jobOperator, just replace testBean in exporter bean with it.






                share|improve this answer













                Here is how i did it in my code -



                @Bean
                public MBeanExporter exporter(){
                MBeanExporter m = new MBeanExporter();
                Map<String,Object> map = new HashMap<String, Object>();
                JmxBean testBean = (JmxBean)ctx.getBean("testBean");
                map.put("testBean",testBean);
                m.setBeans(map);
                return m;
                }

                @Bean
                public JmxBean testBean(){
                return new JmxBean("test",100);
                }


                In your case since you want to register jobOperator, just replace testBean in exporter bean with it.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 20 '18 at 16:09









                monstermonster

                509414




                509414






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51206572%2fenabling-jmx-in-spring-boot%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    MongoDB - Not Authorized To Execute Command

                    How to fix TextFormField cause rebuild widget in Flutter

                    Npm cannot find a required file even through it is in the searched directory