有没有办法指定如果方法返回null值,那么不要将结果缓存在这样的方法的@Cacheable注释中?
@Cacheable(value="defaultCache", key="#pk")
public Person findPerson(int pk) {
return getSession.getPerson(pk);
}
Run Code Online (Sandbox Code Playgroud)
更新:以下是去年11月提交的关于缓存空值的JIRA问题,尚未解决: [#SPR-8871] @Cachable条件应该允许引用返回值 - Spring Projects问题跟踪器
我从导入另一台服务器上A.在服务器A上的共享驱动器的根目录下多模块Maven项目,mvn install将成功运行,和Maven设置正确使用repository/和settings.xml在/home/user/.m2.
但是,在我的工作站PC上将项目导入Eclipse(实际上是STS)后,我无法运行mvn build(我安装了m2e插件),主要是因为缺少其他模块的依赖项.我意识到,Eclipse的使用settings.xml和repository/我的工作站电脑上,所以不会有安装在.m2目录缓存中的任何模块装配.
我正在尝试修改Maven以使用服务器A上的.m2目录.我只能将settings.xml设置为服务器A上的那个,但我无法更改本地存储库.我唯一的选择是"重新索引".
有没有办法将本地存储库更改为服务器A上的存储库,或者是否有更好的方法在一台服务器上安装代码,在另一台PC上编辑/构建/测试Tomcat?

我正在尝试@Cacheable从同一个类中调用一个方法:
@Cacheable(value = "defaultCache", key = "#id")
public Person findPerson(int id) {
return getSession().getPerson(id);
}
public List<Person> findPersons(int[] ids) {
List<Person> list = new ArrayList<Person>();
for (int id : ids) {
list.add(findPerson(id));
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
并希望结果findPersons也被缓存,但@Cacheable注释被忽略,并且findPerson每次都执行方法.
我在这里做错了什么,或者这是有意的吗?
我有一个java应用程序从数据库表读取要处理的作业,我可能有多个这个应用程序的实例在不同的服务器上运行,因为每个作业是独立的.一旦找到作业进行处理,其状态将更新为"正在运行".我想要确保从每个实例检索要处理的作业是原子的,我如何使用JDBC实现这一点?
似乎罗马下载不再存在(http://java.net/projects/rome/downloads).那我在哪里下载jar呢?它被停产了吗?谢谢,
大卫
当我尝试使用枚举来存储:"=",">","<"等,我有:
public static enum DataValueModifier {
EQUAL("="),
GREATER_THAN(">"),
GREATER_EUQAL(">="),
LESS_THAN("<"),
LESS_EQUAL("<="),
APPRROXIMATE("~"),
NOT_DETERMINED("ND");
private String value;
private DataValueModifier(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试比较字符串以查看它是否包含"="符号时,如何使用它,我应该这样做:
if (dataValue.contains(DataValueModifier.EQUAL.getValue())) {
...
}
Run Code Online (Sandbox Code Playgroud)
我明白使用枚举是更好的做法,但这看起来很傻......谢谢,
大卫
我们使用 Spring 缓存框架进行缓存,并且我们希望能够支持多个缓存命名空间,例如“book”或“isbn”,缓存命名空间是可配置的,而不是在类中进行硬编码,例如具有
@Cacheable({ "book","isbn"})
public Book findBook(ISBN isbn) {...}
Run Code Online (Sandbox Code Playgroud)
我们希望能够以某种方式从属性文件中注入缓存名称,以便可以动态设置缓存名称,例如:
@Cacheable({ #cachename1, #cachename2})
public Book findBook(ISBN isbn) {...}
Run Code Online (Sandbox Code Playgroud)
我在这里使用 SpEL,但不知道这是否可行。
当我最近提交时,我犯了一个错误.(我首先忘记了"git fetch --all",然后是rebase),并且我已经提交并推送到远程分支.现在我通过先获取,解决了冲突并推送到远程分支来正确地完成了rebase.现在,似乎我最近的所有提交都出现了两次.我想做的是使用git rebase交互模式,选择我想要的所有提交,然后正确地重新绑定到提交sha代码.这是这样做的方法吗?如果我启动git rebase -i,我应该使用哪个sha代码,原始分支点sha代码?还是最新的沙码?谢谢,
大卫
我正在使用maven构建一个Web应用程序项目,并且打包设置为"war".我还使用YUI压缩器插件来压缩webapp目录中的javascript代码.我已经设置了YUI压缩器,如下所示:
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>**/ext-2.0/**/*.js</exclude>
<exclude>**/lang/*.js</exclude>
<exclude>**/javascripts/flot/*.js</exclude>
<exclude>**/javascripts/jqplot/*.js</exclude>
</excludes>
<nosuffix>true</nosuffix>
<force>true</force>
<jswarn>false</jswarn>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我这样做:mvn process-resources,src/main/webapp将被复制到target/webapp-1.0 /目录,并压缩javacripts.但是,当我运行mvn install时,所有压缩的javascripts都会被覆盖,显然打包过程会在构建war文件之前从main/webapp复制一次内容.
我怎么能绕过这个?