我已经设置了 Spring Boot Web 项目。当我只有一个包含所有数据库连接详细信息的 application.properties 文件时,它运行良好。我正在使用mysql数据库。这是我的 application.properties 文件。
logging.file=myfilename.log
logging.path=/var/log/mydir
# db1
spring.db1.url=jdbc:mysql://[my_host_ip]/db1
spring.db1.username=my_host_username
spring.db1.password=my_host_password
spring.db1.driver-class-name=com.mysql.jdbc.Driver
# db2
spring.db2.url=jdbc:mysql://[my_host_ip]/db2
spring.db2.username=my_host_username
spring.db2.password=my_host_password
spring.db2.driver-class-name=com.mysql.jdbc.Driver
我想设置不同的环境,例如生产、开发、测试、登台、本地。
根据文档配置文件特定的属性
我创建了 5 个配置文件特定的属性文件
i) application-production.properties
ii) application-dev.properties
iii) application-test.properties
iv) application-staging.properties
v) application-local.properties
我已经从默认的 application.properties 文件中删除了数据库连接属性。
我在 gradle build 中添加了这个以允许传递活动配置文件
bootRun {
systemProperties = System.properties
}
当我使用 gradle 启动项目时
./gradlew clean bootRun -Dspring.profiles.active=test
它可以工作,它连接到测试数据库。
但在理想的生产场景中,我想使用“test”配置文件构建jar 文件,以便它运行所有测试并在所有测试通过时创建 jar。
例如
./gradlew clean build -Dspring.profiles.active=test
然后将 jar 部署到不同的环境(暂存、开发、生产等)并运行
在开发中
java -jar myapp.jar -Dspring.profiles.active=dev
在舞台上
java -jar myapp.jar -Dspring.profiles.active=staging
但是构建失败,但有例外
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: The url cannot be null
Caused by: java.sql.SQLException: The url cannot be null
另一个问题是,
如果我一开始没有任何测试,是否可以在不通过任何配置文件选项的情况下构建 jar?
./gradlew clean build
它因此异常而失败
com.st.ComputeApplicationTests > contextLoads FAILED
java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException
Caused by: java.sql.SQLException
更新:
正如@Alex 在评论中所建议的那样,
“ComputeApplicationTests 使用 @SpringBootTest 进行注释并且没有指定任何 ActiveProfiles。它在默认配置文件中找不到适当的配置并失败”
mport org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ComputeApplicationTests {
@Test
public void contextLoads() {
}
}
删除测试使构建现在成功。