我想运行一个Spring启动应用程序,但让它在多个端口上监听。
目的是让Apache能够将多个(子)域转发到不同端口上的spring boot应用程序(Tomcat)。例如:
example.com/** -> PORT 8080
client.example.com/** -> PORT 8090
employee.example.com/** -> PORT 8100
据我从SO的几个主题中理解,我最好从一个主类中启动多个@SpringBootApplication
Annotated类,对吧? (https://stackoverflow.com/a/25870132/1510659)
我还没有掌握,是如何分别配置这些应用程序中的每一个。
我们已经发布了这三个应用程序,如上面的链接帖子所示:
MainExampleApplication
ClientExampleApplication
EmployeeExampleApplication
现在,例如,我希望每个应用程序都有单独的Spring Security @Configuration
类,以及可能具有相同值的@RequestMappings
(例如" /&# 34。)
如何告诉@Configuration
或@Controller
类分配给哪个应用程序?
或者是否有可以在启动时传递给应用程序的属性来指定哪些资源负责上下文?
我希望我不会在这里走错路。我确实有使用Spring MVC的经验,并且已经配置了一些相当简单的Spring应用程序 - 但是没有多个上下文。如果有人能带领我朝着正确的方向前进,我真的很高兴。提前谢谢。
更新
正如iamiddy的回答和xeon的评论所述,我使用了Spring Profiles。我在启动时为SpringApplicationBuilder提供了每个应用程序上下文的配置文件,并在@Profile("some_profile")
上使用@Components
,[TestMethod]
public void Table_Export_Test()
{
//http://stackoverflow.com/questions/31042901/export-datatable-to-excel-using-epplus-with-additional-data
//Throw in some data
var dtdata = new DataTable("tblData");
dtdata.Columns.Add(new DataColumn("Order no.", typeof (string)));
dtdata.Columns.Add(new DataColumn("Product name", typeof (int)));
dtdata.Columns.Add(new DataColumn("Name", typeof (int)));
for (var i = 0; i < 20; i++)
{
var row = dtdata.NewRow();
row[0] = i;
row[1] = i*10;
row[2] = i*100;
dtdata.Rows.Add(row);
}
var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
if (existingFile.Exists)
existingFile.Delete();
using (var package = new ExcelPackage(existingFile))
{
var ws = package.Workbook.Worksheets.Add("Sheet1");
ws.Cells["A1"].Value = "Product Statistics";
ws.Cells[1, 1, 1, 6].Merge = true;
ws.Cells[3, 3].Value = "Total";
ws.Cells[3, 4].Value = "200";
ws.Cells[4, 3].Value = "Sold out";
ws.Cells[4, 4].Value = "50";
ws.Cells[1, 1, 1, 6].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
ws.Cells[3, 3, 6, 3].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
ws.Cells[3, 4, 6, 4].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
ws.Cells[6, 1].LoadFromDataTable(dtdata, true);
ws.Column(1).Width = 13;
ws.Column(2).Width = 13;
ws.Column(3).Width = 13;
ws.Column(4).Width = 13;
package.Save();
}
}
仅适用于某些上下文。
答案 0 :(得分:6)
使用Profiles
这是一个很好的弹簧功能,只加载与配置文件关联的bean。
完成后,使用不同的port
和profile
参数启动应用 N 次
例如:以下是启动第一个的方法,其余部分用于 N
java -jar -Dspring.profiles.active=production1 -Dserver.port=9000 app.jar