这是我的spring-boot应用程序的DbConfig。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class ApplicationTests {
@Test
public void contextLoads() {
}
}
这是我的测试类
gradlew clean build
这是一个gradle项目。
当我在本地运行java.lang.IllegalStateException: Failed to load ApplicationContext
....
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(Abstract
.....
Caused by: com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization
at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:544)
at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:171)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48)
.....
Caused by: java.sql.SQLException: Access denied for user 'admin1'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)
时,我成功构建,因为我在application.properties中的连接设置与我的sql连接匹配。
但是当我在qa环境中从jenkins框运行时(数据库是qa),构建失败并出现以下异常。
gradlew clean build -Dspring.profiles.active=qa
我尝试在带有qa db设置的src / main / resources /中的application-qa.properties运行{{1}}。构建仍然以相同的异常失败。
我有两个选择。
运行构建跳过数据源bean创建。我仍然需要运行我的单元测试,因为他们不依赖于数据源
或将正确的设置传递给gradle构建,以便创建应用程序上下文。
我更喜欢第二种选择让它运转
答案 0 :(得分:5)
如果您的要求是从外部控制(即,在启动Gradle时通过命令行),则可以按如下方式修改Gradle test
任务配置。
test {
systemProperty("spring.profiles.active", project.properties.get("springProfiles"))
// ...
}
然后您可以设置springProfiles
的值,如下所示:gradlew clean build -PspringProfiles=ci
(其中ci
是您希望在CI服务器上处于活动状态的个人资料的名称。)
以上将使spring.profiles.active
可用作测试的JVM系统属性;但是,您仍然需要为 Spring TestContext Framework 设置活动配置文件。
为此,您需要使用@ActiveProfiles
为测试类添加注释,但不是传递静态配置文件,而是需要实现自定义ActiveProfilesResolver
并通过{{1注册}}。然后,您的客户解析器可以读取,然后只返回@ActiveProfiles(resolver = MyCustomResolver.class)
系统属性的值。
另一种选择是实现以编程方式设置活动配置文件的自定义spring.profiles.active
(类似于自定义ApplicationContextInitializer
)。您可以通过ActiveProfilesResolver
配置其中一个。
另一种选择是programmatically set the active profiles directly in your SpringApplication
- 例如,基于系统属性或环境变量。
所以,你有几个选择。