更新:
私は今いくつかのことに気づきました。 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から実行すると、上で説明したように動作し始めます。
メインデータソースを次のように設定できます。ここでは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およびテストデータソースをそこに設定することが可能です。
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>
次のステートメントを追加するだけです。
@TestPropertySource("classpath:application.properties")
テストクラスに。 application.propertiesファイルがsrc/test/resourcesの下にあると仮定しています
これが私の実例です。
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:application.properties")
public class TestTwitterFeedRoute extends CamelTestSupport {
//...
}
これは私のために働く:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class,
initializers = ConfigFileApplicationContextInitializer.class)
public class SomeTestClass {
...
}
@ConfigurationPropertiesアノテーションが、構成ファイル(application.config)で使用しているものと同じプレフィックスに設定されていることを確認してください
Eclipseを使用している場合は、プロジェクトのビルドリソースを確認することをお勧めします。 (Rclickプロジェクト->プロパティ->ビルドパス)application.propertiesファイルが取得されず、ビルドリソースに追加するだけでした。