微擎 网站开发工具,成都新都网站开发,win7做网站,深圳南山住房和建设局网站Junit单元测试Test启动报错#xff0c;SpringBootConfiguration注解重复问题排查#xff1a;
SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类#xff0c;而不是用于排除主配置类本身。因此#xff0c;不能通过 exclude 属性来排除主配置类的加载。
…Junit单元测试Test启动报错SpringBootConfiguration注解重复问题排查
SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类而不是用于排除主配置类本身。因此不能通过 exclude 属性来排除主配置类的加载。
正确的使用方式
如果你想排除某些自动配置类可以使用 exclude 属性。例如
SpringBootApplication(exclude {DataSourceAutoConfiguration.class})
public class PortalApplication {public static void main(String[] args) {SpringApplication.run(PortalApplication.class, args);}
}排除主配置类的加载
如果你确实需要在某些情况下排除主配置类的加载可以考虑以下几种方法
1. 使用不同的配置类
你可以创建不同的配置类并在不同的环境中使用不同的配置类。例如可以创建一个测试配置类并在测试中使用它。
// 主配置类
SpringBootApplication
public class PortalApplication {public static void main(String[] args) {SpringApplication.run(PortalApplication.class, args);}
}// 测试配置类
SpringBootApplication
public class TestApplication {public static void main(String[] args) {SpringApplication.run(TestApplication.class, args);}
}在测试类中使用 SpringBootTest 注解来指定测试配置类
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.junit.runner.RunWith;
import org.junit.Test;RunWith(SpringRunner.class)
SpringBootTest(classes TestApplication.class)
public class PortalApplicationTest {Testpublic void contextLoads() {// 测试内容}
}2. 使用 TestConfiguration
如果你只需要在测试中排除某些配置可以使用 TestConfiguration 注解来创建测试专用的配置类。
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;TestConfiguration
public class TestConfig {Beanpublic SomeBean someBean() {return new SomeBean();}
}在测试类中使用 Import 注解来导入测试配置类
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.context.annotation.Import;
import org.junit.runner.RunWith;
import org.junit.Test;RunWith(SpringRunner.class)
SpringBootTest(classes PortalApplication.class)
Import(TestConfig.class)
public class PortalApplicationTest {Testpublic void contextLoads() {// 测试内容}
}总结
SpringBootApplication 的 exclude 属性用于排除特定的自动配置类而不是用于排除主配置类本身。不同的配置类可以创建不同的配置类并在不同的环境中使用不同的配置类。TestConfiguration用于创建测试专用的配置类并在测试中使用。