我使用的是Spring数据Solr,我有以下Solr文档模型类,并有一个对应的SolrCrudRepository用于该类
@SolrDocument(collection = "oldCollectionName")
public class TestDocument {
@Id
@Indexed(name = "id", type = "string")
private String id;
@Field(value = "name")
private String name;
@Field(value = "externalid")
private Integer externalId;
}
我正在尝试在运行时修改注释“@SolrDocument(collection=“oldCollectionName”)”。
我有一个服务,它使用以下方法来查找使用存储库和模型类的所有文档
public List<TestDocument> getDocumentsByName(String name){
String newSolrDocument = getModifiedSolrCollectionName();
alterAnnotationValue(TestDocument.class, SolrDocument.class, newSolrDocument);
SolrDocument solrDocument = TestDocument.class.getAnnotation(SolrDocument.class);
LOGGER.info("Dynamically set SolrDocument Annotaation: "+solrDocument.collection());
return testDocumentRepository.findByName(name);
}
更改注释的代码如下所示
public void alterAnnotationValue(Class<?> targetClass, Class<? extends Annotation> targetAnnotation, Annotation targetValue) {
try {
Method method = Class.class.getDeclaredMethod(ANNOTATION_METHOD, null);
method.setAccessible(true);
Object annotationData = method.invoke(targetClass);
Field annotations = annotationData.getClass().getDeclaredField(ANNOTATIONS);
annotations.setAccessible(true);
Map<Class<? extends Annotation>, Annotation> map = (Map<Class<? extends Annotation>, Annotation>) annotations.get(annotationData);
map.put(targetAnnotation, targetValue);
} catch (Exception e) {
e.printStackTrace();
}
}
使用此方法,我正确地将newDocumentName设置到注释映射中,但在调用testDocumentRepository的find方法来查找文档时。正在选取旧集合名称。
我还需要做些什么吗?还是我错过了什么?
作为参考,我遵循了以下教程http://www.baeldung.com/java-reflection-change-annotation-params
为什么不编写一个自定义SolrRepository
来解决这个问题?您可以在自定义存储库中注入SolrTemboard
,允许您像这样为查询指定集合:
public class TestDocumentRepositoryImpl implements TestDocumentRepository {
private SolrOperations solrTemplate;
...
public CustomSolrRepositoryImpl(SolrOperations solrTemplate) {
super();
this.solrTemplate = solrTemplate;
}
@Override
public TestDocument findOneSpecifyingCollection(String collection, String id) {
return solrTemplate.getById(collection, id, TestDocument.class);
}
}
您可以对您想要的存储库操作进行类似的操作。如果标准Spring JPA存储库不适合他们的需求,人们通常需要自己的实现。但是,如果需要,您仍然可以将自己的与标准SolrCrudRepository
混合使用。
请参阅Spring中的示例。
我已经下载了活动5.10 zip文件,然后我下载并配置了Apache ANT,我测试了一下,它成功了。但是我无法运行此链接中指定的演示文件http://activiti.org/userguide/#demo.setup 如果我使用cmd命令行键入以下命令:- 我将得到以下错误:- 有人能帮我找出问题所在吗?溴 ::: UPDATE::: 感谢您的回复,我已经将ANT bin文件复制到活动的安装目
问题内容: 使用IKVM时,如何在运行时设置CLASSPATH变量? 我一直在尝试使用以下方法: 我正在调用的类需要在类路径中使用配置文件才能工作-而且我不断收到错误消息,似乎表明它没有获得设置。 我尝试添加变量的方式不正确吗? 问题答案: 我试图做同样的事情。我将一些jar文件编译为.Net dll,但是其中一些(第3方)jar文件正试图从java类路径中加载其配置文件。 我通过为ikvmc工具
我通过终端安装了Java。我Linux5.8.0-53通用Kubuntu Java版本输出 我的VSCode设置指向 但是,我得到一个错误,即“Visual Studio代码设置(/usr/lib/jvm/java-16-openjdk-amd64)中定义的java.home变量不指向JDK。
上游集群支持以下运行时配置: 主动健康检查 health_check.min_interval 健康检查间隔的最小值。默认值为0。运行状况检查间隔将介于min_interval和max_interval之间。 health_check.max_interval 健康检查间隔的最大值。默认值是MAX_INT。健康检查间隔将在min_interval和max_interval之间。 health_ch
HTTP连接管理器支持以下运行时设置: tracing.client_enabled 如果设置了x-client-trace-id头部,请求将被强制跟踪的百分比。默认为100。 tracing.global_enabled 在所有其他检查(强制跟踪,采样等)生效之后,将被跟踪的请求百分比。默认为100。 tracing.random_sampling 被随机跟踪的请求万分比。浏览此处获取更多信息。
问题内容: 在已经加载(运行)JVM之后,是否可以更改/修改/添加VM参数?如果是这样,我该怎么办? 问题答案: 对于通过命令行上的标志设置的属性,您需要System.setProperty。例如: 更新: 您无法动态启用调试,但是可以在启动时启用调试,但稍后再附加调试器。通过以下操作,您可以侦听端口12345并立即开始运行程序(通过)。然后,您可以在需要时附加调试器,分离调试器,稍后再附加等。