Saya mencoba untuk mengatur konteks aplikasi Boot Spring secara terprogram. Alasan untuk konteks root adalah kami ingin aplikasi diakses localhost:port/{app_name}
dan semua path controller ditambahkan ke sana.
Ini adalah file konfigurasi aplikasi untuk aplikasi 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;
}
}
Berikut adalah pengontrol indeks untuk halaman utama.
@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";
}
}
Root aplikasi baru harus di localhost:12378/mainstay
, tetapi masih terletak di localhost:12378
.
Apa yang saya lewatkan yang menyebabkan Spring Boot tidak menambahkan root konteks sebelum pemetaan permintaan?
sumber
EmbeddedServletContainerCustomizer
juga bekerja. Tapi aku akan pergi apa yang disediakan bukannya mencoba sendiri. Mengapa solusi Anda tidak bekerja berkaitan dengan perilaku default yang diprogram (secara tidak sengaja?) DiServerProperties
, konfigurasi defaultcontextPath
adalah""
(dan memeriksanull
dan tidak""
. Yang terakhir menimpa Anda secara eksplisit ditetapkancontextPath
.Jika Anda menggunakan Spring Boot, maka Anda tidak perlu mengkonfigurasi properti server melalui inisialisasi Vean.
Sebaliknya, jika satu fungsionalitas tersedia untuk konfigurasi dasar, maka dapat diatur dalam file "properties" yang dipanggil
application
, yang seharusnya beradasrc\main\resources
di bawah dalam struktur aplikasi Anda. File "properties" tersedia dalam dua format.yml
.properties
Cara Anda menentukan atau mengatur konfigurasi berbeda dari satu format ke format lainnya.
Dalam kasus tertentu, jika Anda memutuskan untuk menggunakan ekstensi
.properties
, maka Anda akan memiliki sebuah file yang bernamaapplication.properties
bawahsrc\main\resources
dengan pengaturan konfigurasi berikutOTOH, jika Anda memutuskan untuk menggunakan
.yml
ekstensi (yaituapplication.yml
), Anda perlu mengatur konfigurasi menggunakan format berikut (yaituYAML
):Untuk properti Spring Boot yang lebih umum lihat tautan di bawah ini:
sumber
Jika Anda menggunakan Spring Boot 2.0.0 gunakan:
sumber
server.servlet.contextPath=/api
harap perhatikan bahwa properti "server.context-path" atau "server.servlet.context-path" [mulai dari springboot 2.0.x] hanya akan berfungsi jika Anda menggunakan wadah yang disematkan, misalnya tomcat yang disematkan. Properti ini tidak akan berpengaruh jika Anda menggunakan aplikasi Anda sebagai perang ke kucing jantan eksternal misalnya.
lihat jawaban ini di sini: https://stackoverflow.com/a/43856300/4449859
sumber
war
file yang menggunakanspringboot v2.x
dantomcat v8.5
?Properti yang benar adalah
untuk mengkonfigurasi jalur DispatcherServlet
dan
untuk mengkonfigurasi jalur konteks aplikasi di bawah itu.
sumber
Kita dapat mengubah path root konteks menggunakan entri sederhana di file properti.
application.properties
sumber
Kita bisa mengaturnya di
application.properties
asAPI_CONTEXT_ROOT=/therootpath
Dan kami mengaksesnya di kelas Java seperti yang disebutkan di bawah ini
sumber
server.contextPath = / andalan
berfungsi untuk saya jika saya punya satu file perang di JBOSS. Di antara banyak file perang tempat masing-masing berisi jboss-web.xml tidak berfungsi. Saya harus meletakkan jboss-web.xml di dalam direktori WEB-INF dengan konten
sumber
Di Spring Boot 1.5:
Tambahkan properti berikut di
application.properties
:Catatan:
/demo
adalah URL jalur konteks Anda.sumber
Anda dapat melakukannya dengan menambahkan port dan path konteks dengan mudah untuk menambahkan konfigurasi di [src \ main \ resources] file .properties dan juga file .yml
konfigurasi file application.porperties
konfigurasi file application.yml
Kita juga bisa mengubahnya secara program di spring boot.
}
Kami juga bisa menambahkan cara lain
menggunakan perintah java spring boot 1.X
menggunakan perintah java spring boot 2.X
sumber
Jika Anda menggunakan application.yml dan versi pegas di atas 2.0 maka konfigurasikan dengan cara di bawah ini.
Sekarang semua panggilan api akan menjadi seperti http: // localhost: 8081 / demo-api /
sumber
Kita bisa mengaturnya menggunakan
WebServerFactoryCustomizer
. Ini dapat ditambahkan secara langsung di kelas metode boot utama spring yang memulai Spring ApplicationContext.sumber
Jika Anda menggunakan Spring Boot 2.x dan ingin meneruskan properti path konteks di baris perintah, Anda harus meletakkan double // seperti ini:
Itu berhasil bagi saya berjalan di windows.
sumber
sumber
Itu harus: server.servlet.context-path = / catatan demo yang tidak memiliki tanda kutip hanya nilai yang diawali oleh '/' nilai ini masuk dalam file application.properties Anda
sumber
path konteks dapat langsung diintegrasikan ke kode tetapi tidak disarankan karena tidak dapat digunakan kembali jadi tulis di file application.properties server.contextPath = / nama folder tempat Anda meletakkan kode contextPath = nama folder tempat Anda meletakkan kode / Catatan: perhatikan pemotongan dengan hati-hati.
sumber