我有一个带有spring-security-core插件和Atmosphere框架的Grails应用程序.
如果我从已打开WebSocket连接的页面注销,则Spring Security会将WebSocket连接的URL保留为SavedRequest.
DEBUG savedrequest.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/update]
DEBUG savedrequest.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/formx/formX/notifications/?X-Atmosphere-Transport=close&X-Atmosphere-tracking-id=b5d8fde4-d950-41fd-9b49-02e06799a36f&conversationId=988080042]
Run Code Online (Sandbox Code Playgroud)
日志中的第一个条目具有SavedRequest的正确值,但不知何故它被Atmosphere WebSocket连接覆盖.
如何告诉Spring Security不要将Atmosphere WebSocket连接用作SavedRequest?
我想我可以使用一些Atmosphere Protocol Specific Header来区分连接.
在java/groovy应用程序中,我正在使用org.slf4j.Logger
我喜欢记录方法执行时间并建议使用以下代码
def startTime
LOGGER.isDebugEnabled() {
startTime = System.currentTimeMillis()
}
doSomething()
LOGGER.debug("Execution took {}ms", (System.currentTimeMillis() - startTime))
Run Code Online (Sandbox Code Playgroud)
我认为这段代码很"难看".谁能提出更优雅的建议?
我在IntelliJ IDEA 130.754上的grails 2.2.1上运行了项目.
将grails版本升级到2.3.0.M1后,grails无法启动
从IDEA控制台登录
/home/aram/local/java/bin/java -Dgrails.home=/home/aram/local/grails-2.3.0.M1 -Dbase.dir=/home/aram/projects/grails/app/formx -Dtools.jar=/home/aram/local/java/lib/tools.jar -Dgroovy.starter.conf=/home/aram/local/grails-2.3.0.M1/conf/groovy-starter.conf -Xmx768M -Xms768M -XX:MaxPermSize=256m -XX:PermSize=256m -Dfile.encoding=UTF-8 -classpath /home/aram/local/grails-2.3.0.M1/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.3.jar:/home/aram/local/grails-2.3.0.M1/dist/grails-bootstrap-2.3.0.M1-sources.jar org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf /home/aram/local/grails-2.3.0.M1/conf/groovy-starter.conf upgradeError: Could not find or load main class org.codehaus.groovy.grails.cli.support.GrailsStarter
Run Code Online (Sandbox Code Playgroud)
我想问题是
/home/aram/local/grails-2.3.0.M1/dist/grails-bootstrap-2.3.0.M1-sources.jar
Run Code Online (Sandbox Code Playgroud)
也许它需要
/home/aram/local/grails-2.3.0.M1/dist/grails-bootstrap-2.3.0.M1.jar
Run Code Online (Sandbox Code Playgroud)
代替.
任何帮助如何解决问题?
我们在tomcat 7.0.30中有grails应用程序破坏.Grails版本为2.2.4,去年运行非常稳定.我试图将grails版本切换到2.3.4,在测试环境中它表现正常(没有任何问题).但是当我在20分钟后投入生产时,我开始得到以下例外情况
[ajp-bio-9009-exec-430] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:100; busy:100; idle:0; lastwait:30000].. Stacktrace follows:
org.apache.tomcat.jdbc.pool.PoolExhaustedException: [ajp-bio-9009-exec-430] Timeout: Pool empty. Unable to fetch a connection in 30 seconds, none available[size:100; busy:100; idle:0; lastwait:30000].
at grails.gorm.DetachedCriteria$_count_closure4.doCall(DetachedCriteria.groovy:686)
at grails.gorm.DetachedCriteria$_withPopulatedQuery_closure10.doCall(DetachedCriteria.groovy:931)
at org.grails.datastore.gorm.GormStaticApi$_withDatastoreSession_closure20.doCall(GormStaticApi.groovy:680)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
at org.grails.datastore.gorm.GormStaticApi.withDatastoreSession(GormStaticApi.groovy:679)
at grails.gorm.DetachedCriteria.withPopulatedQuery(DetachedCriteria.groovy:913)
at grails.gorm.DetachedCriteria.count(DetachedCriteria.groovy:684)
at grails.gorm.DetachedCriteria.count(DetachedCriteria.groovy:683)
at com.webbfontaine.wftaglib.BeanDataLoadController.doLoadData(BeanDataLoadController.groovy:30)
at com.webbfontaine.wftaglib.BeanDataLoadController$_closure1.doCall(BeanDataLoadController.groovy:14)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at org.josso.tc70.agent.SSOAgentValve.invoke(SSOAgentValve.java:684)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Run Code Online (Sandbox Code Playgroud)
在我们的应用程序中,所有对DB的查询都是通过Grails GORM完成的,我们不使用任何SQL或HQL查询.
我的猜测是grails 2.3.4本身出现了问题(某些连接未正确关闭/返回池中).
我错过了什么或它的grails问题?有任何想法吗 ?
我们在生产环境中安装了Oracle 11G R2.
我喜欢提高1个查询的性能
select ....
from FORMX
where (INF_TYP =?)
AND (STATUS IN (?, ?, ?, ?, ?, ?))
AND ((VAL_DAT>=? OR VAL_DAT IS NULL));
Run Code Online (Sandbox Code Playgroud)
VAL_DAT列的类型是DATE.添加索引VAL_DAT不会产生明显效果.
任何想法如何调整或如何更改查询?
编辑
我们在该表中总共有大约150K的记录(1年生产)条件VAL_DAT is null适用于大约8%的记录.
"INF_TYP"和"STATUS"的类型是VARCHAR2(2 CHAR)和VARCHAR2(10 CHAR).
grails ×3
atmosphere ×1
grails-orm ×1
groovy ×1
java ×1
logging ×1
oracle ×1
oracle11gr2 ×1
sql ×1
tomcat ×1
websocket ×1