0

私はfat-jarを与えるspringbootプロジェクトを作成しました。実行時に外部のxmlファイルをit.iにプッシュしたいのですが、そのxmlファイルをspring-boot-tomcatコンテナに配置します。 (@import、--spring.config.locationなど)それらの方法は私のためにうまくいかなかった。外部xmlファイルをspring boot埋め込みTomcatに埋め込む方法

xmlファイルはApplicationInsight.xmlで、アプリケーションからAzureポータルに遠隔測定を送信するために使用されます。

非常に助けていただきありがとうございます。

+0

がどのように展開され、実行されているのに役立ちます

<!--snip --> <PreResources base="${applicationinsights.configurationDirectory}" <!--snip --> 

希望:

java -jar build/libs/file-gateway.jar -Dapplicationinsights.configurationDirectory=/apps/conf/ 

あなたはこれでリソースベースを設定することができますあなたのアプリケーション(OS、クラウドプラットフォームなど)? – Pytry

+0

完全な問題description.httpsはあります://github.com/Microsoft/ApplicationInsights-Java/issues/472 – Muni

答えて

0

GitHJubの問題に基づいて、私は問題の一部がJVMパラメータをどのように渡しているのか、そしてどのように "spring.config.location"を使用しているかと思います。

私は本当にAzure Insightsに詳しくはありませんが、正しく理解していれば、ApplicationInsights.xmlファイルをロードして自分自身を構成しようとしています。 WebConfigurerAdapterでは、それ以前に既に初期化されているので、私が以前に示唆したように、本当に設定できません。とにかくその部分を残しましたが、すぐにロードする必要があるので、ファイルをクラスパスASAPに追加するいくつかの追加方法を提供しました。値がファイル」の「クラスパス」せずに、単にフォルダパスでなければなりません代わりに

java -jar build/libs/file-gateway.jar --spring.config.location=classpath:/apps/conf/ApplicationInsight.xml 

新しい原料

まずあなたは、もともとのGitHubたala掲載していた、この行を見てみましょう"プレフィックス。また、 ' - 'の代わりに '-D'を使用してみてください。

このプロパティは、Springブートの自動構成プロパティファイルを含むディレクトリを参照することになっています。また、特定の "application.properties | yml"ファイルを参照することもできます。

これで私の以前の提案がうまくいくかもしれません。

旧提案

あなたがロードするリソースのためのユニークな方法が必要な場合は、アプリケーションにリソースハンドラを追加することができます。

@Configuration 
@EnableWebMvc 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Value("${telemetry.folder}") 
    private String telemetryFolder; 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry 
      .addResourceLocations(telemetryFolder); 
    } 
} 

および/またはあなたがapacheのIOでそれを読み込むことができます:

@Value("${telemetry.file}") 
private String telemetryFile; 

@Autowired 
private ResourceLoader resourceLoader; 

public String telemtryXml(){ 

    return org.apache.commons.io.IOUtils.toString(resourceLoader.getResource(telemtryFile).getInputStream()); 
} 

しかし、あなたが使用しているAPIは非常に早く、初期化する必要がない場合は、こののみ動作します。 GitHubの問題に関するあなたの最後のポストで

より新しい原料

、あなたはこれを試してみました:

代わり
java -jar build/libs/file-gateway.jar -applicationinsights.configurationDirectory="/apps/conf/" 

を、このようなJVMパラメータとしてプロパティを追加してみてください:

java -jar build/libs/file-gateway.jar -Dapplicationinsights.configurationDirectory=/apps/conf/ 

の後に大文字の 'D'文字を追加して、パスから引用符を削除したことに注目してください。

クラスパスにファイルを追加するその他の方法は次のとおりです。

  1. ディレクトリをJVMクラスパスに追加します。

    のjava -cp "ビルド/ libsに/ファイルgateway.jar:/アプリケーション/ confに/ *" your.package.MainSpringBootApplication

これは(一般的に)でメインクラスを指定する必要があります'@SpringBootApplication'で注釈が付けられ、メインメソッドが含まれています。前と同じようにjarファイルを実行しませんが、classpathに追加しています。

  1. SpringBootについては忘れて、JEE開発者としてルーツに戻ってください。 "src/main/resources/META-INF"フォルダ、または "src/main/webapp/META-INF"フォルダの下にアプリケーション用の "context.xml"を追加してください。私は実行可能なwarファイルを構築している場合は後で、jarファイルの場合は後者を好む。

例のcontext.xml:

<?xml version='1.0' encoding='utf-8'?> 
<!-- path should be the context-path of you application. 
<Context path="/"> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
    <PreResources base="/apps/conf" 
        className="org.apache.catalina.webresources.DirResourceSet" 
        internalPath="/" 
        webAppMount="/WEB-INF/classes"/> 
    </Resources> 
</Context> 

また、ELとJVMパラメータを使用することができます。だから、

あなたはこれでjarファイルを実行した場合::)

+0

私は上記の解決策を試しましたが、バネリソースがそのxmlファイルを直接読み取るが動作しない埋め込まれた風船の容器に – Muni

+0

ああ...わかりました。私の答えをより便利に更新してみましょう。 – Pytry

+0

詳細な説明をありがとうございます。私は上記のすべての古い提案、新しいもの、そしてもっと新しいものを試しました。何も私のために働いた、またconfディレクトリを読むclasspathにcontext.xmlを持っていました。それらは私もあまり役に立ちませんでしたが、springリソースはtomcatコンテナーではなくそれらのファイルを読み込みます。外部からの起動時にxmlファイルを埋め込みTomcatに直接プッシュする方法を教えてください。または、tomcatがlibの場所の下にある外部confファイルを取り込むような方法で、gradleファイルを設定します。私は埋め込みのtomcatのlibフォルダにファイルを配置する必要があります – Muni

関連する問題