Spring Boot

公開日: 2026-07-30 19:34 更新日: 2026-07-30 19:34 1732文字 9 min read ... ページビュー

この記事では、Spring Boot 3.3.4を使用して最初のWebアプリケーションを開発する方法を説明します。プロジェクト作成、依存関係管理、コントローラの記述、パッケージデプロイメントなどのプロセスを含みます。Spring Bootの自動構成メカニズム、構成ファイル形式、マルチ環境構成、開発ツール(開発ツールやLombokなど)、インターセプタとデータソースの統合に焦点を当て、バージョン管理、セキュリティ構成、開発プラクティスのベストプラクティスを強調します。

Spring Boot

image-001
image-001

最初のスプリングブートアプリケーション

ターゲットは、指定されたアドレスにブラウザがアクセスしたときに、サーバからHello Worldが返されることです。

プロジェクトを作成し、依存関係を導入

プロジェクトはSpring Initializrで作成できます。次の例ではSpring Boot 3.3.4を使用しているため、実行環境には最低でもJava 17が必要です。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.4</version>
    <relativePath/>
</parent>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

コントローラの作成

@RestController
public class HelloController {
    @GetMapping("/test")
    public String test() {
        return "Hello World";
    }
}

プロジェクトを起動した後にhttp://localhost:8080/testにアクセスすると、ブラウザにHello Worldが表示されます。

パッケージングと展開

Mavenプラグインの構成

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

実行可能の

プロジェクトのルートで実行します。

mvn clean package

ビルドが成功すると、JARファイルはtargetディレクトリにあります。

プロジェクトを実行する

java -jar target/项目名称.jar

Spring Bootの主な機能

親プロジェクトと依存性管理

image-002
image-002

spring-boot-starter-parentは共通のMaven 構成を提供し、Spring Bootの依存関係管理機能を継承します。

image-003
image-003

Spring Bootは多くの共通依存バージョンを管理します。管理された依存関係を導入する場合、通常はバージョンを個別に宣言する必要がなく、バージョン衝突の可能性が低くなります。

Starterシナリオランチャー

spring-boot-starter-webは、Spring MVC、JSON 処理、デフォルトの組み込みサーバなどの依存関係を導入するWebシナリオランチャーです。

デフォルトのTomcatをJettyに置き換える必要がある場合は、Tomcatを除外してJettyを導入できます。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

スタートアップクラスとSpringApplication.run()

@SpringBootApplication
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext =
                SpringApplication.run(SpringBootDemoApplication.class, args);

        System.out.println(applicationContext.getBean(HelloController.class));
    }
}

SpringApplication.run()はSpringコンテナを起動し、自動構成を実行し、Webプロジェクト内の組み込みサーバーを起動します。

@SpringBootApplication

@SpringBootApplicationは、主に以下の機能を含む組み合わせアノテーションです。

  • @SpringBootConfiguration:現在のクラスがSpring Boot 構成クラスであり、本質的に@Configurationの役割を持つことを示します。
  • @EnableAutoConfigurationクラスパス内の依存関係、既存のBean、および構成プロパティーに基づいて自動構成されます。
  • @ComponentScan:デフォルトでブートクラスが存在するパッケージとそのサブパッケージをスキャンします。

したがって、コントローラ、ビジネスクラス、設定クラスなどは、通常、起動クラスが存在するパッケージまたはそのサブパッケージに配置する必要があります。パッケージ構造がデフォルトのスキャン範囲を満たさない場合は、スキャンパスを明示的に設定する必要があります。

自動構成

自動構成では、すべてのBeanを無条件に登録するわけではありません。Spring Bootは、コンテナ内の依存関係、構成プロパティ、および既存のBeanと組み合わせて、構成が有効かどうかを判断します。

例えば、Web Starterの導入後、Spring BootはDispatcherServlet、リクエストマッピング、メッセージコンバータなどのコンポーネントをSpring MVCアプリケーション用に構成します。開発者自身が同型 Beanを宣言すると、部分自動構成は条件付きで引きます。

プロファイル

Spring Bootはデフォルトでapplication.propertiesおよびapplication.ymlをサポートします。YAMLはインデントによって階層を表します。インデントには空白を使用する必要があり、タブは使用できません。

image-004
image-004
person:
  last-name: tom
  age: 20
  married: false
  birth: 1995-03-23
  maps:
    name1: jack
    name2: rose
  friends:
    - zhangsan
    - lisi
  dog:
    name: dog
    age: 2

