SpringBoot-構成ファイルの使用に関する詳細な説明(プロファイルマルチ環境構成)

Spring Boot では多くの自動構成が使用されますが、開発者にとって、実際のプロジェクトでは、必然的に手動で構成する必要があります。これらのカスタム構成を保持するファイルは、resourcesディレクトリのapplication.propertiesファイルです(application.propertiesファイルの代わりにapplication.yamlファイルを使用してください)。

1つは、構成ファイルの優先順位です。

Spring Bootプロジェクトのapplication.properties構成ファイルは、次の4つの場所に表示されます。

  1. プロジェクトルートディレクトリの下のconfigフォルダ。
  2.  プロジェクトのルートディレクトリの下。
  3. クラスパスの下のconfigフォルダー内。
  4.  クラスパスの下。

これらの4つの位置の読み込み優先度は  1> 2> 3> 4です。これらの4つの場所にapplication.propertiesファイルがある場合、次の図に示すように、ロードの優先度が1から4に低下ます。Spring Bootは、この優先度に従って構成情報を検索し、Spring環境に ロードします。

 2つ、外部構成ファイルを参照する

デフォルトでは、SpringBootapplication.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

  このように、パッケージ化されたファイルには、以下に示すように、指定されたプロファイルに対応するファイルのみが含まれます。

おすすめ

転載: blog.csdn.net/small_love/article/details/111679469