質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Java

    13499questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Oracle

    592questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

  • Spring Boot

    467questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • Gradle

    115questions

    Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます

[Spring Boot]起動時に「DAOが見つからない」エラーが出る

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,970

yosiaking

score 2

お世話になります。Spring Bootの開発でつまづいてしまい、ご質問させてください。
現在、Spring BootとDomaでDB操作が可能なAPI開発の環境構築を行っております。
ウェブサイトや参考書を参考にして環境構築を行い、いざ起動を行ったところ、起動をすることができない状態です。以下のようなエラーが発生しているのですが、どうにもこうにも八方塞がりでして、アドバイスをいただけませんでしょうか。。。

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2018-01-03 16:34:02.107 ERROR 6106 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field testDao in com.test.controller.TestController required a bean of type 'com.test.domain.dao.TestDao' that could not be found.


Action:

Consider defining a bean of type 'com.test.domain.dao.TestDao' in your configuration.


作成したファイルのパッケージ構成は以下のようになっております。

src/main/java
L com.test
   TutorialAppApplication.java
L com.test.controller
   TestController.java
L com.test.domain.dao
   TestDao.java
L com.test.domain.entity
   SampleUser.java

src/main/resource
L application.properties 

また、それぞれのファイルの中身は以下のようになっております。

TutorialAppApplication.java

package com.test;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TutorialAppApplication {

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

TestController.java

package com.test.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.test.domain.dao.TestDao;
import com.test.domain.entity.SampleUser;

@Controller
@RequestMapping("/test")
public class TestController {

    @Autowired
    private TestDao testDao;

    @GetMapping("/sampleUsers")
    public String index() {

        System.out.println("test");

        List<SampleUser> sampleUsers = testDao.findAll();    
        StringBuilder stringBuilder = new StringBuilder();
        for(SampleUser sampleUser : sampleUsers) {
            stringBuilder.append(sampleUser.getId())
                        .append(":")
                        .append(sampleUser.getName())
                        .append("、");    
        }
        return stringBuilder.toString();
    }

}


TestDao.java

package com.test.domain.dao;
import java.util.ArrayList;

import org.seasar.doma.Dao;
import org.seasar.doma.Select;
import org.seasar.doma.boot.ConfigAutowireable;

import com.test.domain.entity.SampleUser;

@Dao
@ConfigAutowireable
public interface TestDao {

    @Select
    ArrayList<SampleUser> findAll();

}

SampleUser.java

package com.test.domain.entity;

import org.seasar.doma.Column;
import org.seasar.doma.Entity;

import lombok.Data;

@Data
@Entity
public class SampleUser {

    @Column(name = "id")
    private String id;

    @Column(name = "name")
    private String name;

}

application.properties 

# DB
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:ORCLPDB1.localdomain
spring.datasource.username=test_user
spring.datasource.password=test
spring.database.driverClassName=oracle.jdbc.driver.OracleDriver

# DOMA
doma.dialect=ORACLE
doma.naming=SNAKE_LOWER_CASE

build.gradle

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
        mavenCentral()
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compileOnly('org.projectlombok:lombok')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('org.seasar.doma.boot:doma-spring-boot-starter:1.0.2')
    compile('org.springframework.boot:spring-boot-starter-jdbc')
}

ちなみに、Javaのバージョンは【1.8】になります。
お手数をおかけしますが、アドバイスをいただけますと幸いです。
どうぞよろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

多分ComponentScan問題

 追記

もう一つ原因みつけた・

Gradle を使ったビルド

apply plugin: 'java'

// JavaクラスとSQLファイルの出力先ディレクトリを同じにする
processResources.destinationDir = compileJava.destinationDir
// コンパイルより前にSQLファイルを出力先ディレクトリにコピーするために依存関係を逆転する
compileJava.dependsOn processResources

repositories {
    mavenCentral()
    maven {url 'https://oss.sonatype.org/content/repositories/snapshots/'}
}

dependencies {
    compile "org.seasar.doma:doma:2.19.0"
}

