国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
まず、ジョブ クラスは特定の基本クラス org.springframework.scheduling.quartz.QuartzJobBean を継承します。
org.springframework.scheduling.quartz .MethodInvokingJobDetailFactoryBean" >org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBeanorg.springframework.scheduling.quartz .MethodInvokingJobDetailFactoryBean
Spring-Task
第一種:配置文件方式
第二種:使用注解形式
ホームページ Java &#&ベース Java でスケジュールされたタスクを?qū)g裝するには、どのような方法がありますか?

Java でスケジュールされたタスクを?qū)g裝するには、どのような方法がありますか?

May 25, 2021 pm 02:18 PM
java スケジュールされたタスク

Java でスケジュールされたタスクを?qū)g裝する方法: 1. Java に付屬の「java.util.Timer」クラスを使用します。このクラスを使用すると、「java.util.TimerTask」タスクをスケジュールできます。 Quartz; 3. 、Spring 3.0 に付屬のタスクを使用します。

Java でスケジュールされたタスクを?qū)g裝するには、どのような方法がありますか?

#このチュートリアルの動(dòng)作環(huán)境: Windows7 システム、Java8 バージョン、DELL G3 コンピューター。

最近、プロジェクトの開(kāi)発中に、毎日早朝に前日のログ情報(bào)を分析する必要があるなど、いくつかのスケジュールされたタスクを?qū)g行する必要があるため、この機(jī)會(huì)にいくつか整理してみました。スケジュールされたタスクの実裝方法 このプロジェクトでは Spring Framework を使用しているので Spring Framework と合わせて紹介します。 ######1つ。分類

実裝テクノロジーの観點(diǎn)から見(jiàn)ると、現(xiàn)在 3 つの主要なテクノロジー (または 3 つの製品) があります:
  • 1. Java 獨(dú)自の java.util.Timer クラス、これクラスを使用すると、java.util.TimerTask タスクをスケジュールできます。この方法を使用すると、指定した時(shí)間ではなく、特定の頻度でプログラムを?qū)g行できます。一般的にはあまり使われないので、この記事では詳しく紹介しません。

    2. Quartz を使用します。Quartz は、指定した時(shí)間または特定の頻度でプログラムを?qū)g行できるようにする、比較的強(qiáng)力なスケジューラです。構(gòu)成は少し複雑なので、後で説明します。

    3. Spring 3.0 以降に付屬するタスクは軽量な Quartz とみなすことができ、後で紹介する Quartz よりもはるかに簡(jiǎn)単に使用できます。

    ジョブ クラスの継承方法に関しては、次の 2 つのカテゴリに分類できます:
  • 1. ジョブ クラスは、特定のジョブ クラスの基本クラスから継承する必要があります。 Quartz などでは org.springframework.scheduling.quartz.QuartzJobBean から継承する必要があり、java.util.Timer は java.util.TimerTask から継承する必要があります。

    2. ジョブ クラスは通常の Java クラスであり、基本クラスから継承する必要はありません。

    注: すべてのクラスは共通クラスであり、事前に特別に処理する必要がないため、個(gè)人的には 2 番目の方法を使用することをお?jiǎng)幛幛筏蓼埂?

タスクスケジューリングのトリガータイミングのうち、ジョブに使用されるトリガーは主に以下の2種類があります:
  • 1. 指定時(shí)刻ごと、トリガーQuartz の対応するトリガーは org.springframework.scheduling.quartz.SimpleTriggerBean

    2 です。指定された時(shí)間ごとにトリガーされ、Quartz の対応するスケジューラーは org.springframework.scheduling.quartz.CronTriggerBean## です。

    #注: すべてのタスクがこれら 2 つのトリガーを使用できるわけではありません。たとえば、java.util.TimerTask タスクは最初のトリガーのみを使用できます。 Quartz と Spring タスクは両方とも、これら 2 つのトリガー條件をサポートできます。 ######二。使用方法

  • QuartzやSpringタスクなど、各タスクスケジューリングツールの使い方を詳しく紹介します。

Quartz

まず、ジョブ クラスは特定の基本クラス org.springframework.scheduling.quartz.QuartzJobBean を継承します。

最初のステップ: ジョブ クラスを定義します

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean {

private int timeout;
private static int i = 0;
//調(diào)度工廠實(shí)例化后,經(jīng)過(guò)timeout時(shí)間開(kāi)始執(zhí)行調(diào)度
public void setTimeout(int timeout) {
this.timeout = timeout;
}

/**
* 要調(diào)度的具體任務(wù)
*/
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
  System.out.println("定時(shí)任務(wù)執(zhí)行中…");
}
}

2 番目のステップ: Spring 構(gòu)成ファイルでジョブ クラス JobDetailBean を構(gòu)成します

<bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.gy.Job1" />
<property name="jobDataAsMap">
<map>
<entry key="timeout" value="0" />
</map>
</property>
</bean>

