小编Avn*_*evy的帖子

在多个服务之间重用CXF jaxb上下文

我有多个服务可以返回数千个类的结果.
由于每个CXF服务都包含一个私有的几乎相同的JAXB上下文,因此会造成巨大的内存浪费.
有没有办法自己创建JAXB上下文并在服务之间共享?

java web-services cxf jax-ws jaxb

8
推荐指数
1
解决办法
2938
查看次数

将编程注释添加到Java类

用法示例:
我想在类字段上添加一个自定义注释@MyContainer,然后在所有这些字段上自动添加相关的Hibernate注释(取决于字段类型和属性).
另外,我需要将JAXB XmlType注释添加到类中,并将类型名称基于类名.
我还希望基于其类型等向字段添加注释.所有添加的注释应该在运行时可用(因此hibernate/JAXB可以找到它们).
我知道以下选项:

  1. 预处理类源(错误选项)
  2. 使用javax.annotation.processing API编译期间的处理
  3. 使用Java Assist等工具进行编译后操作
  4. 使用java.lang.instrument API在类加载期间进行操作
  5. 使用AspectJ(功能不够强大)

我的主要目标是:

  1. 在类和源之间保持同步以进行调试
  2. 支持Maven和IDE(Eclipse/Intellij)的工作

如果已经完成此类工作的人能够为这样的任务推荐最佳方法(也许还有潜在的陷阱),我将不胜感激.

java compiler-construction annotations bytecode-manipulation

7
推荐指数
1
解决办法
1741
查看次数

最小化Java进程中的应用程序数据内存开销

我需要在内存中存储大量数据(对象)(用于计算).
由于计算是基于此数据完成的,因此所有数据都将驻留在同一JVM进程内存中至关重要.
大多数数据将从字符串,整数和其他子对象(集合,哈希集等)构建.
由于Java的对象内存开销很大(字符串是UTF-16,每个对象有8个字节的开销)我正在寻找能够以较低的开销将这些数据存储在内存中的库.
我读过有关减少记忆的有趣文章:
*http://www.cs.virginia.edu/kim/publicity/pldi09tutorials/memory-efficient-java-tutorial.pdf *http://blog.griddynamics.com/2010 /01/java-tricks-reducing-memory-consumption.html

我只是想知道是否有一些库用于这种情况,或者我需要从头开始.
为了更好地理解我的需求,想象一个处理大量记录并需要根据存储在内存中的数百万条其他记录(高处理速率)来分析它们的服务器.

java memory performance caching

7
推荐指数
1
解决办法
434
查看次数

UTF-8 java的String类

我需要在内存中保存大量的字符串对象(数百MB),并且我希望将它们保存为UTF-8格式,因为在大多数情况下,它将需要默认实现使用的一半内存.
默认的String类需要12个字符的字符串60个字节(参见http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html).
我的大多数字符串长10-20个字符.
我想知道是否有一些开源库为这些字符串提供了一个包装器?
我知道如何将String转换为UTF-8字节数组,但我正在寻找一个包装类,它将提供所有需要的实用程序函数(Hash,Equal,toString,fromString等).

java memory string performance

6
推荐指数
1
解决办法
1600
查看次数

dtype列太短,无法容纳类名

我有一些很长的名称类,我使用Hibernate存储在数据库中.
我注意到hibernate创建了dtype列(用于继承支持)作为字符变化(31).
由于类名超过31个字符,因此插入失败.
解决它的最佳方法是什么?
由于我有很多类,我更喜欢在每个类中添加注释的全局设置.

java hibernate jpa

6
推荐指数
2
解决办法
1395
查看次数

获取Spring bean的初始化时间

我有一个带有大型Spring上下文的应用程序,该应用程序加载了许多开发人员编写的大量bean。
一些bean可能会对它们的初始化代码进行一些重要的处理,这可能需要很长时间。
我正在寻找一种简单的方法来获取每个bean的加载时间。
由于该软件正在大量客户的计算机上运行,​​因此我需要一种在日志中轻松查找瓶颈bean的方法。
如果我可以注册“ Before loading bean”之前和之后的事件,那将是很好的。
因此,如果我可以有问题地获取此数据,则可以编写如下内容:

if (beanLoadingTime > 2 seconds) 
    print bean details and loading time to log file
Run Code Online (Sandbox Code Playgroud)

因此,仅启用日志记录或配置文件还不够。

java spring

6
推荐指数
1
解决办法
1584
查看次数

使用 GraphQL 进行微服务互通有意义吗?

