web-dev-qa-db-ja.com

Spring Boot-クラスパスリソースで定義された「dataSource」という名前のBeanの作成エラー

Spring Boot Webアプリケーションがあります。 RESTfulアプローチが中心です。すべての構成が適切に配置されているように見えますが、何らかの理由でMainControllerが要求を処理できません。 404エラーが発生します。修正方法

@Controller
public class MainController {

    @Autowired
    ParserService parserService;

    @RequestMapping(value="/", method= RequestMethod.GET)
    public @ResponseBody String displayStartPage(){
        return "{hello}";
    }
}

アプリケーション

@Configuration
@ComponentScan(basePackages = "")
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer{
        public static void main(final String[] args) {
            SpringApplication.run(Application.class, args);
        }

        @Override
        protected final SpringApplicationBuilder configure(final SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
}

ParserController

@RestController
public class ParserController {

    @Autowired
    private ParserService parserService;

    @Autowired
    private RecordDao recordDao;

 private static final Logger LOG = Logger.getLogger(ParserController.class);

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public @ResponseBody String fileUploadPage(
   }
}

UPDATE

MySQLはSpringで初期化できないようです。..

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; 

nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; 

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; 

nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; 

nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

UPDATE2

application.properties

spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/logparser
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.database = MYSQL
spring.jpa.show-sql = true

# Hibernate
hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql: true
hibernate.hbm2ddl.auto: update
entitymanager.packagesToScan: /

UPDATE4

@RequestMappingが設定されていても、ライトコントローラーが応答しないようです。なぜでしょうか?

PS。 Mavenのライフサイクルtestを実行すると発生します。 IntelliJでdegubモードで実行している場合、エラーは出力されません。

UPDATE5

また、チュートリアルで説明されているように、このDAOを使用します。

public interface RecordDao extends CrudRepository<Record, Long> {
}

http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/

UPDATE6

アプリケーションのプロパティを変更しました。そして、すべての組み合わせを試しましたが、機能しません。 ;(

Maven出力:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running IntegrationTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.365 sec <<< FAILURE! - in IntegrationTest
saveParsedRecordsToDatabase(IntegrationTest)  Time elapsed: 2.01 sec  <<< ERROR!
Java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.Java:99)
    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.Java:101)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.Java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.Java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.Java:331)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.Java:213)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.Java:290)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.Java:292)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:233)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.Java:87)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.Java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.Java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.Java:176)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.Java:264)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.Java:153)
    at org.Apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.Java:124)
    at org.Apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.Java:200)
    at org.Apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.Java:153)
    at org.Apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.Java:103)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
52
J.Olufsen

最初の問題は自動設定にあるようです。

データソースが必要ない場合は、単純に自動設定プロセスから削除します。

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
87
Jason Warner

データソースを設定するためにSpring Bootに十分なデータを渡していないことの外観から

作成/既存のapplication.propertiesに以下を追加します

spring.datasource.driverClassName=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

各プロパティに値を必ず追加してください。

17
Alan Barrows

MySQL JDBCドライバーを忘れたのかもしれません。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.34</version>
</dependency>
10
gcgan

Spring JPA、Hibernate、Mysql、またはjacksonのようなpom.xmlの依存関係の一部が原因であることがわかりました。したがって、pom.xmlで依存関係が欠落していないことを確認し、バージョンの互換性を確認してください。

<!-- Jpa and hibernate -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.3.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-Java</artifactId>
            <version>5.1.6</version>
        </dependency>
5
Gaurav Anand

