问题描述:
运行spring boot单元测试redis获取不到连接。
来龙去脉:
因项目采用SpringBoot微服,而默认的application.properties文件放在了resource目录下的/config/env/ 目录下:
TestApplication类如下:
public class TestApplication {
private static final Logger logger = LoggerFactory.getLogger(TestApplication.class);
public static void main(String[] args) {
System.setProperty("spring.config.location", "classpath:conf/env/application.properties");
SpringApplication.run(TestApplication.class, args);
logger.info("start completed !");
}
}
然后编写单元测试redis锁,代码如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(TestApplication.class)
public class DistributeLockTest {
private static final Logger logger = LoggerFactory.getLogger(DistributeLockTest.class);
@Autowired
private DistributeLock distributeLock;
@Test
public void testSigleThread() {
logger.info("===========加锁开始==============");
logger.info("加锁返回结果:{}",distributeLock.lock("2018345345", 90l,30000));
logger.info("===========加锁结束==============");
}
}
运行test,结果报get redis connection 异常;
没办法,开启debugg神器,追踪代码发现是application.properties配置未被spring加载,所以导致redis不能连接所配置的redis服务器;
OK,找到原因了就好说。
解决办法一: 在TestApplication类上加上:
@PropertySource(value={"classpath:conf/env/application.properties"})
解决办法二:
新增DistuributeLockTest 构造方法,新增:
System.setProperty("spring.config.location", "classpath:conf/env/application.properties");
这样,启动test也会加载这的配置信息了,Run test Ok!