Spring Boot

最初のスプリングブートアプリケーション
ターゲットは、指定されたアドレスにブラウザがアクセスしたときに、サーバから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の主な機能
親プロジェクトと依存性管理

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

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はインデントによって階層を表します。インデントには空白を使用する必要があり、タブは使用できません。

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
単一ファイルの複数ドキュメント方式

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());
}
}データベースアカウントとパスワードは公開リポジトリに提出しないでください。実際のプロジェクトは、環境変数、外部設定ファイル、または鍵管理サービスを通じて機密設定を提供できます。
気に入ったならばコメントを残してくださいね~