SpringBoot紹介チュートリアル03-SpringBoot構成ファイルの詳細な説明
springbootは自動的に多くの構成を行うため、アプリケーションは構成なしで実行できますが、実際のアプリケーションシナリオでは、いくつかの構成を自分で変更する必要があります。この記事では、主に構成をカスタマイズする方法と、アプリケーションでカスタマイズされた構成を読み取る方法について説明します。
カスタム構成
springbootアプリケーションを作成すると、システムはデフォルトでsrc / main / java / resourcesディレクトリにapplication.propertiesファイルを作成します。Springbootは、プロパティとymlの2つの形式の構成ファイルをサポートしますが、ymlファイルはプロパティよりもはるかに強力であるため、ここでは、application.ymlに一律に変更されています。
次に、application.ymlに次のコンテンツを追加します。
server:
port: 8888
次に、次のコンテンツをHelloControllerクラスに追加します。
@Value("${server.port}")
private int port;
@Value("${server.port1:9999}")
private int port1;
@RequestMapping("/port")
public String port(){
return "server.port is " + port;
}
@RequestMapping("/port1")
public String port1(){
return "server.port1 is " + port1;
}
次に、SpringbootDemoApplicationのmainメソッドを実行して、アプリケーションを起動します
ブラウザを開き、http://127.0.0.1:8888 / portと入力すると、システムはserver.portが8888を返します。
ブラウザを開き、http://127.0.0.1:8888 / port1と入力すると、システムはserver.port1が9999を返します。
上記の例からわかるように、@ Value( "$ {placeHolder}")を使用してプロパティを挿入できます。存在しないプレースホルダーが挿入されると、システムの起動時にエラーが報告されます。これは、次の方法で解決できます。 @Value( "$ {placeHolder:defaultValue}")
開発者ツール
仕事を上手にやりたい場合は、まずツールを研ぐ必要があります。次のセクションの前に、いくつかの開発者ツール、つまり、SpringAssistantを使用してプロジェクトをビルドするときに最初のセクションでチェックした3つの開発者ツールを追加します。
- Spring Boot DevToolsはホットスタートツールを適用します。ホットスタートツールは、アーティファクトを再起動、開発、デバッグすることなく、コードが変更されたときに自動的にロードできます。
- Lombokは効率性のアーティファクトです。javabeanクラスに@Dataアノテーションを追加するだけで済みます。getter、setter、toString、hashcode、equalsなどのメソッドは自動的に生成され、クラスファイルで生成されます。javaコードは非常に見栄えがします。さわやか。アイデアでlombokプラグイン(無料)をインストールする必要があります。
- Spring Configuration Processorは、データベースの構成時にspring.datasourceを入力するなど、application.propertiesファイルとapplication.ymlファイルを書き込むときにプロンプトを表示します。選択できるキーのリストがあり、非常に便利です。
新しいプロジェクトを作成するときにチェックされていない場合は、pomファイルから追加することもできます
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
カスタムプロファイル
次の内容で、src / main / java / resourcesディレクトリに新しいuser.propertiesファイルを作成します。
user.name=henry
user.age=26
次に、com.henryパッケージの下に新しい構成パッケージを作成し、次に構成パッケージの下に新しいUserBeanクラスを作成します。コードは次のとおりです。
@Configuration
@PropertySource("classpath:user.properties")
@ConfigurationProperties(prefix = "user")
@Data
public class UserBean {
private String name;
private int age;
}
//一个@Data注解搞定,省去getter/setter/toString等方法,是不是很清爽
次に、com.henry.controllerパッケージの下に新しいUserBeanControllerクラスを作成します。コードは次のとおりです。
@RestController
public class UserBeanController {
@Autowired
private UserBean userBean;
@RequestMapping("/user")
public String user(){
return userBean.getName() +"-"+ userBean.getAge();
}
}
次に、アプリケーションを起動し、ブラウザを開いてhttp://127.0.0.1:8888/userと入力すると、ブラウザに次のように表示されます。
Henry-26
まず、UserBeanのいくつかのアノテーションを見てみましょう。
@Configurationは、JavaBeanがSpringコンテナによって管理されることを宣言する@ Component、@ Serviceと同等です。
@データコードの簡略化されたアノテーション
@PropertySourceは、プロパティを読み取る構成ファイルを指定します
- @PropertySource( "classpath:user.properties")は、クラスパスの下のuser.propertiesから読み取られます
- @PropertySource(value = {"classpath:user.properties"})は、複数の構成ファイル{"xxx"、 "xxx2"、...}からの読み取りをサポートします。
- @propertySourceにはプロパティignoreResourceNotFoundがあり、デフォルト値はfalseです。構成ファイルが存在しない場合はエラーが報告され、trueに変更された場合は無視されます。
@ConfigurationPropertiesは、プレフィックスプレフィックス= "user"を指定し、他に2つの属性があります。ignoreUnknownFieldsのデフォルト値はtrueであり、見つからないフィールドは無視されます。ignoreInvalidFieldsのデフォルト値はfalseであり、エラーが報告されます。不正なフィールド。たとえば、javaクラスのageフィールドはIntタイプですが、構成ファイルのage値はabcであるため、エラーが報告されます。
SpringBootアプリケーションは、起動時に構成ファイルを読み取り、javabean構成クラスを生成し、フィールドに値を割り当ててから、管理のためにそれらをSpringコンテナーに配置し、アプリケーションの他の部分で通常どおり使用できます。たとえば、上記の例では、UserBeanControllerは@Autowiredアノテーションを介して挿入されます。
application.ymlは複数の環境を構成します
実際の開発プロセスでは、複数の環境を切り抜ける必要が生じることがよくあります。この時点で、application.ymlを構成する方法について説明しましょう。
直接コーディングする
spring:
profiles.active: dev
---
spring:
profiles: dev
server:
port: 8080
---
spring:
profiles: stg
server:
port: 8888
---
spring:
profiles: prod
server:
port: 9999
上記のように、dev、stg、prodの3つの環境を定義し、現在の環境をdevとして指定しました。
アプリケーションを直接起動すると、Tomcatがポートで起動されていることがわかります:8080(http)、起動ログにコンテキストパスがあります ''
stg環境に切り替えたい場合は、いくつかの方法があります
- ** application.ymlのprofiles.activeをstgに変更します**
- **アプリケーションパラメータを指定します--spring.profiles.active = stg **
- ** vmパラメーターを指定します-Dspring.profiles.active = stg **
ALT + SHIFT + F10ショートカットキーを使用して構成の編集インターフェイスに入ります
図に示す2つの手順の後、SpringbootDemoApplicationのmainメソッドを実行して、stgの構成を読み取ります。
パッケージの展開、環境を指定するスクリプトを開始します
最初にMavenをクリーンアップしてから、インストールします
パッケージ化が完了したら、アイデアのターミナルツールを開き、コマンドを入力します
cd target
java -jar springboot-demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=stg
ここにポイントがあります。アプリケーションパラメーターを指定する方法は、application.ymlの構成をオーバーライドできます。
つまり、パラメーターを適用する方法(--spring.profiles.active = stg)は、構成ファイルの方法よりも優先されます。
構成ファイルのメソッドはjvmパラメーターのメソッド(-Dspring.profiles.active = stg)よりも高いため、自分で試すことができます
テスト後、環境をdevに戻します。後続のチュートリアルは、デフォルトでdev環境で開発および実行されます。