首先web工程一般的啟動(dòng)方式是web容器,如tomcat,jetty是牢。然后由于使用了spring的配置中心,你需要指定幾個(gè)jvm options參數(shù)來(lái)指定配置中心的git地址以及分支等陕截。但是為了方便測(cè)試驳棱,為了不用每次測(cè)試都啟用tomcat,于是想到使用Junit測(cè)試用例
于是想到普通web項(xiàng)目的測(cè)試用例的寫(xiě)法如下:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:spring-servlet.xml","classpath:spring-common.xml"})
public class SpringWebJunitTest {
@Autowired
private IItemsService itemsService;
@Test
public void test() {
itemsService.queryItemsByClasscode("ddd");
System.out.println("hello world");
}
}
然后在在classpath下面加入bootstrap.properties內(nèi)容如下:
spring.cloud.config.uri=http://localhost:9010 #指定git倉(cāng)庫(kù)地址
spring.cloud.config.name=database,business,component #指定配置文件的名稱(chēng)
spring.cloud.config.profile=dev #指定profile的類(lèi)型,test,dev,prod等
spring.cloud.config.label=dev #指定git的分支
但是報(bào)dataSource的數(shù)據(jù)源初始化失斔也摺(數(shù)據(jù)庫(kù)鏈接配置在spring的配置中心)
2017-01-11 17:50:29 [INFO] [org.springframework.beans.factory.xml.XmlBeanDefinitionReader:317] - Loading XML bean definitions from class path resource [spring-common.xml]
2017-01-11 17:50:29 [INFO] [org.springframework.context.support.AbstractApplicationContext:578] - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@63676602: startup date [Wed Jan 11 17:50:29 GMT+08:00 2017]; root of context hierarchy
[17:50:30|INFO |(com.alibaba.druid.pool.DruidDataSource)]=[{dataSource-1} inited]
從日志可以看出這是因?yàn)槌跏蓟?code>sprint-common.xml失敗,然后想到是因?yàn)榧虞d不到spring配置中心
然后想是因?yàn)槲业腷ootstrap.properties不起作用嗎蹈胡,試試用jvm options 制定參數(shù)呢
為測(cè)試用例添加jvm options:
-Dspring.cloud.config.uri=http://localhost:9010 #指定git倉(cāng)庫(kù)地址
-Dspring.cloud.config.name=database,business,component #指定配置文件的名稱(chēng)
-Dspring.cloud.config.profile=dev #指定profile的類(lèi)型渊季,test,dev,prod等
-Dspring.cloud.config.label=dev #指定git的分支
如圖:
結(jié)果報(bào)了一模一樣的錯(cuò)誤朋蔫,這是意識(shí)到是這兩種方式得知配置中心的方法是無(wú)效的罚渐,于是想想肯定有人和我一樣遇到類(lèi)似的坑吧,結(jié)果google了半天無(wú)果驯妄,無(wú)奈啊~
起身上了個(gè)廁所回來(lái)一想荷并,spring boot 方式不是能正常加載到spring的配置中心嗎,用junit也能正常跑起來(lái)青扔,為什么換成web酒跑步起來(lái)呢源织。為了達(dá)到測(cè)試用例效果,擺了
就用junit 結(jié)合spring boot來(lái)啟用web項(xiàng)目并加載配置中心吧微猖,抱著還不行就不管了的心態(tài)試了試谈息。以下是配置過(guò)程。
在項(xiàng)目pom.xml中加入spring boot 啟動(dòng)web項(xiàng)目的支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>test</scope>
</dependency>
- 新建Spring boot啟動(dòng)類(lèi)Application類(lèi)
@Configuration
@EnableAutoConfiguration
@ComponentScan
@ImportResource({"classpath:spring-servlet.xml","classpath:spring-common.xml"})
public class SprintBootTestApplication extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(SprintBootTestApplication.class);
System.out.println("spring boot start success.");
}
}
- 新建junit測(cè)試類(lèi)型來(lái)運(yùn)行Spring boot 啟動(dòng)類(lèi)
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SprintBootTestApplication.class)
@WebAppConfiguration
public class BaseTest {
@Resource(name="testService")
public TestService testService;
@Test
public void test(){
testService.sayHello("world");
System.out.println("finish!!!");
}
}
測(cè)試運(yùn)行凛剥,果然可以侠仇。不知道為什么單純的使用測(cè)試用例不能使用spring配置中心配置,如果哪位大俠有更好的方法犁珠,能夠分享下讓我學(xué)習(xí)學(xué)習(xí)啊