お世話になります。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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
多分ComponentScan問題
追記
もう一つ原因みつけた・
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"
}
やっぱりたりてないじゃん・・・
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
TestDaoは、interfaceの名前ですので、実体を探しても見つかりません。
つImpl
追記
Domaでは、自動的に実装されたClassの名前は、<Inteface名> + Implとなります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
コンパイルが通っていないためにDomaによるコードの生成が成功していないように見受けられます。
まずはgradle build
した時に生成される下記のディレクトリにTestDaoImpl.java
やTestDaoImpl.class
が生成されていることを確認してみてください。これらのファイルが生成されていなければコンパイルに失敗していると言えます。
build/classes/java/main/com/test/domain/dao
私が気づいた問題点は以下の3つです。
- asahina1979さんが指摘されているように
build.gradle
にいくつか記述が不足している TestDao#findAll
に対応するSQLファイルが存在していないTestDao#findAll
の戻り値の型がjava.util.ArrayList
だがDomaとしてはjava.util.List
が正しい
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/01/03 17:55
ご回答をありがとうございます!こちら、試してみたのですがやはりダメのようでした。。
・ディレクトリ構成自体は現状のままで問題なさそう
→ Applicationクラス は、他のパッケージよりも上の階層にある
・canBasePackagesでdaoのパッケージを指定してもダメ
のような状況です。もし、他に考えられる理由を思いつかれましたらアドバイスをいただけますと幸いですm( _ _)m
2018/01/03 19:01
どこの参考サイトかはしらないが
2018/01/08 14:07
ありがとうございます!!!
完全に見落としておりました・・・!教えていただいた方法で、うまくビルドできました!
(あと、自動的に作られるもんだと思い、SQLファイルの配置もしておりませんでした。。)
ありがとうございました。