Spring Boot では多くの自動構成が使用されますが、開発者にとって、実際のプロジェクトでは、必然的に手動で構成する必要があります。これらのカスタム構成を保持するファイルは、resourcesディレクトリのapplication.propertiesファイルです(application.propertiesファイルの代わりにapplication.yamlファイルを使用してください)。
1つは、構成ファイルの優先順位です。
Spring Bootプロジェクトのapplication.properties構成ファイルは、次の4つの場所に表示されます。
- プロジェクトルートディレクトリの下のconfigフォルダ。
- プロジェクトのルートディレクトリの下。
- クラスパスの下のconfigフォルダー内。
- クラスパスの下。
これらの4つの位置の読み込み優先度は 1> 2> 3> 4です。これらの4つの場所にapplication.propertiesファイルがある場合、次の図に示すように、ロードの優先度が1から4に低下します。Spring Bootは、この優先度に従って構成情報を検索し、Spring環境に ロードします。
2つ、外部構成ファイルを参照する
デフォルトでは、SpringBootはapplication.propertiesを検索してロードします。開発者が構成ファイル名としてapplication.propertiesを使用したくない場合は、開発者が自分で定義することもできます。パッケージング開始時のファイルのパスまたは名前を指定します。
1.プロジェクトがパッケージ化されたら、コマンドラインパラメーターを使用して、プロジェクトの開始時にファイル名を指定できます。
java -jar xxx.jar --spring.config.name=filename
2.プロジェクトがパッケージ化されたら、コマンドラインパラメーターの形式を使用して、プロジェクトの開始時に外部構成ファイルの場所を指定できます。
java -jar xxx.jar --spring.config.location=classpath:/app.properties
3.もちろん、外部構成が配置されているフォルダーを指定することもできます。このフォルダーの下の構成ファイルは、起動時に検索されて使用されます。
java -jar xxx.jar --spring.config.location=classpath:/config/
4.同時に複数のパスを構成することもできます。たとえば、次の例では、最初に外部構成ファイルをロードし、外部構成ファイルがない場合は、パッケージ内のデフォルトの構成ファイルを使用します。
java -jar xxx.jar --spring.config.location=classpath:/,classpath:/config/
3つ目は、コマンドラインパラメーターを使用して属性を指定する
構成ファイルで属性パラメーターを構成することに加えて、2番目に構成ファイルのパスを指定することで起動パラメーターを指定することもできます。たとえば、クラスター環境では、構成ファイルでポートが8080として指定されます。別の8081ポートサービスを開始する場合は、-server.portを使用して開始ポートを指定できます。他のパラメータについても同じです
java -jar xxx.jar --server.port=8081
場合は、同じ名前のパラメータがすでに存在してapplication.propertiesのファイル、それが優先されます構成をapplication.properties。
4つのカスタム構成プロパティ
プロジェクトでは、トークンの有効期限、スケジュールされたタスクのタイミング、その他の情報など、特定のカスタム構成属性に遭遇することがよくあります。application.propertiesで独自のプロパティを構成できます。
1.application.propertiesに次のような単純な定数構成を追加でき ます 。
book.name=红楼梦
book.author=曹雪芹
book.price=299.9
2.構成属性は、相互参照によっても使用できます。
book.name=红楼梦
book.author=曹雪芹
book.price=299.9
# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}
3.構成属性データをクラス属性に挿入します。
(1)。 データは、属性に注入することができるによって@valueの中に注釈それがされている場所必要。以下に示すように、我々が作成BookControllerと注入book.infoへのBookInfoの 属性。
@RestController
public class BookController {
@Value("${book.info}")
private String bookInfo;
@GetMapping("/book")
public String boolInfo(){
return bookInfo;
}
}
(2)プロジェクトを再起動し、http:// localhost:8081 / bookにアクセスします。
4.属性データをBeanに注入します。
プロジェクト開発では、複数のクラスで使用される構成が1つ以上ある場合があります。使用する各クラスに同じ属性を追加したり、プロジェクト内のクラスに各属性が散在している場合は、メンテナンスが比較的面倒です。構成クラスを個別に定義し、すべてのカスタム属性をこの構成クラスに挿入すると、他の使用済み属性がこのクラスを直接参照できます。
(1)という名前の定義ブック のビーンの前面に、注入およびコンフィギュレーションデータを 豆 に
@ConfigurationProperties(prefix = "book")
@Component
public class Book {
private String name;
private String author;
private Double price;
private String info;
// 省略 getter 和 setter 方法
}
説明:
(1)@ConfigurationPropertiesのprefix属性は、ロードされる構成ファイルのプレフィックスを記述します。
(2)Spring Bootは、プロパティのバインドに緩いルールを使用します。
- Beanの属性の名前がauthorNameであるとすると、構成ファイルの属性はmy.author_name、my.author-name、my.authorName、またはmy.AUTHORNAMEになります。
(2)、BookControllerにBook を挿入します
@RestController
public class BookController {
@Resource
private Book book;
@GetMapping("/book")
public String boolInfo(){
return book.getInfo();
}
}
(3)、アクセスを再開します
5つのマルチ環境構成
プロジェクトがリリースされる前に、開発者は通常、開発環境、テスト環境、本番環境を頻繁に切り替える必要があります。現時点では、多数の構成(データベース、redis、mongodb、MQなど)を頻繁に変更する必要があります。 。)。頻繁な変更は、巨大なワークロードをもたらします。で合意されたさまざまな環境下でのコンフィギュレーションファイル名規則春ブーツは、次のとおりです。
- application- {profile} .properties、プロファイルプレースホルダーは現在の環境の名前を表します。
具体的な構成手順は次のとおりです。
1.構成ファイルを作成します
まず 、resourcesディレクトリにapplication-dev.properties とapplication-prod.propertiesの2つの構成ファイルを 作成し ます。これらは、それぞれ開発環境と本番環境の構成を表します。
#application-dev.properties
book.name=红楼梦
book.author=曹雪芹
book.price=299.9
# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}
#application-prod.properties
book.name=MySQL从删库到跑路
book.author=佚名
book.price=299.9
# book.info 属性引用了以上三个属性
book.info=${book.name}-${book.author}-${book.price}
2.application.propertiesで環境を構成します
(1)application.properties で次の構成を実行します。これは、 application-dev.propertiesをロードすることを意味します。
spring.profiles.active=dev
(2)application.properties で次の構成を実行します。これは、 application-prod.propertiesをロードすることを意味します。
spring.profiles.active=prod
(3)構成を変更して再起動すると、にアクセスしてさまざまな結果が表示されます。
3.コードで構成します
2番目のステップでapplication.propertiesに追加された構成の場合、コードに構成を追加して完了することもできます。次のコードをスタートアップクラスのメインメソッドに追加して、2番目のステップの構成を置き換えます。
@SpringBootApplication
public class Springdemo3Application {
public static void main(String[] args) {
SpringApplicationBuilder builder =
new SpringApplicationBuilder(Springdemo3Application.class);
builder.application().setAdditionalProfiles("dev");
builder.run(args);
}
}
4.プロジェクトの開始時期を構成します
プロジェクトがjarパッケージにパッケージ化されて開始されるときに、コマンドラインで現在の環境を動的に指定することもできます。
java -jar xxx.jar --spring.profiles.active=dev
5.Maven経由で指定します
上記の3つの構成はすべて、パッケージ化する前に構成を変更するか、起動時に起動パラメーターを指定する必要があります。Mavenを使用して構成を指定し、パッケージ化時に指定した構成を直接入力することもできます。
(1)pom.xmlファイルを変更し、次の構成を追加します
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>application-dev.properties</exclude>
<exclude>application-prod.properties</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>application-${profiles.active}.properties</include>
<include>application.properties</include>
</includes>
</resource>
</resources>
</build>
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<maven.test.skip>true</maven.test.skip>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>
</project>
(2)application.propertiesファイルを変更し、次の構成を追加します。
[email protected]@
(3)Mavenをパッケージ化するときにプロファイルを指定します。
mvn clean package -P prod
このように、パッケージ化されたファイルには、以下に示すように、指定されたプロファイルに対応するファイルのみが含まれます。