[解決済み】Spring Bootアプリケーションにコンテキストパスを追加する
質問
Spring Bootアプリケーションのコンテキストルートをプログラム的に設定しようとしています。コンテキストルートを設定する理由は、アプリを
localhost:port/{app_name}
を作成し、すべてのコントローラパスをそれに追加します。
以下は、Webアプリのアプリケーション設定ファイルです。
@Configuration
public class ApplicationConfiguration {
Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);
@Value("${mainstay.web.port:12378}")
private String port;
@Value("${mainstay.web.context:/mainstay}")
private String context;
private Set<ErrorPage> pageHandlers;
@PostConstruct
private void init(){
pageHandlers = new HashSet<ErrorPage>();
pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
}
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
logger.info("Setting custom configuration for Mainstay:");
logger.info("Setting port to {}",port);
logger.info("Setting context to {}",context);
factory.setPort(Integer.valueOf(port));
factory.setContextPath(context);
factory.setErrorPages(pageHandlers);
return factory;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
メインページ用のインデックスコントローラです。
@Controller
public class IndexController {
Logger logger = LoggerFactory.getLogger(IndexController.class);
@RequestMapping("/")
public String index(Model model){
logger.info("Setting index page title to Mainstay - Web");
model.addAttribute("title","Mainstay - Web");
return "index";
}
}
アプリケーションの新しいルートは
localhost:12378/mainstay
にあるのですが、まだ
localhost:12378
.
Spring Bootがリクエストマッピングの前にコンテキストルートを追加しない原因は何でしょうか?
解決方法は?
なぜ、自分で解決しようとするのですか。Spring-bootはすでにそれをサポートしています。
まだ持っていない場合は、"Select "セクションに
application.properties
ファイルを
src\main\resources
. そのプロパティファイルの中に、2つのプロパティを追加してください。
server.contextPath=/mainstay
server.port=12378
UPDATE (Spring Boot 2.0)
Spring Boot 2.0では(Spring MVCとSpring WebFluxの両方がサポートされたため)、Spring MVCとSpring WebFluxの両方がサポートされています。
contextPath
は、以下のように変更されました。
server.servlet.context-path=/mainstay
その後、カスタムサーブレットコンテナの設定を削除することができます。もしコンテナに対して何らかの後処理をする必要があるのなら、 コンテナに対して
EmbeddedServletContainerCustomizer
の実装を設定に追加します (例えば、エラーページを追加するため)。
基本的に
application.properties
はデフォルトとして機能し、別の
application.properties
を配信するアーティファクトの横に置くか、JVM パラメータ (
-Dserver.port=6666
).
参照 リファレンスガイド 特に プロパティ のセクションをご覧ください。
クラス
ServerProperties
を実装しています。
EmbeddedServletContainerCustomizer
. のデフォルトは
contextPath
は
""
. あなたのコードサンプルでは
contextPath
を直接
TomcatEmbeddedServletContainerFactory
. 次に
ServerProperties
インスタンスはこのインスタンスを処理し、あなたのパスからリセットして
""
. (
この行
は
null
をチェックしますが、デフォルトは
""
は常に失敗し、コンテキストを
""
で、あなたのものを上書きしてしまいます)。
関連
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] 文字列の長さに応じて文字列をトリミングする
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Spring BootでSQL文のログを取るには?
-
[解決済み】Spring Boot起動後のコード実行について
-
[解決済み】Spring Bootで2つのDataSourceを構成して使用する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] このフォーマット(Tue Jul 13 00:00:00 CEST 2010)の日付をJavaの日付に変換する方法(文字列はalfrescoのプロパティに由来しています)
-
[解決済み] 警告: コンテキスト初期化中に例外が発生 - 更新の試みはキャンセルされました。
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] Java Spring Bootです。アプリのルート("/")をindex.htmlにマップする方法は?