Java 结合Spring MVC 3.2和Coda Hales度量
我正在尝试将SpringWeb应用程序(完整的基于注释的配置,noxml配置)与metrics 3.0相结合 我正在码头内运行应用程序 这是默认DispatcherServlet的当前配置:Java 结合Spring MVC 3.2和Coda Hales度量,java,spring,servlets,spring-mvc,metrics,Java,Spring,Servlets,Spring Mvc,Metrics,我正在尝试将SpringWeb应用程序(完整的基于注释的配置,noxml配置)与metrics 3.0相结合 我正在码头内运行应用程序 这是默认DispatcherServlet的当前配置: public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootCon
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 };
}
}
公共类WebInitializer扩展
AbstractAnnotationConfigDispatchersServletInitializer{
@凌驾
受保护类[]getRootConfigClasses(){
返回null;
}
@凌驾
受保护类[]getServletConfigClasses(){
返回新类[]{WebConfig.Class};
}
@凌驾
受保护的字符串[]getServletMappings(){
返回新字符串[]{”/“};
}
@凌驾
受保护的筛选器[]getServletFilters(){
CharacterEncodingFilter CharacterEncodingFilter=新的CharacterEncodingFilter();
characterEncodingFilter.setEncoding(“UTF-8”);
返回新筛选器[]{characterEncodingFilter};
}
}
这是网络配置:
@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;
}
}
@配置
@EnableWebMvc
@组件扫描(basePackages=“com.rebuy.silo.amqpredelivery”)
@EnableJpaRepositories(basePackages=“com.rebuy.silo.amqpredelivery.domain”)
@促性腺激素
@启用事务管理
公共类WebConfig扩展了WebMVCConfigureAdapter{
@豆子
公共静态属性资源占位符配置器属性资源占位符配置器(){
返回新属性资源占位符配置器();
}
@凌驾
公共无效配置MessageConverters(
List您可以遵循此代码库
或者使用这个名为metrics spring的库看看下面的答案。它解释了如何通过JavaConfig注册Servlet:
如果您使用的是Spring和Metrics,那么您也应该使用@Ryanteney的Metrics Spring模块。它将简化Java配置,并使您的指标使用更加干净
看一看MetricsServlet和HealthCheckServlet背后的代码,我认为编写自己的Spring控制器来做同样的事情比找出如何嵌入和包装那些旧的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。metrics spring仍处于RC阶段。我提到我没有使用web.xml或基于xml的配置。因此您的示例对我没有帮助。True。我认为这可能会有所帮助:(该项目已退出RC,现在包含注释配置。