2016-06-24 2 views
1

나는 두 오라클 데이터 소스와 함께 봄 부팅 응용 프로그램을 쓰고 있어요 - 여기 내 application.yml 파일입니다 : 내가 보이는 DBConfiguration 클래스를했습니다봄 부팅 여러 프로필 데이터 소스

spring: 
    profiles: test 
datasource: 
    app2: 
     url: jdbc:oracle:thin:@//rap-vin:1521/APP221 
     username: user2 
     password: pwd2 
     driver-class-name: oracle.jdbc.OracleDriver 
    app: 
     url: jdbc:oracle:thin:@//eap10-san:1522/APP22 
     username: user 
     password: pwd 
     driver-class-name: oracle.jdbc.OracleDriver 
application: 
    app: 
     url: example.com/app 

같은 :

@Configuration 
public class DBConfiguration { 

    @Bean 
    @Primary 
    @ConfigurationProperties(prefix = "datasource.app") 
    public DataSource appDataSource() { 
     DataSource ds = DataSourceBuilder.create().build(); 
     return ds; 
    } 

    @Bean 
    @ConfigurationProperties(prefix = "datasource.app2") 
    public DataSource app2DataSource() { 
     DataSource ds = DataSourceBuilder.create().build(); 
     return ds; 
    } 
} 

그리고 내가 테스트 클래스했습니다 :

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = DBConfiguration.class) 
public class Test { 

    private JdbcTemplate jdbcTemplateAPP; 
    private JdbcTemplate jdbcTemplateAPP2; 
    //private RestTemplate restTemplate; 


    @Autowired 
    public void setDataSource(final DataSource appDataSource, 
       @Qualifier("app2DataSource") final DataSource app2DataSource) { 
      this.jdbcTemplateAPP = new JdbcTemplate(appDataSource); 
      this.jdbcTemplateAPP2 = new JdbcTemplate(app2DataSource); 
     } 

    @Test 
    public void testJob() throws Exception { 
     int count= jdbcTemplateAPP.queryForObject("select count(*) from parm", int.class); 

     Assert.assertTrue(count==1); 
    } 
} 

을하지만 테스트를 실행할 때마다 나는 dB의 URL을 등을받을 없는. 내가 뭘 잘못하고 있니? 또한 어떻게이 application.app URL에 읽어야이 당신의 도움을 주셔서 감사합니다 - (참고로 나는 봄 안돼서) 오류 :

java.sql.SQLException: The url cannot be null 
    at java.sql.DriverManager.getConnection(DriverManager.java:649) ~[na:1.8.0_77] 
    at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[na:1.8.0_77] 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:305) ~[tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200) ~[tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:708) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:642) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:464) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:141) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102) [tomcat-jdbc-8.0.33.jar:na] 
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126) [tomcat-jdbc-8.0.33.jar:na] 
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:390) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:470) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:480) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:490) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:496) [spring-jdbc-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at com.tgt.trans.intl.batchtest.mib.tests.MIB022Test.testJob(MIB022Test.java:35) [test-classes/:na] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_77] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_77] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_77] 
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_77] 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) [junit-4.12.jar:4.12] 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12] 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) [junit-4.12.jar:4.12] 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12] 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) [spring-test-4.2.6.RELEASE.jar:4.2.6.RELEASE] 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:670) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:na] 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:na] 

답변

0

먼저,

유 프로필 "시험을 활성화 않았다 "VM 인수 또는 어떻게 든? yml은 프로필을 정의하는 것 같지만 여전히 활성화되지 않았습니다.

당신은 테스트 클래스에 당신이

spring: 
    profiles: 
    active: test 

아래 작성하거나 VM에

-Dspring.profiles.active=test 

초을이를 넣어야 YML 에서 활성 프로파일 "테스트",

을 만들고 싶어하는 경우 appDataSource 및 app2DataSource가 모두 appDataSource에 의해 삽입됩니다.

아마도 당신이하지 의도을 그래서 당신은 당신이 application.app.url처럼 (YML의 콘텐츠를 사용하려면

@Qualifier("app2DataSource") final DataSource app2DataSource 
마지막

아래 작성해야 app2DataSource 에 app2DataSource를 주입하려면이 ) UR 테스트 클래스에 통해 UR 클래스에

@ConfigurationProperties(prefix = "application.app") 

를 넣어이

같은 변수를 정의

@Configuration 
public class DBConfiguration { 

... 

에 :

private String url; 
+0

감사 - 당신이 응용 프로그램을 사용하려는 경우 "말할 때 무엇을 의미합니까 - 나는 app2datasource을 포함하는 내 게시물을 수정 .app in ur test "- 어떤 수업입니까? 나는 그것을 만들어야합니까? – user2666282

+0

"테스트 클래스에서 yml의 내용을 사용하려면" 이고 대답은 [여기]입니다 (http://docs.spring.io/spring-boot/docs/current/reference/html/boot- – Javvano

+0

내가보기에는 오류가 있지만 데이터 소스 URL을 읽는 중입니다. 응용 프로그램 URL을 사용하지 않고 있습니다. – user2666282

0

은 편집에 의해 작업 얻었다

@SpringBootApplication 
public class DBConfiguration { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
...