Приложение весенней загрузки -[профиль]. свойства не работают
У меня настроен весенний загрузочный веб-проект. Это хорошо работает, когда у меня есть только один файл 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, чтобы разрешить передачу активных профилей
bootRun {
systemProperties = System.properties
}
Когда я запускаю проект с использованием gradle
./gradlew clean bootRun -Dspring.profiles.active=test
Работает, подключается к тестовой базе данных.
Но в идеальном производственном сценарии я хочу создать файл jar с профилем "test", чтобы он выполнял все тесты и создавал jar, если все тесты пройдены.
например
./gradlew clean build -Dspring.profiles.active=test
а затем разверните jar в разных средах (staging, dev, production и т. д.) и запустите
на Dev
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() {
}
}
Удаление теста делает сборку успешной на данный момент.