[SPRING] @ManagedResource objectName을 동적으로 변경하십시오
SPRING@ManagedResource objectName을 동적으로 변경하십시오
프로토 타입 bean을 프로그래밍 방식으로 / 동적으로 작성하고 있습니다. 초기화 후에 해당 콩을 jmx 콘솔에 넣기를 원합니다. 어떻게 구분할 수 있습니까? jmx에 콩을 추가하기 위해 anotations를 사용하고 있습니다.
@ManagedResource(objectName="bean:name=MybBean")
objectName을 동적으로 주입해야합니다. 어떤 생각이라도 어떻게 할 수 있니?
내 jmx 구성은 다음과 같습니다.
<context:mbean-export server="mbeanServer" />
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" />
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"
lazy-init="false">
<property name="beans">
<map>
<entry key="Server:name=HttpAdaptor">
<bean class="mx4j.tools.adaptor.http.HttpAdaptor">
<property name="port" value="8000" />
<property name="host" value="0.0.0.0" />
<property name="processor">
<bean class="mx4j.tools.adaptor.http.XSLTProcessor" />
</property>
</bean>
</entry>
</map>
</property>
<property name="listeners">
<list>
<!--
-->
<bean class="com.fixgw.jmx.HttpAdaptorMgr">
<property name="mbeanServer" ref="mbeanServer" />
</bean>
</list>
</property>
</bean>
<bean id="sessionMDB" class="com.fixgw.mdb.SessionMDB"
scope="prototype" lazy-init="true">
<constructor-arg ref="0" />
<constructor-arg ref="0" />
</bean>
해결법
-
==============================
1.이를 위해 JMX 명명 전략을 사용할 수 있습니다. 직장에서 우리는 인터페이스를 사용합니다 :
이를 위해 JMX 명명 전략을 사용할 수 있습니다. 직장에서 우리는 인터페이스를 사용합니다 :
public interface RuntimeJmxNames { /** this is the name= part of the object name */ public String getJmxName(); /** this sets the folders as 00=FirstFolder,01=Second */ public String[] getJmxPath(); }
RuntimeMetadataNamingStrategy 명명 전략을 구현하기위한 코드를 게시했습니다.
그리고 나서 다음과 같은 스프링 빈과 같은 것 :
<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" /> <bean id="jmxAssembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> <property name="attributeSource" ref="jmxAttributeSource" /> </bean> <bean id="jmxNamingStrategy" class="com.j256.jmx.RuntimeMetadataNamingStrategy"> <property name="attributeSource" ref="jmxAttributeSource" /> </bean> <bean id="mbeanExporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="autodetect" value="true" /> <property name="assembler" ref="jmxAssembler" /> <property name="namingStrategy" ref="jmxNamingStrategy" /> <property name="ensureUniqueRuntimeObjectNames" value="false" /> <property name="excludedBeans" ref="excludedJmxBeans" /> </bean>
코드에서 다음과 같은 작업을 수행합니다.
@ManagedResource(objectName = "foo.com:name=replaced", description = "...") public class Foo implements RuntimeJmxNames { ... public String getJmxName() { // here's where you can make the name be dynamic return toString(); } @Override public String[] getJmxPath() { return new String[] { "folder" }; } }
JMX 네이밍에 대한 Spring의 문서는 여기에 있습니다 만, 커스텀 네이밍을 다루는 것이 100 % 확실하지는 않습니다.
또한, 내 SimpleJMX 패키지는 이것을 수행합니다. 그것은 JmxSelfNaming 인터페이스를 사용하여 객체의 각 인스턴스가 고유 한 bean-name을 정의하여 고유하게 만들고 Spring과 잘 작동하도록합니다.
-
==============================
2.org.springframework.jmx.export.naming.SelfNaming을 구현하면됩니다.
org.springframework.jmx.export.naming.SelfNaming을 구현하면됩니다.
@Component("MyPrototypeScopedBeanName") @ManagedResource public class MyPrototypeScopedBeanName implements SelfNaming { @Override public ObjectName getObjectName() throws MalformedObjectNameException { return new ObjectName("com.foobar", "name", this.toString()); } }
from https://stackoverflow.com/questions/11506486/change-managedresource-objectname-dynamically by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Scope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까? (0) | 2019.03.29 |
---|---|
[SPRING] @IfProfileValue를 사용하여 프로필이 활성 상태인지 테스트하려면 어떻게해야합니까? (0) | 2019.03.29 |
[SPRING] 스프링 보안에서 계층 적 역할 구현하기 (0) | 2019.03.29 |
[SPRING] Spring Boot @WebIntegrationTest 및 TestRestTemplate - 테스트 트랜잭션을 롤백 할 수 있습니까? (0) | 2019.03.29 |
[SPRING] Spring에서 주어진 타입의 모든 의존성을 autowire하는 방법이 있습니까? (0) | 2019.03.29 |