APPLICATION FAILED TO START


事象 : required a bean of type HogeDao that could not be found.

  • 環境
    • Windows10 Pro バージョン1909
    • Spring Tool Suite 4 Version: 4.7.2.RELEASE
    • spring-boot-starter-web 2.0.4.RELEASE
    • Gradle 4.3
    • Doma 2.19.3

[Project Explorer] > プロジェクト選択 > Shift + Alt + D > B(Debug Spring Boot App)でエラー

2021-03-05 14:54:21.791 ERROR 20780 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Field hogeDao in com.example.service.HogeServiceImpl required a bean of type 'com.example.dao.HogeDao' that could not be found.


Action:

Consider defining a bean of type 'com.example.dao.HogeDao' in your configuration.

原因 : 実行時に必要なjarが設定されていないから

DomaはDtoのインターフェースから実装クラスを生成するそうです。
その生成される実装クラスをインジェクションできるようにアノテーションをつける場合は@AnnotateWith(org.seasar.doma.AnnotateWith)などのDomaのアノテーションを使って設定を行います。
そのため、実行する際にはDomaが必要になるようです。

参考 : Spring BootでNo qualifying bean of typeが出た時の原因と対応 - Qiita

build.gradleを見ると・・・実行時に設定している・・・

build.gradle
...省略...
    annotationProcessor "org.seasar.doma:doma:${domaVersion}"
...省略...

じゃ、EclipseとかSTSでデバックする時はどうすれば・・・

Eclipse
プロジェクトの「Properties」-「Java Compiler」-「Annotation Processing」の項目でオプションを登録します。
注釈処理 — Doma 2.0 ドキュメント

対応 : doma.jarを

  1. [Project Explorer] > プロジェクト選択 > Alt + Enterで設定ダイアログ表示
  2. [Java Compiler] > [Annotation Processing] > [Enable project specific settings] > ON
  3. [Factory Path] > [Add External JARs...]でdoma.jarを指定 > [Apply and Close]ボタンでダイアログ閉じて再ビルド
    • 今回はGradleを使っていたのでローカルの.gradleフォルダにあるdoma.jarを使った(ダウンロードしないというセコさ)
    • Maven Repository: org.seasar.doma » domaからダウンロードもできる
  4. 再度実行

事象 : Web server failed to start. Port 8080 was already in use.

  • 環境
    • macOS Bit Sur バージョン11.1
    • Eclipse IDE for Enterprise Java Developers Version: 2020-12 (4.18.0)
2021-03-04 20:55:43.295 ERROR 34134 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Web server failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

原因 : 起動しっぱなしのTomcatがいるから

あっ、止めるの忘れてた・・・・そしてそのまま起動した

対応 : 動かしっぱなしのTomcatを止めてから起動する

事象 : Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

  • 環境
    • macOS Bit Sur バージョン11.1
    • Eclipse IDE for Enterprise Java Developers Version: 2020-12 (4.18.0)

Spring Initializr - spring.ioからSpring BootのプロジェクトをダウンロードしてEclipseにいんぽーとして、さぁとりあえず実行!したらできなかった。

2021-03-04 19:44:08.805 ERROR 33968 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

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

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

原因 : MyBatisを設定しないで使おうとするから

そういえば・・・後で使うと思ってMyBatisを依存関係に入れていた。

pom.xml
<!--省略-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.4</version>
    </dependency>
<!--省略-->

対応 : DBの接続情報を設定するか依存関係を消す

今回は、pom.xmlでMyBatisの部分をコメントアウトして、使う時にapplication.propertiesなどに設定することにした。
コメントアウトした後は忘れずMavenビルドしてもう一度実行する。


  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.8.RELEASE)

2021-03-04 20:57:03.258  INFO 34146 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication on ponMac.local with PID 34146 (/Users/mananakai/tryJava/springBoot/target/classes started by mananakai in /Users/mananakai/tryJava/springBoot)
2021-03-04 20:57:03.260  INFO 34146 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to default profiles: default
2021-03-04 20:57:03.988  INFO 34146 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2021-03-04 20:57:03.996  INFO 34146 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-03-04 20:57:03.996  INFO 34146 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
2021-03-04 20:57:04.048  INFO 34146 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-03-04 20:57:04.048  INFO 34146 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 744 ms
2021-03-04 20:57:04.201  INFO 34146 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-03-04 20:57:04.309  WARN 34146 --- [           main] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates or check your Thymeleaf configuration)
2021-03-04 20:57:04.376  INFO 34146 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-03-04 20:57:04.386  INFO 34146 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 6.402 seconds (JVM running for 6.668)