我正在尝试基于Spring教程构建RESTful Web服务来监视REST应用程序,但在Java Melody文档页面中,配置依赖于web.xml文件,但spring项目没有这样的文件.我尝试使用java旋律注释并在WebInitializer中设置contextConfigLocation,但是当我进入Java Melody页面时,我看不到Spring部分.
我有这样的WebInitializar:
public class WebInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class).properties();
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("contextConfigLocation", "classpath:net/bull/javamelody/monitoring-spring.xml");
super.onStartup(servletContext);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经将contextConfigLocation设置为Java Melody文档所说的.
而我的控制器:
@RestController
@MonitoredWithSpring
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议让它起作用吗?
有没有办法可以限制使用Shiro角色访问Grails中的Java-Melody插件生成的/监控URL?
更新:更多细节.这是没有问题的,所以大多数Grails的资源都是shiro.但是在java旋律插件的情况下,似乎在执行shiro过滤器之前执行旋律过滤器.这使得shiro无用.
有一些解决方案可以通过改变web.xml来解决这个问题,但这不是一个快速的问题,我(rdmueller)还没有设法让它工作.web.xml插件似乎也提供了一些帮助,但我不想添加另一个插件来保护一个插件.
网上发现的一些较旧的陈述表明,通过使用loadAfter
此文件中的列表已经解决了这个问题:https://github.com/javamelody/grails-melody-plugin/blob/master/GrailsMelodyGrailsPlugin.groovy - 但是似乎这只适用于旧版本的Grails.
Update2:为了更容易提出解决方案,我创建了一个Grails 2.2.4示例:https://github.com/rdmueller/SO30739581
只需克隆项目,执行操作grailsw run-app
并导航到
http://localhost:8080/SO30739581/dbdoc
Run Code Online (Sandbox Code Playgroud)
你将通过shiro获得一个登录屏幕.导航
http://localhost:8080/SO30739581/monitoring
Run Code Online (Sandbox Code Playgroud)
你会在没有登录的情况下获得旋律屏幕:-(
我正在使用 Spring 配置文件来配置 C3P0。为了监视我net.bull.javamelody.SpringDataSourceFactoryBean
在 javamelody 的用户指南中提到的配置的数据源。但是我的报告显示 0 个活动的 jdbc 连接,而我的 minPoolSize 是 10。我错过了什么?
在web.xml
添加monitoring-spring.xml
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
classpath:net/bull/javamelody/monitoring-spring.xml,
</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
在 Spring jdbc 配置文件是:
<bean id="sql2oDatasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="#{dbProps['ops.jdbc.driverClassName']}"/>
<property name="jdbcUrl" value="#{dbProps['ops.jdbc.url']}"/>
<property name="user" value="#{dbProps['ops.jdbc.username']}"/>
<property name="password" value="#{dbProps['ops.jdbc.password']}"/>
<property name="maxPoolSize" value="#{dbProps['ops.c3p0.max_size']}"/>
<property name="minPoolSize" value="#{dbProps['ops.c3p0.min_size']}"/>
<property name="maxStatements" value="#{dbProps['ops.c3p0.max_statements']}"/>
<property name="checkoutTimeout" value="#{dbProps['ops.c3p0.timeout']}"/>
<property name="preferredTestQuery" value="SELECT 1"/>
</bean>
<!-- Configuring the session factory for SQL-2-O -->
<bean id="sql2oSession" class="org.sql2o.Sql2o">
<constructor-arg ref="wrappedDBDataSource"/>
<constructor-arg value="PostgreSQL" type="org.sql2o.QuirksMode"/> …
Run Code Online (Sandbox Code Playgroud) 我找到了以下手册https://code.google.com/p/javamelody/wiki/UserGuideAdvanced#JPA_monitoring
它包含一些有关我应该进行的更改的信息persistence.xml
,以便让JavaMelody收集JPA/SQL统计信息.
但是,我不太清楚,是否应该provider
用JavaMelody
-provider 替换现有的,还是应该将它放到一个单独的持久性单元中?
我尝试了前一个选项,但它打破了应用程序(构建失败,出现错误,例如'无法将某些代理强制转换为EntityManagerFactory').
我有 Spring Boot Web 应用程序。它在端口 8080 上公开 REST API。它还通过 Spring Boot 管理端点公开管理端口 8081 ( http://docs.spring.io/spring-boot/docs/current/reference/html/product-ready-monitoring.html ) 。我没有任何自定义 Tomcat 配置来实现这一点。management.port=8081
我的档案里只有财产application.properties
。
我按照https://github.com/javamelody/javamelody/wiki/UserGuideAdvanced#spring-boot-app中的描述配置了 JavaMelody
(我有我的自定义JavaMelodyConfiguration
类,带有org.springframework.boot.web.servlet.FilterRegistrationBean
寄存器net.bull.javamelody.MonitoringFilter
)。
@Bean
public FilterRegistrationBean javaMelody() {
final FilterRegistrationBean javaMelody = new FilterRegistrationBean();
javaMelody.setFilter(new MonitoringFilter());
javaMelody.setAsyncSupported(true);
javaMelody.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ASYNC);
javaMelody.addUrlPatterns("/*");
return javaMelody;
}
Run Code Online (Sandbox Code Playgroud)
通过此配置,Javamelody 暴露在端口 8080(业务端口)上。我想将其移至8081(管理端口)。如何改变这一点?
我使用 Spring Boot 1.4.2.RELEASE,javamelody 1.62.0
我有一个grails/groovy web-app与数据库连接池.设置如下:
dataSource:
url: "jdbc:postgresql://192.168.100.53:5432/bhub_dev"
properties:
jmxEnabled: true
initialSize: 5
maxActive: 25
minIdle: 5
maxIdle: 15
maxWait: 10000
maxAge: 600000
timeBetweenEvictionRunsMillis: 5000
minEvictableIdleTimeMillis: 60000
validationQuery: SELECT 1
validationQueryTimeout: 3
validationInterval: 15000
testOnBorrow: true
testWhileIdle: true
testOnReturn: false
jdbcInterceptors: ConnectionState
defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
Run Code Online (Sandbox Code Playgroud)
我正在使用java-melody进行诊断和监控,并注意到一些奇怪的行为.例如,在执行查询DB的作业时,连接可以克服maxActive属性.为什么这甚至可能?
我是否需要明确关闭Grails连接?该作业调用一个服务方法,通过withCriteria Grails调用简单地执行数据库查询,如:
def activities = WorkActivity.withCriteria{
eq("workCategoryActive", true)
order("id", "desc");
}
Run Code Online (Sandbox Code Playgroud)
并且似乎每次运行时,都会打开2个新连接,并且它们不会每次都正常关闭.
此外,在每个页面刷新时,都有一些调用后端来执行查询,有时即使刷新2个新连接似乎也会打开.
我是Grails dev的新手,所以我不知道我是否必须/甚至可以通过Criteria数据库连接来关闭它.
任何一点帮助表示赞赏.数据库是PGSQL.
编辑:好的,所以现在我正在看java-melody中的线程诊断,看起来Tomcat池清理器处于等待状态,这就是为什么连接数没有下降?此外,似乎每次运行该作业时,2个线程都会启动,而其中一个线程会等待等待?这到底是怎么回事.
我在我的应用程序中使用Javamelody.我只需要root用户访问统计信息.Javamelody默认情况下可以访问
http://localhost/webapp/monitoring
Run Code Online (Sandbox Code Playgroud)
我需要改成它
http://localhost/webapp/monitor/monitoring
Run Code Online (Sandbox Code Playgroud)
我已经完成了以下过滤器映射
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>monitoring</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud) 我有一个带有 javamelody 的 Spring Maven 项目。
我使用 hibernate 和 spring,没有任何 JNDI 数据源。
xml conf中的数据源:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://${database.location}:${database.port}/${database.dbname}?zeroDateTimeBehavior=convertToNull&characterEncoding=utf8"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="persistenceUnitName" value="rtt-backend" />
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="jpaDialect" ref="jpaDialect" />
</bean>
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="database" value="MYSQL" />
<property name="showSql" value="false" />
</bean>
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" …
Run Code Online (Sandbox Code Playgroud) java-melody ×8
java ×4
spring ×3
grails ×2
spring-boot ×2
c3p0 ×1
database ×1
groovy ×1
hibernate ×1
jdbc ×1
jpa ×1
maven ×1
shiro ×1
spring-mvc ×1