我已经阅读了很多关于使用 GraphQL 作为微服务前端的 API 网关的文章。但我想知道 GraphQL 相对于 Rest 的所有优势是否也与微服务之间的通信无关。任何输入、优点/缺点和成功的使用示例将不胜感激。

microservices graphql

6
推荐指数
1
解决办法
2088
查看次数

向maven exec添加一个jar:java classpath

我有一个批处理文件,它使用maven运行java类,它依赖于tools.jar(来自JDK).
例如:
MVN -f \的pom.xml -e EXEC:java的-Dfile.encoding = "UTF-8" -Dexec.mainClass = MyClass的-Dexec.args ="%1%2%3%4%5%6 %7%8%9"-Dexec.classpathScope = runtime
我的程序使用JDK中的tools.jar,我在maven中添加了一个指向它的系统依赖项.
由于exec:java目标不包含系统依赖项,我想手动从命令行添加依赖项.
虽然我预计它是微不足道的,但我可以找到办法.任何帮助将不胜感激.
谢谢,
Avner

java maven java-7

5
推荐指数
1
解决办法
8456
查看次数

如何使用自定义处理程序/插件更新Solr服务器端的Solr文档

我有一个拥有数百万条记录的核心.
我想添加一个自定义处理程序,它扫描现有文档并根据条件更新其中一个字段(例如,年龄> 12).
我更喜欢在Solr服务器端进行操作,以避免将数百万个文档发送到客户端并返回.
我正在考虑编写一个solr插件,它将接收查询并更新查询文档中的一些字段(如查询处理程序删除).
我想知道是否有现有的解决方案或更好的替代方案.
我在网上搜索了一段时间,找不到更新文档的Solr插件示例(我不需要扩展更新处理程序).
我写了一个插件,它使用下面的代码,工作正常,但没有我需要的那么快.
目前我这样做:

AddUpdateCommand addUpdateCommand = new AddUpdateCommand(solrQueryRequest); 
DocIterator iterator = docList.iterator(); 
SolrIndexSearcher indexReader = solrQueryRequest.getSearcher(); 
while (iterator.hasNext()) { 
   Document document = indexReader.doc(iterator.nextDoc()); 
   SolrInputDocument solrInputDocument = new SolrInputDocument(); 
   addUpdateCommand.clear(); 
   addUpdateCommand.solrDoc = solrInputDocument; 
   addUpdateCommand.solrDoc.setField("id", document.get("id")); 
   addUpdateCommand.solrDoc.setField("my_updated_field", new_value); 
   updateRequestProcessor.processAdd(addUpdateCommand); 
} 
Run Code Online (Sandbox Code Playgroud)

但这是非常昂贵的,因为更新处理程序将再次获取我已经掌握的文档.
是否有一种安全的方法来更新lucene文档并将其写回来,同时考虑所有与Solr相关的代码,如缓存,额外的solr逻辑等?
我想将它转换为SolrInputDocument,然后只需通过Solr添加文档,但我需要先转换所有字段.
先谢谢,Avner

solr solr4

5
推荐指数
1
解决办法
1463
查看次数

使用 MongoDb Atlas 全文搜索和多租户集合 ($searchBeta)

我有一个 MongoDb 集合,其中包含数千个租户的数据,这些租户由保存租户 ID 的字段分隔。
我想执行一个查询,其中包括对特定租户的全文搜索和分面(见下文)。
由于 $searchBeta 必须是聚合管道中的第一阶段,这意味着它将返回来自所有租户的大量文档列表,只是为了在 $match 阶段过滤掉它们,而不是使用索引。
有没有更有效的方法来执行这样的查询?
使用 $searchBeta 运行它需要 14 秒,而删除它会将查询时间减少到 6 毫秒(而分面适用于更多文档,因为它包含所有租户的数据)。
* 使用下面 Doug 的答案将其减少到 ~70-120ms。
* 时间测量是在 Atlas 免费套餐上完成的,因此意义不大

db.tenantData.aggregate( [
{
    $searchBeta: {
        "search": {
        "query": "test",
        "path": ["name","comment"],
      }
    }
},
{
    $match: {tenant:"tenant1"},
},
{
    $facet: {
        "AssetTypeFacet": [
          { $sortByCount: "$assetType" }
        ],
        "manufacturerFacet": [
          { $sortByCount: "$manufacturer" }
        ]
    }
}
])    
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-atlas mongodb-atlas-search

5
推荐指数
1
解决办法
1098
查看次数