Junit启动有spring-boot-starter-data-jpa依赖的容器报错,怎么解决?
在自己的springboot项目中添加spring-boot-starter-data-jpa后,在对自己的repository用junit做单元测试的时候。当通过junit test case 启动容器的时候会出现一大堆
[Xlint:cantFindType]
[AppClassLoader@xxxx] error can't determine implemented interfaces of missing type xxxx的错误在控制台(详细的堆栈信息见截图)。并且会导致我的 Springboot Data repository Scanning变的特别慢。
[ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 41625ms.
奇怪的是,报错不会影响容器启动也不会fail我的case,更奇怪的是当我直接 run 我的SpringApplication类启动容器的时候,不会有报错的信息也Springboot Data repository Scanning非常快,没有变慢。
这两个问题发生的背景是在我给项目加上spring-boot-starter-data-jpa依赖后发生的。Springboot的版本尝试过2.0.3然后升级到最新的release版本都有这个问题。是不是我的junit case缺什么配置吗?
也尝试过改用TestNg,问题同样复现。
相关代码
App:
@SpringBootApplication
//@EnableDubboConfiguration
public class DubboCallerApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DubboCallerApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
}
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = DubboCallerApplication.class)
public class JpaTest{
@Autowired
DeviceRepository deviceRepository;
@Test
public void test(){
Device device = deviceRepository.findDevice("xxxxx");
System.out.println(device);
}
}
Repository类:
@Repository
public interface DeviceRepository extends JpaRepository<Device, Integer> {
@Query("select d from Device d where device_id = ?1")
public Device findDevice(String device_id);
@Query("update Device set create_time = ?2 where device_id = ?1")
public Device findDevice(String device_id, long create_time);
}
数据源配置:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactoryMember",
transactionManagerRef = "transactionManagerMember",
basePackages = {"com.xxx.apicaller.dao.member"}
)
public class MemberDataSourceConfig {
//注入数据源
@Autowired
@Qualifier("memberDataSource")
private DataSource memberDataSource;
//配置EntityManager实体
@Primary
@Bean(name="entityManagerMember")
public EntityManager entityManager(EntityManagerFactoryBuilder builder){
return entityManagerFactoryMember(builder).getObject().createEntityManager();
}
//配置EntityManager工厂实体
@Primary
@Bean(name="entityManagerFactoryMember")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryMember(EntityManagerFactoryBuilder builder){
return builder
.dataSource(memberDataSource)
.properties(getVendorProperties())
.packages("com.xxx.apicaller.domain.member")
.persistenceUnit("memberPersistenceUnit")
.build();
}
//注入Jpa实体
@Autowired
private JpaProperties jpaProperties;
//获取Jpa配置信息
private Map<String, String> getVendorProperties(){
return jpaProperties.getProperties();
}
//配置事务
@Primary
@Bean(name="transactionManagerMember")
public PlatformTransactionManager transactionManagerMember(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(entityManagerFactoryMember(builder).getObject());
}
}
报错虽然不会fail case,也不会启动不了容器,但是看着这些报错信息贼难受,而且repository的扫描时间这么长更难受了。有能帮忙解决一下的吗。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以考虑一下是否是包冲突的问题,异常显示由于缺失xxx类无法确定继承的接口