やっぱりたりてないじゃん・・・

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/03 17:55

    >asahina1979さん

    ご回答をありがとうございます!こちら、試してみたのですがやはりダメのようでした。。
    ・ディレクトリ構成自体は現状のままで問題なさそう
    → Applicationクラス は、他のパッケージよりも上の階層にある
    ・canBasePackagesでdaoのパッケージを指定してもダメ

    のような状況です。もし、他に考えられる理由を思いつかれましたらアドバイスをいただけますと幸いですm( _ _)m

    キャンセル

  • 2018/01/03 19:01

    だとすると参考サイトで作ってるものを無視してないかい?
    どこの参考サイトかはしらないが

    キャンセル

  • 2018/01/08 14:07

    ご返信が遅くなり申し訳ございません。
    ありがとうございます!!!
    完全に見落としておりました・・・!教えていただいた方法で、うまくビルドできました!
    (あと、自動的に作られるもんだと思い、SQLファイルの配置もしておりませんでした。。)

    ありがとうございました。

    キャンセル

0

TestDaoは、interfaceの名前ですので、実体を探しても見つかりません。
つImpl

追記
Domaでは、自動的に実装されたClassの名前は、<Inteface名> + Implとなります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/05 08:34

    doma は自動的に実装してくれマス。
    http://doma.readthedocs.io/ja/stable/dao/

    キャンセル

  • 2018/01/05 08:45 編集

    実体の名前は、サフィックスにImplが付くと書いてありますが…

    キャンセル

  • 2018/01/08 14:14

    こちらもありがとうございます!
    実体として、SQLファイルを配置したところうまくいきました・・・!

    お二人とも、適切なアドバイスをありがとうございます!
    先にコメントくださっていたasahina1979さんをベストアンサーとさせていただきまして、hichonさんは高評価とさせていただきます。

    キャンセル

0

コンパイルが通っていないためにDomaによるコードの生成が成功していないように見受けられます。

まずはgradle buildした時に生成される下記のディレクトリにTestDaoImpl.javaTestDaoImpl.classが生成されていることを確認してみてください。これらのファイルが生成されていなければコンパイルに失敗していると言えます。

build/classes/java/main/com/test/domain/dao

私が気づいた問題点は以下の3つです。

  1. asahina1979さんが指摘されているようにbuild.gradleにいくつか記述が不足している
  2. TestDao#findAllに対応するSQLファイルが存在していない
  3. TestDao#findAllの戻り値の型がjava.util.ArrayListだがDomaとしてはjava.util.Listが正しい

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    spring bootで静的ファイルにアクセスする方法

    Spring bootでシステム構築をしているのですが、cssやjs以外の静的ファイルのアクセス方法が分からず困っています。 デプロイ方法:jar 具体的には、src/

  • 解決済

    spring+thimeleaf+tomcatでPOST送信が文字化け

    Spring boot + thimeleaf + tomcatでWEBアプリ開発を行っております。 <使用ミドルウェア>  spring boot:1.3.2  thi

  • 解決済

    Spring起動→サーバーアクセス反応なし

    ※フォルダ構成です。 springをApplicationのメインメッソッドで実行したのですがhttp://localhost:8080/roomsにアクセスしても404

  • 解決済

    springboot mappingエラー

    User package com.example.konkatsu.domain; import javax.persistence.Entity; import javax

  • 解決済

    ThymeleafでPOSTされた値を画面に出力したい

    こんにちは、SpringBoot、ThymeleafをつかってHTMLでつくられた固定値の入ったテーブルを表示し、 空白のカラムなどを追加してデータの変更を受付けsubmitするこ

  • 受付中

    Spring Boot 認証

    前提・実現したいこと SpringBootでbasic認証をベースに 独自の認証に変更したいです。 発生している問題 httpBasic()を使用せずに、 BasicAuthe

  • 解決済

    Spring Boot 実行可能jarデプロイについて

    前提・実現したいこと Spring Bootの実行可能jarファイルをCentOS7でApacheが動いている環境に対してのデプロイについての質問です。 実際にjarをサーバー上で

  • 解決済

    Gradleでwarが作成できない

    SpringBootを勉強しようと思い、 まず最初に下記サイトを参考に環境を作成し、Hello, world!が表示されることを確認しました。 https://www.marine

同じタグがついた質問を見る

  • Java

    13499questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Oracle

    592questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

  • Spring Boot

    467questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

  • Gradle

    115questions

    Gradleは、ビルド自動化ツールです。 ソフトウェアパッケージやドキュメント、 または実際に何か他の種類のプロジェクトの構築、テスト、公開、展開などを自動化が出来ます