什么是DockerDocker最近在业界很火。如果您现在还不知道Docker是什么,请小心。将来,您会发现自己以某种方式使用它。本文假定您已经具备Docker的基础知识。如果你现在还不是很熟悉,我相信你以后会读到这篇文章。Docker非常适合复杂分布式系统的集成测试和演示。它甚至可以用于在生产环境中运行系统。它是一个开源软件容器。你可以把它想象成一个非常轻的超快虚拟机。例子受《Maven和Docker集成测试》一文和DockerJavaAPI项目的启发,写了一个简单的可以管理Docker容器的maven插件DockerMavenPlugin。此插件将根据您的配置在构建时启动容器,并在构建结束时停止容器并删除它。如果本地找不到镜像,Docker会自动去中央仓库下载。以下与ApacheCamel的集合测试是被忽略的,因为测试需要一个Redis实例才能执行:packageorg.apache.camel.component.redis;importorg.apache.camel.impl.JndiRegistry;importorg.junit.Ignore;importorg.junit.Test;importorg.springframework.data.redis.connection.jedis.JedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;@IgnorepublicclassRedisProducerIntegrationTestextendsRedisTestSupport{privatestaticfinalJedisConnectionFactoryCONNECTION_FACTORY=newJedisConnectionFactory();static{CONNECTION_FACTORY.afterPropertiesSet();}@OverrideprotectedJndiRegistrycreateRegistry()throwsException{JndiRegistryregistry=super.createRegistry();redisTemplate=newRedisTemplate();redisTemplate.setConnectionFactory(CONNECTION_FACTORY);redisTemplate.afterPropertiesSet();registry.bind("redisTemplate",redisTemplate);returnregistry;}@TestpublicvoidshouldSetAString()throwsException{sendHeaders(RedisConstants.COMMAND,"SET",RedisConstants.KEY,"key1",RedisConstants.VALUE,"value");assertEquals("value",redisTemplate.opsForValue().get("key1"));}@TestpublicvoidshouldGetAString()throwsException{redisTemplate.opsForValue().set("key2","value");Objectresult=sendHeaders(RedisConstants.KEY,"key2",RedisConstants.COMMAND,"GET");assertEquals("value",result);}}我们配置docker-maven-plugin使用Redis镜像,让主机的6379端口映射到容器的6379端口:
