包括外部 jar 依赖项 spring boot 测试

Posted

技术标签:

【中文标题】包括外部 jar 依赖项 spring boot 测试【英文标题】:include external jar dependencies spring boot test 【发布时间】:2017-12-31 07:34:51 【问题描述】:

我有共享相同实体层的 Spring Boot 应用程序,直到现在这些实体在所有项目中都是重复的,并且我对每个运行良好的模块进行了测试。 我将所有实体提取到一个单独的 Maven 工件中,并将我的项目中的依赖项添加到新工件中。 除了我的测试无法运行之外,一切似乎都运行良好。 运行测试时出现以下错误:

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PIM_SECURITIES
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.ParserDQL.readSimpleRangeVariable(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.ParserCommand.compilePart(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.ParserCommand.compileStatements(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.Session.executeDirectStatement(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.Session.execute(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]
at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) ~[hsqldb-2.2.8.jar:2.2.8]

下面是我的spring boot测试类的定义

@ContextConfiguration(classes = AccountsDao.class, SecuritiesDao.class,  TasksDao.class)
@RunWith(SpringRunner.class)
@DataJpaTest
@Transactional
@ActiveProfiles("test")
public class DalLayerTests extends 
AbstractTransactionalJUnit4SpringContextTests 

未找到的对象在实体工件中。

我尝试添加工件以在 maven 中使用测试范围运行,但没有帮助。 我试图将它添加到注释 @ContextConfiguration(classes) 但它也没有帮助。

您的帮助将不胜感激。

【问题讨论】:

【参考方案1】:

Hsqldb 将表名更改为大写,因此,如果您的表名由小写字符组成;这种情况可能是导致错误的原因,以下是可能提供有用的 2 个选项:-

    将表名更改为大写。 把它转成隐式大写表名过程,见here

【讨论】:

我认为情况并非如此,因为测试已经运行良好,我只是将实体层拆分到一个新的 maven 项目并为其工件添加了新的依赖项 表格是否嵌入?数据库创建了吗? 数据库创建完美,只是 spring 无法将实体扫描和加载为实际实体。我找到了解决方案,您可以查看我的答案。非常感谢您的帮助!【参考方案2】:

我终于找到了如何让 spring 上下文在测试中加载我的实体。

在生产中,我有以下属性文件: entitymanager.packagesToScan=com.pim

由于某种原因在测试类中使用注解添加属性: @TestPropertySource(properties = "entitymanager.packagesToScan = com.pim.common")

没有任何影响,在类中加入如下注解即可解决问题:

@EntityScan(basePackages = "com.pim")

【讨论】:

以上是关于包括外部 jar 依赖项 spring boot 测试的主要内容,如果未能解决你的问题,请参考以下文章

pom文件配置打包外部/自定义jar文件在fat spring boot可执行jar文件中

spring boot应用程序作为maven依赖项[重复]

Spring Boot,无法从依赖项 jar 中读取 application.properties

Spring Boot 完全可执行的 jar,内部没有依赖项

Gradle:使用 Spring Boot 依赖项构建“fat jar”

如何从外部jar自动运行java任务?