略称は@ConfigurationProperties

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean married;
    private LocalDate birth;
    private Map<String, String> maps;
    private List<String> friends;
    private Dog dog;

    // getter 和 setter
}

@ConfigurationPropertiesは、同じプレフィックスの下での構成の一括バインディングに適しています。プロパティー名は、構成内のlast-nameをJavaプロパティー lastNameにバインドできるなど、緩いバインディングをサポートします。

コンフィギュレーションクラスの場合、コンフィギュレーションオブジェクトに@Componentを追加する代わりに、@ConfigurationPropertiesScanまたは@EnableConfigurationPropertiesと一緒に登録することもできます。

@Value@PropertySource@ImportResource

  • @Valueは、少数の独立した構成の読み取りに適しています。
  • @PropertySourceは追加の.propertiesファイルをロードできますが、YAMLを直接サポートしません。
  • @ImportResourceでは、従来のSpring XML 構成をインポートできます。

複数環境の構成

Spring Bootはプロファイルを使用して異なる環境の構成を管理する。

マルチドキュメント方式

application.yml
application-dev.yml
application-test.yml
application-prod.yml

プライマリ構成で環境をアクティブにするには:

spring:
  profiles:
    active: dev

起動パラメータによって上書きすることもできます

java -jar app.jar --spring.profiles.active=prod

単一ファイルの複数ドキュメント方式

image-005
image-005

YAMLは---を使用して複数のドキュメントを区切り、spring.config.activate.on-profileを使用して環境を指定できます。

spring:
  application:
    name: demo

---
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 8080

---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 80

開発ツールとホット展開

開発ツールの導入により、クラスパスが変更されたときにアプリケーションの再起動をトリガーできます。これは開発支援ツールであり、本番環境に導入するシナリオとして使用しないでください。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

IDEは自動コンパイルを有効にするか、手動でビルドをトリガーする必要があります。そうしないと、変更されたクラスファイルが更新されず、開発ツールはアプリケーションを再起動しません。

Lombok 簡易エンティティークラス

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean married;
    private LocalDate birth;
    private Map<String, String> maps;
    private List<String> friends;
    private Dog dog;
}

Lombokはコンパイル時に共通のメソッドを生成します。IDEプラグインをインストールし、注釈処理をオンにして、エディタの誤検出を回避してください。

Spring MVCインターセプタの設定

Interceptorの開発

Spring Boot 3はjakarta.servletパッケージのサーブレットAPIを使用します。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler) {
        System.out.println("preHandle");
        return true;
    }

    @Override
    public void postHandle(
            HttpServletRequest request,
            HttpServletResponse response,
            Object handler,
            ModelAndView modelAndView) {
        System.out.println("postHandle");
    }
}

登録インターセプター

インターセプタ自体をBeanとして登録し、コンストラクタを介して設定クラスに注入することをお勧めします。

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    private final MyInterceptor myInterceptor;

    public MyMvcConfig(MyInterceptor myInterceptor) {
        this.myInterceptor = myInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/login", "/error");
    }
}
@Component
public class MyInterceptor implements HandlerInterceptor {
    // 拦截逻辑
}

Druidデータソースの統合

Spring Boot 3 対応のDruid Starterを使用する場合、通常のdruid依存関係を繰り返す必要はありません。

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

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-3-starter</artifactId>
    <version>1.2.23</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://localhost:3306/java2601?serverTimezone=UTC&characterEncoding=utf8
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
      max-active: 10
      min-idle: 3
      initial-size: 2
      max-wait: 10000

データソースのテスト

@SpringBootTest
class SpringBootDemoApplicationTests {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Test
    void testJdbcTemplate() {
        List<Map<String, Object>> list =
                jdbcTemplate.queryForList("SELECT * FROM t_user");

        System.out.println(list);
        System.out.println(jdbcTemplate.getDataSource());
    }
}

データベースアカウントとパスワードは公開リポジトリに提出しないでください。実際のプロジェクトは、環境変数、外部設定ファイル、または鍵管理サービスを通じて機密設定を提供できます。

気に入ったならばコメントを残してくださいね~

... ページビュー
© 2026 跨越星轨的客 @Hoshiumi
Powered by theme astro-koharu · Inspired by Shoka