2017-11-08 13 views
0

私は春バッチアプリケーションのためのPoCをやっています。これまでのところ、すべてが正常に動作しますが、私はDatasourceをピックアップしてテスト(複数可)を取得することはできません、それは常にで失敗します。春バッチテストケースは春のプロファイルを無視します

... 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 42 more 

これは私のapplication.ymlファイルです:

server: 
    port: ${port:9080} 
spring: 
    http: 
    encoding: 
     charset: UTF-8 
     enabled: true 
     force: true 
    output: 
     ansi: 
     enabled: detect 
    profiles: # default, development, production 
    active: default, development 
--- 
spring: 
    datasource: 
    driver-class-name: org.h2.Driver 
    sql-script-encoding: UTF-8 
    url: jdbc:h2:mem:JavaSpringBootBatch;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MySQL 
    username: sa 
    password: 
    h2: 
    console: 
     enabled: true 
     path: /h2-console 
    profiles: development 
--- 
server: 
    port: ${port:80} 
spring: 
    datasource: 
    initialize: false 
    # ... 
    profiles: production 

.. .AND私のテストクラス(ES):

@Configuration 
@Import(AppConfig.class) // This eventually "imports" the app's config 
public class TestConfig { 
    @Bean 
    public JobLauncherTestUtils jobLauncherTestUtils() { 
    return new JobLauncherTestUtils(); 
    } 
} 

@ActiveProfiles("development") 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = TestConfig.class) 
//@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class }) 
public class PlayerItemBatchTest { 
    @Autowired 
    private JobLauncherTestUtils jobLauncherTestUtils; 

    @Test 
    public void readProcessWriteBatchProcess() throws Exception { 
    final JobExecution jobExecution = jobLauncherTestUtils.launchJob(); 
    Assertions.assertThat(jobLauncherTestUtils.launchJob().getStatus()).isEqualTo(BatchStatus.COMPLETED); 
    } 
} 

@Configuration 
public class BatchConfig { // Included with AppConfig 
    private final DataSource dataSource; 

    @Autowired 
    public BatchConfig(final DataSource dataSource) { 
    this.dataSource = dataSource; 
    } 

    // ... 
} 

私は自分のアプリケーションを起動すると、私ははっきりdatasource私はYAMLから私のdevelopmentプロファイルを持っているすべてのもの(すべての設定)を持っていることがわかります。テストケースを実行しようとすると、「データソースを見つけることができません」というエラーが表示されます。

+1

テストクラスに '@ EnableConfigurationProperties'アノテーションを追加しようとしましたか? –

+0

@AlexSaunin ...ちょうどそれをしましたが、何も違いはありません。同じタイプのエラーメッセージ: 'タイプ 'javax.sql.DataSource'の利用可能なBeanがありません。 –

答えて

1

@EnableConfigurationPropertiesの使用以外に、 test/resourcesに.ymlファイルを作成し、@ TestConfigurationアノテーションを使用してtest/srcにTestConfig.javaを作成してみます。

+0

いいえ、それもできませんでした。一方、 'main/resources'の中のYAMLファイルは、' test/resources'がなければピックアップされるべきです。私は "プロファイル"を使用しているので、これは心配するべきではありません。 –

+0

私はこれに戻る時間があり、あなたは私にヒントを与えました: '@ TestConfiguration'を使う - 私は最初にそれを使うことができませんでした。私は 'org.springframework.batch:spring-batch-test'を持っていましたが、' org.springframework.boot:spring-boot-starter-test'はありませんでした。私は最初のものが十分だと思ったが、Springは後で「テストインフラストラクチャー」(何らかの名前を付ける)を開始する必要があるように見える。あなたがその情報を少し更新すれば、私はあなたの答えを受け入れることができます。 –

0

これは依存関係の設定問題のようです。組込みデータベースを自動構成するには、spring-jdbcに依存する必要があります。

<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 

Here、それはあなたを助けることができるドキュメントです。

+0

私はそれが 'spring-boot-starter-batch'の過渡的な依存性のために持っています。 –

+0

spring-boot-starter-batchから過渡的な依存関係を除外して試してみましたが、その依存関係を追加しましたか? –

+0

はい...でも、それは違うこともしませんでした。これは、通常、アプリケーションを起動するときに問題なく動作することに注意してください。 –

1

春ブーツと合わせて春のバッチを使用した場合通常、私はorg.springframework.batch.core.configuration.annotation.BatchConfigurer の明示的な設定を行います。これにより、より良い制御が得られます。Spring Batch with Spring Boot Integration testing

関連する問題