首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-启动数据源配置文件w/ application.properties

spring-启动数据源配置文件w/ application.properties
EN

Stack Overflow用户
提问于 2014-08-18 19:31:19
回答 2查看 26.3K关注 0票数 14

基于反馈的更新问题:

我有一个spring引导应用程序,它有三个数据库:用于集成测试的H2和用于qa & production的Postgresql。因为spring为您创建了默认数据源,所以我没有为集成测试定义任何内容。我想我应该使用application.properties来定义我的数据源连接值,但是我不确定什么是处理这个问题的最佳方法。

我有两份文件:

src/main/resources/application.properties

代码语言:javascript
复制
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/main/resources/application-test.properties

代码语言:javascript
复制
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文件以使用:

代码语言:javascript
复制
task setTestEnv {
    run { systemProperty "spring.profiles.active", "test" }
}

但是,当我运行gradle干净构建setTestEnv测试时,我得到的错误似乎表明测试试图连接到实际的Postgresql数据库:

代码语言:javascript
复制
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中设置默认的==“测试”.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-19 03:47:16

请参阅Spring文档的21.3一节。本节介绍如何定义使用application-{profile}.properties.格式的配置文件特定属性文件。这可以帮助您在每个配置文件的基础上隔离属性。

票数 17
EN

Stack Overflow用户

发布于 2015-03-20 06:18:59

您可以用以下方式注释您的测试,添加@ActiveProfiles:

代码语言:javascript
复制
@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中启动配置

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25370696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档