説明: org.springframework.scheduling.quartz.JobDetailBean には 2 つの屬性があります。jobClass 屬性は Java コードで定義するタスク クラスであり、jobDataAsMap 屬性は必要な屬性値です。タスククラスに注入されます。 ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構(gòu)成する

Quartz には、

org という 2 種類のジョブ トリガーがあります。 springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling.quartz.CronTriggerBean

最初の SimpleTriggerBean は、特定の頻度 (30 分に 1 回の実行など) でのタスクの呼び出しのみをサポートします。

設(shè)定方法は次のとおりです。

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
<property name="jobDetail" ref="job1" />  
<property name="startDelay" value="0" /><!-- 調(diào)度工廠實(shí)例化后,經(jīng)過(guò)0秒開(kāi)始執(zhí)行調(diào)度 -->  
<property name="repeatInterval" value="2000" /><!-- 每2秒調(diào)度一次 -->  
</bean>

2 番目の CronTriggerBean は、毎日 12:00 など、指定された時(shí)刻に 1 回実行することをサポートします。

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  <property name="jobDetail" ref="job1" />  
  <!—每天12:00運(yùn)行一次 -->  
  <property name="cronExpression" value="0 0 12 * * ?" />  
  </bean>

cronExpression 式の構(gòu)文については、付録を參照してください。

ステップ 4: スケジューリング ファクトリを構(gòu)成する

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
 <property name="triggers">  
 <list>  
 <ref bean="cronTrigger" />  
 </list>  
 </property>  
</bean>

説明: このパラメータは、以前に構(gòu)成したトリガーの名前を指定します。

ステップ 5: アプリケーションを開(kāi)始するだけです。つまり、プロジェクトを Tomcat または他のコンテナーにデプロイします。

第 2 に、ジョブ クラスは特定の基本クラスを継承しません。 (推奨)

Spring は 2 つのクラスのおかげでこのメソッドをサポートできます:

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBeanorg.springframework.scheduling.quartz .MethodInvokingJobDetailFactoryBean

これら 2 つのクラスは、Spring でサポートされるタスク スケジューリングの 2 つのメソッド、つまり、前述したように Java に付屬するタイマー タスク メソッドと Quartz メソッドにそれぞれ対応します。ここでは MethodInvokingJobDetailFactoryBean の使用法についてのみ書(shū)きますが、このクラスを使用する利點(diǎn)は、タスク クラスがクラスから継承する必要がなく、通常の pojo であることです。

ステップ 1: タスク クラスを作成する

 public class Job2 {  
 public void doJob2() {  
 System.out.println("不繼承QuartzJobBean方式-調(diào)度進(jìn)行中...");  
 }  
 }

ご覧のとおり、これは通常のクラスであり、メソッドがあります。

ステップ 2: ジョブ クラスの構(gòu)成

<bean id="job2"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean class="com.gy.Job2" />
</property>
<property name="targetMethod" value="doJob2" />
<property name="concurrent" value="false" /><!-- 作業(yè)不并發(fā)調(diào)度 -->
</bean>

說(shuō)明:這一步是關(guān)鍵步驟,聲明一個(gè)MethodInvokingJobDetailFactoryBean,有兩個(gè)關(guān)鍵屬性:targetObject指定任務(wù)類,targetMethod指定運(yùn)行的方法。往下的步驟就與方法一相同了,為了完整,同樣貼出。

第三步:配置作業(yè)調(diào)度的觸發(fā)方式(觸發(fā)器)

Quartz的作業(yè)觸發(fā)器有兩種,分別是

org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

第一種SimpleTriggerBean,只支持按照一定頻度調(diào)用任務(wù),如每隔30分鐘運(yùn)行一次。

配置方式如下:

 <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
 <property name="jobDetail" ref="job2" />  
 <property name="startDelay" value="0" /><!-- 調(diào)度工廠實(shí)例化后,經(jīng)過(guò)0秒開(kāi)始執(zhí)行調(diào)度 -->  
 <property name="repeatInterval" value="2000" /><!-- 每2秒調(diào)度一次 -->  
 </bean>

第二種CronTriggerBean,支持到指定時(shí)間運(yùn)行一次,如每天12:00運(yùn)行一次等。

 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
 <property name="jobDetail" ref="job2" />  
  <!—每天12:00運(yùn)行一次 -->  
  <property name="cronExpression" value="0 0 12 * * ?" />  
 </bean>

以上兩種方式根據(jù)實(shí)際情況任選一種即可

第四步:配置調(diào)度工廠

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>

說(shuō)明:該參數(shù)指定的就是之前配置的觸發(fā)器的名字。

第五步:?jiǎn)?dòng)你的應(yīng)用即可,即將工程部署至tomcat或其他容器。

到此,spring中Quartz的基本配置就介紹完了,當(dāng)然了,使用之前,要導(dǎo)入相應(yīng)的spring的包與Quartz的包,這些就不消多說(shuō)了。

