web-dev-qa-db-ja.com

Mavenテストの使用時にSpring Bootアプリケーションがapplication.propertiesファイルを読み取らない

更新:

私は今いくつかのことに気づきました。 DBプロパティがロードされていることを/ envパス(Daveに感謝)を介して確認したため、application.propertiesファイルが適切にロードされています。問題は、Spring Boot mavenプラグインを使用して実行すると、dataSourceの初期化に失敗することです。

mvn spring-boot:run

これにより、他のBeanを初期化できないため、アプリケーションでエラーが発生します。奇妙なことに、Eclipseで問題なく動作します。

JdbcTemplateを拡張するDataServiceというクラスがあります。 DataServiceコンストラクターで、Datasourceを注入します。

@Component
public class DataService extends JdbcTemplate  {

    @Autowired
    public DataService(DataSource dataSource){
        super(dataSource);
    }
    ...more custom methods
}

このDataServiceクラスを他のBeanで使用して、DB操作を実行します。データソースはapplication.propertiesファイルで定義されています

spring.datasource.url: jdbc:h2:tcp://localhost/~/testdb2
spring.datasource.driverClassName: org.h2.Driver

これは私のApplication.Javaクラスです

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableWebMvcSecurity
@EnableAsync
@EnableScheduling
public class Application {

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

MavenからjUnitテストを実行しようとしたときに最初にこれを実現しました

mavent test

Junitテストケースの実行方法に関係していると思いましたが、mavenを使用してアプリケーションを簡単に実行しようとしたときにも発生しています。

私のJUnit4テストクラスは次のように定義されています:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={Application.class})
@WebAppConfiguration
public class QuestionRepositoryIntegrationTests {
     ...methods
}

Spring Bootのハウツードキュメントの例を使用しました( http://projects.spring.io/spring-boot/docs/docs/howto.html

EclipseからこのJUnitクラスを実行すると、正常に機能します。 Mavenから実行すると、上で説明したように動作し始めます。

25
John F.

メインデータソースを次のように設定できます。ここではmysqlを使用しています。ただし、独自のデータソースを使用できます。 application.properties inside src/main/resourcesで以下を設定できます

spring.datasource.url = jdbc:mysql://localhost:3306/dsm
spring.datasource.username = root
spring.datasource.password = admin123
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

アプリケーション内でテストを実行するには、同じデータソースを使用するか、application-test.properties inside src/test/resourcesおよびテストデータソースをそこに設定することが可能です。

5
nijogeorgep

Pomのbuildセクションで<resources>タグを定義して、リソースディレクトリのパスをapplication.propertiesに設定してください:

<build>
        <resources>
            <resource>
                <directory>resources</directory>
                <targetPath>${project.build.outputDirectory}</targetPath>
                <includes>
                    <include>application.properties</include>
                </includes>
            </resource>
        </resources>
</build>
5
Antonino Barila

次のステートメントを追加するだけです。

@TestPropertySource("classpath:application.properties")

テストクラスに。 application.propertiesファイルがsrc/test/resourcesの下にあると仮定しています

これが私の実例です。

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:application.properties")
public class TestTwitterFeedRoute extends CamelTestSupport {
//...
}
1

これは私のために働く:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class, 
    initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
    ...
}
0
luboskrnac

@ConfigurationPropertiesアノテーションが、構成ファイル(application.config)で使用しているものと同じプレフィックスに設定されていることを確認してください

0
obesechicken13

Eclipseを使用している場合は、プロジェクトのビルドリソースを確認することをお勧めします。 (Rclickプロジェクト->プロパティ->ビルドパス)application.propertiesファイルが取得されず、ビルドリソースに追加するだけでした。

0
VDevD