我有2个灰熊应用程序我想在同一台服务器上的不同URL上并行运行。当我将我的网址从localhost
更改为api.url.local
以进行本地调试时,会抛出java.nio.channels.UnresolvedAddressException
。为了让java识别另一个URL(即修改主机文件),我需要做些什么吗?或者我是朝着错误的方向前进的?
我目前在Windows上,但将部署到Linux。 (如果由我决定,我会运行Linux)
public class Main {
public static final URI BASE_URI = getBaseURI();
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost/").port(9998).build();
}
protected static HttpServer startServer() throws IOException {
ResourceConfig rc = new PackagesResourceConfig("com.my.package.api.resources");
rc.getFeatures()
.put(JSONConfiguration.FEATURE_POJO_MAPPING, true);
return GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
}
public static void main(String[] args) throws IOException {
AnnotationConfigApplicationContext annotationCtx = new AnnotationConfigApplicationContext(Config.class);
HttpServer httpServer = startServer();
System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl\nHit enter to stop it...", BASE_URI, BASE_URI));
System.in.read();
httpServer.stop();
}
}
答案 0 :(得分:1)
使用一个IP地址在同一台计算机上的不同网址下运行两个不同的应用程序非常简单。但是根据你想要做的事情,可能需要一些设置。
我的假设是你在开发机器上这样做。这里最大的问题是两台服务器需要不同的端口号。
服务器#1
http://localhost:8080/
服务器#2
http://localhost:8081/
如果您想要命名实例。您必须更新hosts文件以将所需的命名实例指向本地计算机。但是,您仍然需要为每个应用程序执行单独的端口。
服务器#1
http://api.url.local:8080/
服务器#2
http://api.url.local2:8081/
您还必须更新您的tomcat(我假设您正在使用tocmat)配置。在元素中,我相信您必须将'name'属性更新为应用程序URL的名称。
友好警告,如果您使用相同的IP地址但使用不同的主机名,则SSL证书将无法正常工作。通常在这种设置中,您需要通配符或统一通信证书。
当您部署到生产环境时,我建议您使用Apache HTTP Server作为两个应用程序的代理,并具有两个单独的IP地址,除非您可以使用SSL通配符或统一通信证书。
如果您想在两个不同的URL下运行一个应用程序,那么这部分答案就是。
使用Apache Http Server实例代理您的应用程序,并使用mod_proxy将您的两个不同的服务器名称或IP地址转发到同一个Java实例。
我的建议是,只需运行两个应用程序实例。不要过多担心资源,硬件真的很难,而且值得花很多钱,然后担心如何为两个不同的站点运行一个实例。