其實(shí)可以看出Quartz的配置看上去還是挺復(fù)雜的,沒(méi)有辦法,因?yàn)镼uartz其實(shí)是個(gè)重量級(jí)的工具,如果我們只是想簡(jiǎn)單的執(zhí)行幾個(gè)簡(jiǎn)單的定時(shí)任務(wù),有沒(méi)有更簡(jiǎn)單的工具,有!

Spring-Task

上節(jié)介紹了在Spring 中使用Quartz,本文介紹Spring3.0以后自主開(kāi)發(fā)的定時(shí)任務(wù)工具,spring task,可以將它比作一個(gè)輕量級(jí)的Quartz,而且使用起來(lái)很簡(jiǎn)單,除spring相關(guān)的包外不需要額外的包,而且支持注解和配置文件兩種

形式,下面將分別介紹這兩種方式。

第一種:配置文件方式

第一步:編寫(xiě)作業(yè)類

即普通的pojo,如下:

  import org.springframework.stereotype.Service;  
  @Service  
  public class TaskJob {  
        5      public void job1() {  
          System.out.println(“任務(wù)進(jìn)行中。。?!?;  
      }  
  }

第二步:在spring配置文件頭中添加命名空間及描述

 <beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:task="http://www.springframework.org/schema/task"   
    xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

第三步:spring配置文件中設(shè)置具體的任務(wù)

<task:scheduled-tasks>   
         <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>   
</task:scheduled-tasks>  
   
<context:component-scan base-package=" com.gy.mytask " />

說(shuō)明:ref參數(shù)指定的即任務(wù)類,method指定的即需要運(yùn)行的方法,cron及cronExpression表達(dá)式,具體寫(xiě)法這里不介紹了,詳情見(jiàn)上篇文章附錄。

這個(gè)配置不消多說(shuō)了,spring掃描注解用的。

到這里配置就完成了,是不是很簡(jiǎn)單。

第二種:使用注解形式

也許我們不想每寫(xiě)一個(gè)任務(wù)類還要在xml文件中配置下,我們可以使用注解@Scheduled,我們看看源文件中該注解的定義:

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scheduled
{
  public abstract String cron();

  public abstract long fixedDelay();

  public abstract long fixedRate();
}

可以看出該注解有三個(gè)方法或者叫參數(shù),分別表示的意思是:

cron:指定cron表達(dá)式

fixedDelay:官方文檔解釋:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示從上一個(gè)任務(wù)完成開(kāi)始到下一個(gè)任務(wù)開(kāi)始的間隔,單位是毫秒。

fixedRate:官方文檔解釋:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即從上一個(gè)任務(wù)開(kāi)始到下一個(gè)任務(wù)開(kāi)始的間隔,單位是毫秒。

下面我來(lái)配置一下。

第一步:編寫(xiě)pojo

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component(“taskJob”)
public class TaskJob {
    @Scheduled(cron = "0 0 3 * * ?")
    public void job1() {
        System.out.println(“任務(wù)進(jìn)行中。。?!?;
    }
}

第二步:添加task相關(guān)的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
    default-lazy-init="false">


    <context:annotation-config />
    <!—spring掃描注解的配置   -->
    <context:component-scan base-package="com.gy.mytask" />

    <!—開(kāi)啟這個(gè)配置,spring才能識(shí)別@Scheduled注解   -->
    <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
    <task:scheduler id="qbScheduler" pool-size="10"/>

說(shuō)明:理論上只需要加上這句配置就可以了,這些參數(shù)都不是必須的。

?Ok配置完畢,當(dāng)然spring task還有很多參數(shù),我就不一一解釋了,具體參考xsd文檔http://www.springframework.org/schema/task/spring-task-3.0.xsd。

更多編程相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn):編程視頻?。?/p>

以上がJava でスケジュールされたタスクを?qū)g裝するには、どのような方法がありますか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動(dòng)コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開(kāi)始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場(chǎng)合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場(chǎng)合はconn.rollback()を呼び出します。同時(shí)に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお?jiǎng)幛幛筏蓼埂?/p>

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時(shí)刻を取得します。 3。of()メソッドを使用して特定の日付と時(shí)刻を作成します。 4.プラス/マイナスメソッドを使用して、時(shí)間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります。現(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

HTTPミドルウェアロギングの例を例に進(jìn)めます HTTPミドルウェアロギングの例を例に進(jìn)めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時(shí)間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開(kāi)始時(shí)間と終了時(shí)間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開(kāi)始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Garbage CollectionはJavaでどのように機(jī)能しますか? Garbage CollectionはJavaでどのように機(jī)能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動(dòng)的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採(cǎi)用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時(shí)間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號(hào)、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるU(xiǎn)RL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進(jìn)みます 説明された延期聲明の例で進(jìn)みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時(shí)にすぐに評(píng)価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復(fù)に適したパニックが発生した場(chǎng)合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles