Подтвердить что ты не робот

Spring -boot datasource profiles w/application.properties

Обновленный вопрос, основанный на обратной связи:

У меня есть приложение spring -boot, в котором есть три базы данных: H2 для тестирования интеграции и Postgresql для qa и production. Поскольку spring -boot создает для вас исходный источник данных, у меня нет никаких определений для моих тестов интеграции. Я думал, что буду использовать application.properties для определения значений подключения к источнику данных, но я не уверен, что это лучший способ справиться с этим.

У меня есть два файла:

SRC/основные/ресурсы/application.properties

spring.profiles.active=production
appName = myProduct
serverPort=9001

spring.datasource.url=jdbc:postgresql://localhost/myDatabase
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driverClassName=org.postgresql.Driver

spring.jpa.hibernate.hbm2ddl.auto=update
spring.jpa.hibernate.ejb.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy
spring.jpa.hibernate.show_sql=true
spring.jpa.hibernate.format_sql=true
spring.jpa.hibernate.use_sql_comments=false
spring.jpa.hibernate.type=all
spring.jpa.hibernate.disableConnectionTracking=true
spring.jpa.hibernate.default_schema=dental

SRC/основные/ресурсы/application-test.properties

spring.profiles.active=test
serverPort=9002

spring.datasource.url = jdbc:h2:~/testdb
spring.datasource.username = sa
spring.datasource.password = 
spring.datasource.driverClassName = org.h2.Driver

liquibase.changeLog=classpath:/db/changelog/db.changelog-master.sql

Я использовал для запуска своих тестов с помощью gradle (используя "gradle build test" ) или внутри IntelliJ. Я обновил файл gradle для использования:

task setTestEnv {
    run { systemProperty "spring.profiles.active", "test" }
}

Но когда я запускаю gradle clean build setTestEnv test, я получаю ошибки, которые, похоже, указывают на то, что тест пытается подключиться к фактической базе данных Postgresql:

Caused by: org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:138)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
    at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:32)
    at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:393)
    at org.postgresql.Driver.connect(Driver.java:267)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127)
    at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:288)
    ... 42 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)

Я не понял, как установить стандартную system.property == "test" в IntelliJ еще...

4b9b3361

Ответ 1

См. раздел 21.3 документации по загрузке Spring. В этом разделе описывается, как определить файлы свойств профиля, которые используют формат application- {profile}.properties. Это может помочь вам изолировать свойства на основе профиля.

Ответ 2

Вы можете аннотировать ваши тесты, добавляя @ActiveProfiles следующим образом:

@SpringApplicationConfiguration(classes = {Application.class, TestSpringConfiguration.class})
@Test(groups = "integration")
@ActiveProfiles("test")
public class MyServiceTest extends AbstractTransactionalTestNGSpringContextTests {
...
   @Test 
   public void testSomething() {
      ...
   }
} 

Я использую TestNG, но JUnint не будет сильно отличаться. Вы также можете указать дополнительную конфигурацию, как показано в приведенном выше примере.

Таким образом вам не нужно будет устанавливать профиль в build.gradle или запустить конфигурацию в IntelliJ