2

Spring Web アプリケーション (完全なアノテーション ベースの構成、 xml 構成なし) をメトリック 3.0と組み合わせようとしています。

桟橋内でアプリケーションを実行しています。

これは、デフォルトの DispatcherServlet の現在の構成です。

public class WebInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        return new Filter[] { characterEncodingFilter };
    }

}

これは WebConfig です。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.rebuy.silo.amqpredelivery")
@EnableJpaRepositories(basePackages = "com.rebuy.silo.amqpredelivery.domain")
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
        jacksonConverter.setObjectMapper(objectMapper());
        converters.add(jacksonConverter);
        super.configureMessageConverters(converters);
    }

    @Bean
    public ObjectMapper objectMapper() {
        SimpleDateFormat format = new SimpleDateFormat(
                "yyyy-MM-dd'T'HH:mm:ssXXX");
        format.setTimeZone(TimeZone.getTimeZone("GMT+1"));
        ObjectMapper mapper = new ObjectMapper();
        mapper.setDateFormat(format);
        return mapper;
    }
}

次の 2 つのサーブレットを追加します。

これを行う最善の方法は何ですか?これを非常に簡単に行うには、春の魔法が必要だと思います! しかし、私はそれを見つけることができませんでした:(

よろしくお願いしますビョルン

4

3 に答える 3

4

このコードベースhttps://github.com/spiritedtechie/metrics-examplesに従うことができます。

または、metrics-spring http://ryantenney.github.io/metrics-spring/と呼ばれるこのライブラリを使用します。

于 2013-10-29T09:32:27.100 に答える
2

Spring と Metrics を使用している場合は、@RyanTenney の Metrics-Spring モジュールも使用する必要があります。これにより、Java 構成が簡素化され、メトリクスの使用がよりクリーンになります。

MetricsServlet と HealthCheckServlet の背後にあるコードを見てください。私の意見では、古いサーブレットを埋め込んでラップする方法を理解するよりも、独自の Spring Controller を作成して同じことを行う方が簡単です。

それは簡単です!

メトリック固有の構成を作成します。

@Configuration
@EnableMetrics
public class MetricsConfig extends MetricsConfigurerAdapter {
    @Override
    public void configureReporters(MetricRegistry metricRegistry) {
        registerReporter(ConsoleReporter
            .forRegistry(metricRegistry)
            .build()).start(5, TimeUnit.MINUTES);
    }
}

そして、以下を追加して、既存の構成からそれを含めます。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.rebuy.silo.amqpredelivery")
@EnableJpaRepositories(basePackages = "com.rebuy.silo.amqpredelivery.domain")
@EnableAspectJAutoProxy
@EnableTransactionManagement
@Import({MetricsConfig.class})
public class WebConfig extends WebMvcConfigurerAdapter {
...

上記の構成変更により、Spring コンポーネントに MetricRegistry を注入することが簡単になります。MetricsServlet が行うことは、リクエストに応じてレジストリを送信することだけです。これは、単純なコントローラーで実現するのは非常に簡単です。例えば:

@Controller
public class AdminMetricsController
{
    @Autowired
    MetricRegistry metricRegistry;

    @RequestMapping(value = "/admin/metrics/", produces = {APPLICATION_JSON_VALUE})
    public @ResponseBody MetricRegistry getMetrics(final HttpServletResponse response)
    {
        response.setHeader("Cache-Control", "must-revalidate,no-cache,no-store");
        return metricRegistry;
    }

}

同様の方法で HealthCheckRegistry を注入し、別のメソッドを追加して、/admin/health/ または任意の URL に応答させることができます。

于 2015-07-10T00:47:24.653 に答える
0

次の回答を見てください。JavaConfig を介してサーブレットを登録する方法について説明します。

Spring JavaConfig: カスタム サーブレットのマッピングを追加

于 2014-01-21T05:55:38.023 に答える