我们有一个Java Web服务,用于轮询AWS SQS队列以获取消息.它使用最长20秒的等待时间.在Tomcat中更新服务时,Tomcat会尝试关闭现有服务,然后启动更新后的版本.发生这种情况时,如果正在读取队列,则线程被卡住并且Tomcat无法阻止它,从而导致内存泄漏.从我的实验中,只有当Tomcat在队列中等待时尝试停止服务时,才会发生此内存泄漏.
如何在关机过程中停止Java中的SQS队列?
这里有一些更多的细节.
Jan 03, 2014 7:52:52 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application appears to have started a thread named [pollSQSQueue-1] but has failed to stop it. This is very likely to create a memory leak.
Jan 03, 2014 7:52:52 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application created a ThreadLocal with key of type [com.amazonaws.auth.AWS4Signer$2] (value [com.amazonaws.auth.AWS4Signer$2@71f69c90]) and a value of type [java.text.SimpleDateFormat] (value [java.text.SimpleDateFormat@ef87e460]) but failed to remove it when the web application was stopped. Threads …Run Code Online (Sandbox Code Playgroud) 我想用一些额外的类文件和jar文件更新Maven中的一个开源war文件.我还需要用自己的配置文件替换一个配置文件.
我看到这样做的最简单方法是从基本war文件复制Java源文件和配置文件,并将它们检入我的源存储库.这可以工作,但它要求我复制源文件和配置文件.因此,我想要做的是构建基本war文件,仅检入war文件,然后运行maven构建,添加我的类文件,额外的jar文件,并替换基本战争中的一个配置文件.Maven构建的输出将是一个war文件.
有没有人对Maven如何做到这一点有任何建议?
顺便说一句,基本文件来自jUDDI - 它是判决战.我认为问题的答案并不依赖于特定的war文件.
我发现有很多项目可以提供从 SQL 到 RDF 的转换。有什么可以从 RDF 转换为 SQL 的吗?它最好使用与 SQL 到 RDF 相同的映射。
我在Objective-C中遇到了一个相当常见的场景,我将一个变量传递给一个init方法,然后将它分配给一个同名的实例变量.但是我没有找到一种方法来扩展变量的范围,以澄清哪个是来自message参数的值,哪个是实例变量.
说我有一些类,如下所示:
@interface MyObject
{
NSString *value;
}
- (id)initWithValue:(NSString *)value;
@end
Run Code Online (Sandbox Code Playgroud)
在我的实现中,我希望我的init方法看起来像这样:
- (id)initWithValue:(NSString *)value
{
self = [super init];
if(self) {
self.value = value; // This will not work with instance variables
}
}
Run Code Online (Sandbox Code Playgroud)
我知道三种解决方案:
self.value_valueinitValue或argValue我对这些解决方案都不满意.添加属性要么使该属性在接口上公开可用,要么如果我使用扩展,则将其隐藏在继承者中.我也不喜欢为变量设置不同的名称或使用下划线,这可能来自其他语言(如Java和C#)的开发.
有没有办法消除消息参数中的实例变量的歧义?如果没有,Cocoa中是否有编码指南来解决这个问题?我喜欢在适当的时候遵循风格指南.
更新
在考虑如何在C中执行此操作后,我想出了解决方案self->value.这有效,但它会产生一个编译器警告,即'value'的Local声明隐藏了实例变量.所以这不是一个令人满意的解决方案,因为我有一个零警告目标.
我有Maven多模块项目,我想使用脚本将开发版本更新为给定值.聚合器POM只是一个聚合器,孩子们不会从中继承.这很重要,因为工件都继承自其他POM文件.这是我的结构
aggregator/
--projectA
--projectB
Run Code Online (Sandbox Code Playgroud)
此外,projectB还有Maven依赖projectA.
首先我试过:
mvn -DnewVersion=0.28-SNAPSHOT -DupdateMatchingVersions=true versions:set
Run Code Online (Sandbox Code Playgroud)
它只更新了aggregator项目的版本.
如果我运行Maven发布过程,它会正确更新 在发布版本之后使用新开发版本projectB的依赖性projectA.因为发布过程处理得很好,我认为使用发布插件可能会解决我的问题.
所以我尝试了以下方法:
mvn -DdevelopmentVersion=0.28-SNAPSHOT -DautoVersionSubmodules=true --batch-mode release:update-versions
Run Code Online (Sandbox Code Playgroud)
这正确地更新了我的所有子项目.但它没有更新projectB的依赖版本projectA.
什么是更新项目中所有开发版本的简单方法,包括projectB依赖于projectA?
我有一个使用以下 RequestMapping 运行的现有 Spring MVC 服务。
@RequestMapping(value = "{user}/**", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
我现在需要使用以下 RequestMapping 向同一个控制器添加一个新方法。
@RequestMapping(value = "api/{user}/**", method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)
当我针对新 URL 进行测试时,Spring 总是选择第一个函数,因此无法访问第二个函数。
无论如何,我可以让 Spring 使用我的新“api”方法吗?我能想到的唯一选择是在我的 web.xml 中创建一个新的 Java servlet,但我想做一些更简单的事情。我确实尝试使用@Controller和制作两个不同的控制器@Controller("api"),但这并没有解决问题。
我们有一个端点,可以根据Accept标头返回不同的响应.特别是,它可以返回zip文件,视频文件或音频文件.
映射1:
@RequestMapping(value = "endpoint",
method = RequestMethod.GET,
produces = {"video/*", "audio/*"})
Run Code Online (Sandbox Code Playgroud)
Mappping 2:
@RequestMapping(value = "endpoint",
method = RequestMethod.GET, produces = {"application/zip", "*/*"})
Run Code Online (Sandbox Code Playgroud)
此设置将采用Accept: video/*并转到映射1(这是我们想要的).但是,Accept: video/mp4导致java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path异常.
我本来期望video/mp4更接近地匹配映射1并加载它.确实,这正是我们想要的.
我们可以删除*/*,然后Accept: video/mp4继续映射1.但是,我们确实需要*/*转到映射2.
为什么不Accept: video/mp4匹配映射1,因为这是一个更接近的匹配?
如果没有其他接受标头更接近匹配,我们可以将此端点配置为具有默认方法吗?然后我们可以让映射1仅声明它产生application/zip.
我们正在使用Spring Boot 1.5.3.
我们有一个使用 Spring Security、OAuth2 登录和 Zuul 路由的基于 Spring Boot 的网关。它还使用 Spring Session 在 Redis 中存储会话。此网关在会话中存储 OAuth2 令牌并将 OAuth2 承载令牌转发到后端服务。
我们有一个问题,即用户经常被注销。这似乎大约每小时发生一次。我们甚至不太确定是什么导致了所有不同的工具到位。
我们在浏览器中的会话 cookie 会在更长的时间内过期。所以我怀疑是 Spring 使会话无效,或者 OAuth2 令牌过期。
从代码的快速检查来看,似乎OAuth2TokenRelayFilter支持刷新令牌。这样对吗?
如何找出造成这种情况的原因并解决它?
作为参考,我们正在使用这些版本:
以下是一些相关的片段。
我们的网页安全配置。
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
@Order(SecurityProperties.BASIC_AUTH_ORDER - 2)
@Profile("!security-disabled")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers("/login", "/login/**", "/favicon.ico").permitAll()
.antMatchers("/signout").authenticated()
.anyRequest().hasAnyRole("ADMIN", "MEMBER")
.and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.httpBasic()
.disable()
.formLogin()
.disable()
.logout()
.logoutUrl("/signout")
.deleteCookies("SESSION") …Run Code Online (Sandbox Code Playgroud) 我们有一个 Web 服务,我们可以在其中上传文件,并希望编写一个集成测试来上传一个有点大的文件。测试过程需要生成文件(我不想在源代码管理中添加一些更大的文件)。
我希望生成一个大约 50 MB 的流来上传。数据本身并不重要。我用内存中的对象尝试了这个,这很容易,但我的内存不足。
集成测试是用 Groovy 编写的,因此我们可以使用 Groovy 或 Java API 来生成数据。我们如何生成用于上传的随机流,而无需一直将其保存在内存中?
我有一个CouchDB更新处理程序,并希望它返回类似于常规文档PUT或POST的响应.在成功更新时,以下内容如下所示.
{"ok": true, "id": "some_doc_id", "rev": "1-cc44942419c99df052314874d120e316"}
Run Code Online (Sandbox Code Playgroud)
问题是在更新处理程序Javascript代码中我只能访问当前版本.我需要响应以在更新发生后返回版本.在这种情况下,它将是修订版2.
我可以以某种方式访问我的更新处理程序中的新修订版本吗?
有没有办法验证提供给 Maven 原型的属性?如果是这样怎么办?
我的 archetype-metadata.xml 文件中有一个自定义的 requiredProperty 。这些值必须匹配某个正则表达式,我想在 archetype:generate 期间验证这一点。
我有一个Spring MVC服务,可以让我上传文件。它使用@PreAuthorizeSpring Security来处理对资源的访问控制。控制器通过使用Callable来使用Servlet 3异步servlet。
@PreAuthorize("...")
@RequestMapping(value = "upload", method = RequestMethod.PUT)
public Callable<ResponseEntity> upload(final InputStream inputStream)
{
return new Callable<ResponseEntity>()
{
@Override
public ResponseEntity call() throws Exception
{
...
}
};
}
Run Code Online (Sandbox Code Playgroud)
服务中的某个位置-我的代码之外-引发了异常。
An Authentication object was not found in the SecurityContext
Run Code Online (Sandbox Code Playgroud)
该异常似乎是由cglib为我的Spring控制器生成的代码引发的。这是大部分堆栈跟踪。
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:339) ~[spring-security-core-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:198) ~[spring-security-core-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:60) ~[spring-security-core-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) ~[spring-aop-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at com.testing.upload.controller.RESTService$$EnhancerByCGLIB$$66a0c4c9.upload(<generated>) ~[spring-core-3.2.4.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_65]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_65] …Run Code Online (Sandbox Code Playgroud) 我有一些我创建的bean,它们都使用类似的模式进行bean实例化.顶级对象都非常相似,但它们包含的对象因字符串构造函数参数而异.除了两个实例THIS CHANGES A和一个实例之外,每个顶级bean中的所有内容都是相同的THIS CHANGES B.下面是我的一个豆子.除了THIS CHANGES值之外,其他的完全相同.
<bean id="mover1" class="CustomDataMover">
<constructor-arg ref="session"/>
<constructor-arg>
<bean class="DataCache">
<constructor-arg>
<bean class="AllValuesReader">
<constructor-arg ref="databaseConnector"/>
<constructor-arg value="THIS CHANGES A"/>
<constructor-arg value="v1"/>
<constructor-arg value="v2"/>
</bean>
</constructor-arg>
</bean>
</constructor-arg>
<constructor-arg ref="customUpdate"/>
<constructor-arg value="THIS CHANGES B"/>
<constructor-arg>
<bean class="ValueGenerator">
<constructor-arg>
<bean class="LatestValueRetriever">
<constructor-arg ref="databaseConnector"/>
<constructor-arg value="v3"/>
<constructor-arg value="v4"/>
<constructor-arg value="THIS CHANGES A"/>
</bean>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
Run Code Online (Sandbox Code Playgroud)
如何减少我的bean中的重复量?我正在寻找一些方法来制作某种模板.此外,请注意我确实有其他bean的参考.
java ×7
spring ×6
maven ×3
spring-mvc ×3
maven-2 ×2
spring-boot ×2
amazon-sqs ×1
cocoa ×1
couchapp ×1
couchdb ×1
groovy ×1
ios ×1
iphone ×1
maven-3 ×1
objective-c ×1
rdbms ×1
rdf ×1
servlet-3.0 ×1
sql ×1