ホームページ  >  記事  >  Java  >  SpringCloud-Spring Boot Starter の使用テスト インスタンスの分析

SpringCloud-Spring Boot Starter の使用テスト インスタンスの分析

PHPz
PHPz転載
2023-05-16 11:10:071203ブラウズ

Spring Boot スターターとは何ですか?

Spring Boot Starter は SpringBoot コンポーネントで提案されている概念であり、多くの面倒な構成を簡素化するため、さまざまな Spring Boot Starter パッケージを導入することで、プロジェクトの足場を迅速に構築できます。

たとえば、よく使用するもののいくつか:

spring-boot-starter-web:

spring-boot-starter-data -redis:

spring-boot-starter-data-mongodb:

spring-boot-starter-data-jpa:

spring-boot-starter-activemq:

一般に、スターターは依存関係の合成です。

以前の従来のアプローチ

スターターがなかった以前、従来の SSM プロジェクトの場合、Spring で jpa を使用したい場合は、次のことを行う必要があるかもしれません。

最初に特に、Maven で使用されるデータベースの依存関係を導入します>>次に、jpa の依存関係を導入します>>xml でいくつかの属性情報を構成します>>正常に実行できるようになるまで呼び出しをデバッグします。

上記の操作には、次のようないくつかの問題があります。

プロセスが複雑な場合、このような段階的な操作ではエラーが発生する可能性が高くなります。

また、設定時に多くの時間がかかり、初心者や初心者にとってはあまり親切ではありません。

Spring Boot Starter を使用した後

#Starter の主な目的は、上記の問題を解決することです

Starter の概念:

starter はすべてを使用します依存関係が含まれているため、開発者自身が依存関係を導入することによって引き起こされる問題が回避されます。異なるスターターは異なる依存関係を解決するように設計されているため、内部実装が大きく異なる可能性があることに注意してください。たとえば、jpa のスターターと Redis のスターターでは実装が異なる場合があります。これは、スターターの本質が合成サイズにあるためです。これは論理レベルでの抽象化の層です。おそらく、この概念は Docker にいくらか似ています。なぜなら、どちらも「パッケージ化」操作を行っているからです。Docker がどのような問題を解決すべきか知っている場合は、Docker とスターター Make を使用できるかもしれません。例えです。

スターターの実装:

スターターが異なれば実装も異なりますが、基本的には同じ 2 つのもの (ConfigurationProperties と AutoConfiguration) を使用します。 Spring Boot は「構成よりも規約」の概念を強く信じているため、ConfigurationProperties を使用して構成を保存します。これらの構成にはデフォルト値を含めることができます。つまり、元の構成を積極的に上書きしない場合、デフォルト値はエフェクトは、多くの状況で非常に役立ちます。さらに、スターターの ConfigurationProperties を使用すると、すべての構成プロパティを 1 つのファイル (通常はリソース ディレクトリ内の application.properties) に集めることができるため、Spring プロジェクトの XML 地獄に別れを告げることができます。

SpringCloud-Spring Boot Starter の使用テスト インスタンスの分析

上記のスターターが依存する jar は、手動で構成するときに依存する jar と何ら変わりません。そのため、スターターがこれらの面倒な構成を実際に処理すると考えることができます。操作は自分自身に任せ、シンプルさはユーザーに任せます。 ConfigurationProperties は、ユーザーが面倒なビルド操作を排除できるようにするだけでなく、「構成よりも規則」という概念に基づいてユーザーが不必要な構成操作を減らすのにも役立ちます。また、

application.properties ファイルが存在するため、カスタマイズされた構成が必要な場合でも、すべての構成を 1 つのファイルで実行するだけで済み、非常に便利です。採用されたスターターはすべて上記に記載されています。

Spring Boot スターターの手順を作成する

スターター プロジェクトを作成する

ConfigurationProperties を作成して構成情報を保存する

AutoConfiguration を作成し、定義された構成情報を参照する

スターターが AutoConfiguration で完了する必要があるすべての操作を実装し、宣言のためにこのクラスを spring.factories 構成ファイルに追加します。

パッケージ項目により、プロジェクトの依存関係が SpringBoot プロジェクトに導入され、次を使用できます。スターター

具体的な手順:

アイデアで新しいスターター プロジェクトを作成し、次のステップを直接実行してプロジェクトを生成します。

SpringCloud-Spring Boot Starter の使用テスト インスタンスの分析

次の構成ファイルを XML に追加します:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>http-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
 
    <!-- 自定义starter都应该继承自该依赖 -->
    <!-- 如果自定义starter本身需要继承其它的依赖,可以参考 https://stackoverflow.com/a/21318359 解决 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starters</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
 
    <dependencies>
        <!-- 自定义starter依赖此jar包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- lombok用于自动生成get、set方法 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>
 
</project>

構成情報を保存するプロパティ クラスを作成します

@ConfigurationProperties(prefix = "http") 
@Getter
public class HttpProperties {
 
    // 如果配置文件中配置了http.url属性,则该默认属性会被覆盖
    private String url = "https://blog.csdn.net/weixin_39709134?type=blog";
 
}

ビジネスを作成しますclass:

@Setter
@Getter
public class HttpClient {
 
    private String url;
 
    // 根据url获取网页数据
    public String getHtml() {
        try {
            URL url = new URL(this.url);
            URLConnection urlConnection = url.openConnection();
            BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
            String line = null;
            StringBuilder sb = new StringBuilder();
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }
            return sb.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "error";
    }
 
}

このビジネス クラスには、Web ページの HTML データを取得するために使用される

url 属性と getHtml メソッドが含まれています。

Create AutoConfiguration

@Configuration
@EnableConfigurationProperties(HttpProperties.class)
public class HttpAutoConfiguration {
 
    @Resource
    private HttpProperties properties; // 使用配置
 
    // 在Spring上下文中创建一个对象
    @Bean
    @ConditionalOnMissingBean
    public HttpClient init() {
        HttpClient client = new HttpClient();
 
        String url = properties.getUrl();
        client.setUrl(url);
        return client;
    }
 
}

上記の AutoConfiguration では、要件を実装しました。Spring コンテキストで HttpClient クラスの Bean を作成し、プロパティ内のパラメーターを Bean に割り当てました。

最後に、

resources フォルダーの下に新しいディレクトリ META-INF を作成し、そのディレクトリ内に新しい spring.factories ファイルを作成します。および spring.factories: での AutoConfiguration の構成

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nosuchfield.httpstarter.HttpAutoConfiguration

最后使用 Maven 打包该项目。之后创建一个 SpringBoot 项目,在项目中添加我们之前打包的 starter 作为依赖,然后使用 SringBoot 来运行我们的 starter

测试如下:

@Component
public class RunIt {
 
    @Resource
    private HttpClient httpClient;
 
    public void hello() {
        System.out.println(httpClient.getHtml());
    }
 
}

SpringCloud-Spring Boot Starter の使用テスト インスタンスの分析

之后可以在 application.properties中修改配置来进行测试证明 properties 中的数据确实被覆盖

以上がSpringCloud-Spring Boot Starter の使用テスト インスタンスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。