使用Spring 4 PropertySource时找不到可重复的内容

时间:2014-02-06 08:53:29

标签: java spring

我们将Spring 4.0.1.RELEASE与jdk6结合使用(这是固定的)。 当然,我们使用@PropertySource注释在Java中完成了配置。当我们使用gradle编译项目时,这会导致恼人的警告消息:

  

有机\ springframework的\上下文\注释\ PropertySource.class(ORG \ springframework的\上下文\注解:PropertySource.class):   警告:无法在类型中找到annotat ion方法'value()'   'java.lang.annotation.Repeatable':用于的类文件   找不到java.lang.annotation.Repeatable

这是由于使用not(在jdk6中)现有的Repeatable类引起的,我很高兴它只是一个警告。 我喜欢gradle的干净输出,这很烦人,因为它可能会混淆其他“真正的”警告(比如checkstyle ......)。

也许有人遇到同样的问题,并且针对这种情况得到了一个(不那么多的黑客)解决方案。我只想再次看到干净的输出。

4 个答案:

答案 0 :(得分:28)

我认为问题在于 Spring 4 ,他们使用@Repeatable注释,这只是在 Java中引入的8

因此,如果您不使用Java 8,您将继续看到此问题,至少在此问题得到修复之前。

BTW ,这也阻止了在旧版JDK中使用@Scheduled注释而不是Java 8.我希望它很快就会修复。

答案 1 :(得分:9)

仅供记录:使用

@PropertySources(@PropertySource("classpath:path/to/config"))

摆脱异常。

致谢:http://www.javacodegeeks.com/2013/11/how-to-using-propertysource-annotation-in-spring-4-with-java-7.html

答案 2 :(得分:1)

我想如果您只是想摆脱警告,您可以使用自定义记录器实现此目的:http://www.gradle.org/docs/current/userguide/logging.html

我会检查当前的实现,并将其包含在过滤掉您要忽略的警告的内容中,并将其他所有内容保持不变。

答案 3 :(得分:0)

解决Java 8下面的警告的解决方法是使用以下方法而不是@Scheduled注释:

@PostConstruct
public void setupTaskScheduler() throws FileNotFoundException {
    taskScheduler = new ConcurrentTaskScheduler();

    taskScheduler.schedule(new Runnable(...), new CronTrigger("0 0 * * * *"));    
}