| この記事の要点 |
|---|
|
@SpringBootApplication とは
Spring Boot アプリのメインクラスに付ける、3 つの主要アノテーションをまとめたショートカット:
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
// これは次と同等
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class MyApp { ... }
3 つの内訳
| アノテーション | 役割 |
|---|---|
@Configuration | JavaConfig クラス(@Bean メソッドが使える) |
@EnableAutoConfiguration | クラスパスや既存 Bean から自動的に必要な Bean を構成 |
@ComponentScan | このクラスのパッケージ以下をスキャンして @Component を自動登録 |
自動構成の仕組み
Spring Boot は @EnableAutoConfiguration によって、starter 依存と classpath から「あったら欲しい Bean」を自動構成します:
spring-boot-starter-web→ 内蔵 Tomcat + DispatcherServlet + Jacksonspring-boot-starter-data-jpa→ DataSource + EntityManager + Repository スキャンspring-boot-starter-security→ Spring Security の標準設定- クラスパスに H2 → 自動的にインメモリ DB として接続
有効な自動構成を確認
$ java -jar app.jar --debug
# または application.properties
debug=true
# 出力例(一部):
============================
CONDITIONS EVALUATION REPORT
============================
Positive matches:
AopAutoConfiguration matched
DispatcherServletAutoConfiguration matched
...
Negative matches:
RabbitAutoConfiguration:
Did not match: @ConditionalOnClass classes not found:
org.springframework.amqp.rabbit.core.RabbitTemplate
...
主要な属性
scanBasePackages(ComponentScan 範囲)
// デフォルト: メインクラスのパッケージ以下
@SpringBootApplication
public class MyApp { ... }
// 明示
@SpringBootApplication(scanBasePackages = {"com.example", "com.other"})
public class MyApp { ... }
// クラス指定
@SpringBootApplication(scanBasePackageClasses = {UserService.class, OrderService.class})
public class MyApp { ... }
exclude(自動構成の除外)
// 不要な自動構成を除外
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
HibernateJpaAutoConfiguration.class
})
public class MyApp { ... }
// 名前指定でも可
@SpringBootApplication(excludeName = {
"org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"
})
// application.properties で除外
spring.autoconfigure.exclude=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
メインクラスの場所
メインクラスはパッケージのルートに置くのが原則です:
com/example/
├── MyApp.java ← @SpringBootApplication
├── controller/
│ └── UserController.java
├── service/
│ └── UserService.java
└── repository/
└── UserRepository.java
// すべて com.example 配下 → @ComponentScan で自動検出される
// ダメな例:
com/example/controller/MyApp.java ← controller 配下に置いてしまう
// → service / repository が scan 範囲外になりかねない
SpringApplication の使い方
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
// 標準起動
SpringApplication.run(MyApp.class, args);
// または詳細設定
SpringApplication app = new SpringApplication(MyApp.class);
app.setBannerMode(Banner.Mode.OFF); // バナー非表示
app.setWebApplicationType(WebApplicationType.NONE); // CLI アプリ
app.setAdditionalProfiles("prod");
app.run(args);
// または Builder スタイル
new SpringApplicationBuilder(MyApp.class)
.bannerMode(Banner.Mode.OFF)
.web(WebApplicationType.SERVLET)
.profiles("dev")
.run(args);
}
}
関連アノテーション
@SpringBootTest
@SpringBootTest
public class MyServiceTest {
@Autowired
private MyService myService;
@Test
void testSomething() { ... }
}
// 実 Spring コンテキストを起動してテスト
@EnableScheduling / @EnableAsync
@SpringBootApplication
@EnableScheduling // @Scheduled を有効化
@EnableAsync // @Async を有効化
public class MyApp { ... }
// 別クラスで
@Service
public class TaskService {
@Scheduled(cron = "0 0 * * * *")
public void hourlyTask() { ... }
@Async
public CompletableFuture<String> asyncTask() { ... }
}
@EnableJpaRepositories / @EnableJdbcRepositories
// 通常は Spring Boot が自動有効化するが、明示したい場合
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.example.repository")
public class MyApp { ... }
main メソッドが必須
Spring Boot の jar 実行には public static void main(String[] args) が必要です:
// pom.xml で実行可能 jar を生成
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.example.MyApp</mainClass>
</configuration>
</plugin>
// Gradle
plugins {
id "org.springframework.boot" version "3.1.0"
}
bootJar {
mainClass = "com.example.MyApp"
}
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38