我正在尝试将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;
}
}
我想添加这两个Servlet:
最好的方法是什么?我认为应该有一些春天的魔力使这个极其容易做到!但我无法找到它:(
提前致谢 的Björn
答案 0 :(得分:4)
您可以关注此代码库https://github.com/spiritedtechie/metrics-examples。
或者使用名为metrics-spring http://ryantenney.github.io/metrics-spring/
的库答案 1 :(得分:2)
如果您使用的是Spring和Metrics,您还应该使用@ RyanTenney的Metrics-Spring模块。它将简化您的Java配置并使您的Metrics使用更加清晰。
查看MetricsServlet和HealthCheckServlet背后的代码。在我看来,更容易编写自己的Spring Controller来做同样的事情,而不是弄清楚如何嵌入和包装那些旧的servlet。
很容易!
创建特定于指标的配置:
@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的方法。
答案 2 :(得分:0)
看看以下答案。它解释了如何通过JavaConfig注册Servlet: