小编Jon*_*Jon的帖子

如何在Spring Boot应用程序中配置嵌入式MongDB进行集成测试?

我有一个相当简单的Spring Boot应用程序,它公开一个小的REST API并从MongoDB的一个实例中检索数据.对MongoDB实例的查询通过基于Spring Data的存储库进行.下面的一些关键代码.

// Main application class
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@ComponentScan
@Import(MongoConfig.class)
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)
// Product repository with Spring data
public interface ProductRepository extends MongoRepository<Product, String> {

    Page<Product> findAll(Pageable pageable);

    Optional<Product> findByLineNumber(String lineNumber);
}
Run Code Online (Sandbox Code Playgroud)
// Configuration for "live" connections
@Configuration
public class MongoConfig {

    @Value("${product.mongo.host}")
    private String mongoHost;

    @Value("${product.mongo.port}")
    private String mongoPort;

    @Value("${product.mongo.database}")
    private String mongoDatabase;

    @Bean(name="mongoClient")
    public MongoClient mongoClient() throws IOException {
        return new MongoClient(mongoHost, Integer.parseInt(mongoPort));
    } …
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-boot

25
推荐指数
4
解决办法
4万
查看次数

Apache commons文件上传替代品

我想知道Java File Upload API的StackOverflow用户过去使用过什么并建议使用?一个快速的谷歌搜索似乎表明最常用的API是Apache Commons文件上传(目前在1.2.1),但是,我们遇到了一些关于使用这个库的问题,我们无法使用更大的文件解决.

有没有人找到他们推荐的可靠的文件上传库(除了Apache Commons之外)?

编辑:Streaming API 不是一个选项,因为它使用导致我们问题的相同底层类.

编辑2:我们的原始问题似乎是负载平衡的某种问题.我们的克隆实例使用Apache/AJP1.3,实时实例使用Zeus XTM.使用服务器IP而不是主机名绕过负载均衡器似乎会导致问题消失.

编辑3:这结果是客户端防火墙的问题.看来他们是......呃..当他们说明确知道这不是防火墙问题时,并不是完全真实的.

java upload file-upload uploading

21
推荐指数
1
解决办法
3919
查看次数

获取EasyMock模拟对象以抛出异常

我正在使用EasyMock为许多协作类编写单元测试.其中一个班(让调用它的Foo)打开网络连接到远程服务器,并解析该服务器的XML响应弄成了类其余的可以使用.

目前,我的测试仅包括一切都很糟糕且远程服务器启动并运行并按预期返回XML的场景.但是,如果我可以模拟以便模拟在远程服务器关闭时会发生什么,或者存在导致被抛出的其他问题,我更高兴.FooIOExceptionFoo

我已经看过EasyMock API了,我看不到任何看起来像是一个让mock去抛出异常的方法.

对我来说,进行Exception基础测试并不是绝对必要的,但我很好奇是否有可能使用EasyMock,而且我认为用Foo这种方式测试公共合同会很有用.

以前有人用EasyMock做过这样的事吗?

参考

java unit-testing easymock

21
推荐指数
2
解决办法
4万
查看次数

使用gcore进行核心转储,jmap转换为hprof文件格式失败,并显示错误消息

我们最近遇到了一个JVM崩溃,留下了gcore命令生成的核心转储文件.我们想看一下文件的内容,找出导致崩溃的确切原因.

使用该jmap命令,您应该能够将核心转储文件转换为hprof文件格式的文件,然后可以使用VisualVM和许多其他工具进行分析.我试过这个并收到错误消息.这是我运行的命令(在发生崩溃的同一个框中,使用相同的JVM):

jmap -dump:format=b,file=dump.hprof /usr/java/jdk1.6.0_16/bin/java core.dump.2878
Run Code Online (Sandbox Code Playgroud)

整个回应是:

> Attaching to core core.dump.8483 from executable /usr/java/jdk1.6.0_16/bin/java, please wait...
> Error attaching to core file: Can't attach to the core file
Run Code Online (Sandbox Code Playgroud)

这不是一个非常有用的错误消息.我想知道它是否是一个权限问题,但是我得到了运行该命令的相同消息,就像运行导致核心转储的JVM一样.我也想知道核心文件是否已损坏,所以我决定用它gdb来查看我是否可以打开核心文件并查看其中的内容.这就是我得到的:

> gdb
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-37.el5_7.1)
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for …

java jmap

14
推荐指数
3
解决办法
3万
查看次数

在交易结束时发送事件

我有一个Service对象的接口,看起来像下面这样(简化为简洁):

public interface ItemService {

  public Item getItemById(String itemId, int version);

  public void create(Item item, User user);

  public void update(Item item, User user);

  public void delete(Item item, User user);

}
Run Code Online (Sandbox Code Playgroud)

ItemService单个实现,并作为Spring bean连接.它由我们项目的UI部分以及处理Ajax请求的代码使用,以Item在我们的数据存储中创建和修改对象.

在引擎盖下,每个方法在被调用时都会发出一系列事件.其他模块接收事件以执行保持Lucene索引最新的操作,或者向管理员发送消息以让他们知道某些内容已更改.每个方法调用构成Spring中的单个事务(使用org.springframework.orm.hibernate3.HibernateTransactionManagerorg.springframework.transaction.interceptor.TransactionProxyFactoryBean).

最近,需要在单个事务中一起组成多个方法调用.有时候有多个服务.例如,我们可能想要做类似的事情:

*Begin transaction*
Get Items created by User Bill using ItemService
 for each Item in Items 
   Update field on Item
   Link Item to User Bill with LinkService 
   Update Item using ItemService
*Finish transaction* 
Run Code Online (Sandbox Code Playgroud)

我们通过创建另一个服务来完成此操作,该服务允许您在父服务中的单个方法中组合来自Services的调用.让我们来称呼它ComposingService.ComposingService与所有其他人一样,也由Spring管理,并且由于交易是可重入的,所以这一切都应该有效. …

java architecture spring design-patterns

11
推荐指数
1
解决办法
8347
查看次数

sun.misc.SharedSecrets的用法

我最近在我们的代码库中找到了这个小宝石.我必须承认,我完全不知道为什么这个枚举是以这种方式编写的(名称改为保护无辜者):

package foo.bar;

import sun.misc.SharedSecrets;
import foo.baz.HasAGetValuesMethod;

public enum MysteryEnum implements HasAGetValuesMethod {

   THINGY, BOB;

   @Override
   public MysteryEnum[] getValues() {
      return SharedSecrets.getJavaLangAccess().getEnumConstantsShared(MysteryEnum .class);
   }
}
Run Code Online (Sandbox Code Playgroud)

在getValues()方法中,而不是简单地调用MysteryEnum.values()它来使用调用sun.misc.SharedSecret来获取被调用内容的句柄sun.misc.JavaLangAccess,然后使用来获取所有枚举值的数组.在该类的Javadoc告诉你的方法做什么,但我不能找到太多的为什么你会想将它命名.

写这篇文章的开发者已经不在了,所以我不能问他.无论如何我会问我的团队,但我觉得答案是:"不知道为什么会这样,但最好不要改变它".目前,我假设这是一个奇怪的情况,有人不知道该values()方法存在,或者我对sun.misc库的无知导致我错过了其他人明显的东西.知道这个代码是用这种方式编写的吗?

java

9
推荐指数
1
解决办法
5942
查看次数

Apache Commons文件上传 - Stream意外结束

好吧,我不得不说到目前为止,这个让我难过.我们在Tomcat 6.0.18中运行的Web应用程序在文件上载期间失败,但仅当客户端计算机是Windows计算机时,仅适用于某些计算机,并且适用于所有浏览器,而不仅仅是IE.

日志中有一个堆栈跟踪,这似乎表明客户端关闭了连接,或者流以某种方式被破坏.堆栈跟踪的根本原因如下:

Caused by: org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:983)
    at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
    at java.io.InputStream.read(InputStream.java:85)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:362)
    ... 70 more
Run Code Online (Sandbox Code Playgroud)

导致跟踪的代码看起来相当直接.

private Map<String, Object> getMap( ActionRequest request ) {

    HashMap<String, Object> parameters = new HashMap<String, Object>();
    if ( request == null ) {
        return parameters;
    }

    if ( request.getContentType() == null ) {
        return parameters;
    }

    try {
        if(PortletFileUpload.isMultipartContent(request)){
            DiskFileItemFactory factory = new DiskFileItemFactory();
            PortletFileUpload upload = new PortletFileUpload(factory);
            List<DiskFileItem> fileItems = upload.parseRequest(request);
            for( …
Run Code Online (Sandbox Code Playgroud)

java apache upload file-upload tomcat6

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