hibernate.*プロパティは役に立たないので、spring.jpa.*プロパティにする必要があります。 spring.jpa.*プロパティを使用して既に設定されているものをオーバーライドしようとしていることは言うまでもありません。 (各プロパティの説明については、Spring Boot リファレンスガイド を読むことを強くお勧めします。

spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
spring.jpa.show-sql = true

# Hibernate
spring.jpa.hibernate.ddl-auto=update

また、スキャンするパッケージは、Applicationクラスの基本パッケージに基づいて自動的に検出されます。他の何かを指定する場合は、@EntityScan注釈を使用します。また、クラスパス全体をスキャンしてパフォーマンスに深刻な影響を与えるため、最上位のパッケージを指定するのは賢明ではありません。

4
M. Deinum

この問題は、テストの実行中に発生します。依存関係を追加

testCompile group: 'com.h2database', name: 'h2', version: '1.4.197' 

テストソースの下にフォルダーリソースを追加し、ファイルbootstrap.ymlを追加してコンテンツを提供します。

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:h2:mem:TEST
    driver-class-name: org.h2.Driver
    username: username
    password: password
    hikari:
      idle-timeout: 10000

これにより、データソースがセットアップされます。

3
Kumar Abhishek

コード行の下に変更する

spring.datasource.driverClassName

spring.datasource.driver-class-name
3
user6536363

Spring Bootアプリでapplication.propertiesを使用している場合は、application.propertiesに次の行を追加するだけで機能します:
spring.datasource.url:jdbc:mysql:// google /?cloudSqlInstance =&socketFactory = com.google.cloud.sql.mysql.SocketFactory&user = ****&password = ****

2

Build.gradleのruntime groupにデータベース依存関係があることを確認します

runtime group: 'com.h2database', name: 'h2', version: '1.4.194'

または、Mavenを使用している場合、スコープをtestからruntimeに変更します

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.194</version>
    <scope>runtime</scope>
</dependency>
2
Alexander P.

Application.propertiesで必要なすべてのデータソースプロパティを指定した後でも、この問題に直面していました。その後、SpringブートのApplication.Javaとは異なるパッケージ階層にあり、プロパティがデータソースオブジェクトに適用されないため、プロパティ構成クラスがSpringブートによってスキャンされないことに気付きました。プロパティ設定クラスのパッケージ名を変更すると、機能し始めました。

1
Mahesh Japkar

私の場合、これはorg.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSourceが修飾子なしの自動配線フィールドであり、修飾名を持つ複数のデータソースを使用しているために発生していました。私のdataSource Bean構成の1つで@Primaryを任意に使用して、この問題を解決しました。

@Primary
@Bean(name="oneOfManyDataSources")
public DataSource dataSource() { ... }

AbstractRoutingDataSourceを実装し、修飾子が不要なため自動構成が機能することを望んでいると思います。必要に応じてBeanが適切なDataSourceに解決できる単一のデータソースがあれば十分です。そうすれば、単一のDataSourceしか持たないため、@ Primaryまたは@Qualifierアノテーションはまったく必要ありません。

いずれにせよ、私のBeanは修飾子でDataSourceを指定するため、私のソリューションは機能しました。また、単一のプライマリDataSourceがあるため、JPAの自動構成機能は満足です。これを「正しい」方法として推奨することは決してありませんが、私の場合、問題を迅速に解決し、目立った方法でアプリケーションの動作を阻止しませんでした。いつか、AbstractRoutingDataSourceを実装し、特定のDataSourceを必要とするすべてのBeanをリファクタリングして、おそらくそれがすてきなソリューションになることを願っています。

1
AdrianVeidt

元の質問とは直接関係ありませんが、これは誰かに役立つでしょう。このエラーは、単純な2つのプロジェクト構造で発生しました。 1つのプロジェクトは、Spring jdbcを使用していくつかのデータベース操作を処理し(Aを使用)、もう1つのプロジェクトはjdbc操作をまったく使用しませんでした(Bを使用)。しかし、サービスBを開始しているときにこのエラーが発生しました。データソースを適切に初期化する必要があると言います。

私が理解したように、私は2つのモジュールの親pomにこの依存関係を追加しました

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

これにより、プロジェクトBのjdbc依存関係も初期化されました。だから、私はそれをAのpomに移しました、すべてがうまくいきました。

これが誰かを助けることを願っています

1
Isuru Ranaweera

私の場合、application.propertiesファイル内の次のものを無視しました。

#休止状態

#spring.jpa.hibernate.ddl-auto = update

わたしにはできる....

0
ram kumar

アプリケーションをjarとして実行していますか? (Java -jar xxxx.jar)

その場合、そのjarにapplication.propertiesが保存されていますか?

いいえの場合、その理由を理解してみてください:

  • Jarに自動的にパッケージ化するために、ファイルはsrc/main/resources/application.propertiesにあります。
  • Pom.xmlのmavenプラグインも構成できます
0
Remy Mellet

親のSpring Boot Dependencyを変更することで問題を解決しました。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
</parent>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.6.RELEASE</version>
</parent>

詳細については、リリースノートをご覧ください。 Spring Boot 2.1.0リリースノート

0
Guchelkaben

あなたは試してみることができます:TomcatのVMオプションにこれを追加してください

-DdevBaseDir="C:\Your_Project_Dir_Path"
0
kazim

私は数日間同じ問題に直面していましたが、最終的に問題はコードではなく、問題はmavenから来ます、あなたは彼があなたのハードドライブ「C:\ Users\username.m2 \」からダウンロードしたすべてのファイルを削除する必要がありますリポジトリ」、プロジェクトの別の更新Mavenを実行すると、問題が修正されます。

0

この種のエラーが発生した場合、テストケースでBeanデータソースを作成できません。

いくつかの理由が原因である可能性があります。

  1. データソースはありません。データソース、h2インメモリデータソースなどを作成する必要があります。または、exclude={datasource··}などの方法を選択できます。
  2. MySQLのようなデータソースがありますが、まだ機能しません。クラスAutoConfigureTestDatabaseが原因でした。あいまいさを引き起こす可能性のあるデータソースを選択します。

解決策:@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)を追加して、デフォルトのデータソースを置き換えないようにします。

0
tyrantqiao